You are here

Context Switching

Перевод может содержать ошибки. Читайте первоисточник: Context Switching

Назад: [Как работает FreeRTOS] Вверх: [Как работает FreeRTOS] Вперёд: [Как работает FreeRTOS]

 

Во время выполнения задача использует регистры процессора / микроконтроллера и обращается к ОЗУ и ПЗУ, как и любая другая программа. Эти ресурсы вместе (регистры процессора, стек, и т.п.) составляют контекст выполнения задачи.

ExeContext.gif

Задача представляет из себя последовательный фрагмент кода. Она не знает, когда будет приостановлена (заменена/выгружена или переключена/выключена) или возобновлена (загружена или включена) ядром, и даже не знает, когда это происходит. Рассмотрим пример, в котором задача будет приостановлена непосредственно перед выполнение инструкции суммирования величин, содержащихся в двух регистрах процессора. Пока задача приостановлена, другие задачи будут выполняться и могут изменить значение регистров процессора. После возобновления задача не будет знать, что регистры процессора были изменены. И если она использует изменившиеся значения, результатом суммирования будет неправильное значение.

Чтобы предотвратить этот тип ошибки, необходимо чтобы после возобновления задача имела контекст, идентичный контексту непосредственно перед приостановвкой. Ядро ОС отвечает за то, чтобы это было именно так. Для этого оно сохраняет контекст задачи, которая приостанавливается. Когда задача возобновляется, её сохранённый контекст восстанавливается ядром ОС перед продолжением выполнения задачи. Процесс сохранения контекста приостанавливаемой задачи и восстановление контекста задачи, которая возобновляет выполнение, называется переключением контекста.

Hobby's category: