как работает диспетчер? - PullRequest
16 голосов
/ 24 января 2011

Я недавно начал курс по ОС. Насколько я знаю, работа диспетчера заключается в том, чтобы сохранить контекст текущего процесса и загрузить контекст процесса, который будет запущен следующим. Но как это сделать? Когда процесс выгружается, тогда, как только диспетчер будет загружен и выполнен (так как это также программа), контекст предыдущего процесса в регистрах, PSW и т. Д. Будет потерян. Как собирается сохранить контекст перед загрузкой?

Ответы [ 4 ]

19 голосов
/ 24 января 2011

Простой ответ заключается в том, что современные процессоры предлагают архитектурные расширения, обеспечивающие несколько банков регистров, которые могут быть заменены аппаратно, поэтому до X задач могут сохранить свой полный набор регистров.

Более сложный ответявляется то, что диспетчер, когда вызван прерыванием, получает полный набор регистров программы, которая была запущена во время прерывания (за исключением счетчика программ, который предположительно распространяется через взаимно согласованный «volatile»)зарегистрироваться или что-то подобное).Таким образом, диспетчер должен быть тщательно написан, чтобы сохранить текущее состояние банков регистра в качестве его первой операции после запуска.Короче говоря, сам диспетчер не имеет непосредственного контекста и поэтому не страдает от той же проблемы.

Вот попытка простого описания того, что происходит во время вызова диспетчера:

  1. Программа, которая в данный момент имеет контекст, запущена на процессоре.Регистры, счетчик программ, флаги, основа стека и т. Д. Подходят для этой программы;за возможным исключением родного «зарезервированного регистра» операционной системы или чего-то подобного, ничего о программе ничего не знает о диспетчере.
  2. Срабатывает временное прерывание для функции диспетчера.Единственное, что происходит в этот момент (в случае с архитектурой ванили), - это то, что счетчик программ сразу переходит на любой адрес ПК в прерывании BIOS, указанном как.Это начинает выполнение диспетчерской подпрограммы «dispatch»;все остальное остается нетронутым, поэтому диспетчер видит регистры, стек и т. д. программы, которая ранее выполнялась.
  3. Диспетчер (как и все программы) имеет набор инструкций, которые работают с текущим набором регистров.Эти инструкции написаны таким образом, что они знают, что ранее выполняемое приложение оставило все свое состояние позади.Первые несколько инструкций в диспетчере будут где-то сохранять это состояние в памяти.
  4. Диспетчер определяет, какой должна быть следующая программа, имеющая процессор, берет все ранее сохраненное состояние и заполняет регистры.
  5. Диспетчер переходит к соответствующему счетчику ПК, как указано в задаче, полный контекст которой теперь установлен на процессоре.

Чтобы (более) упростить в итоге;диспетчеру не нужны регистры, все, что он делает, это записывает текущее состояние процессора в заранее определенную ячейку памяти, загружает состояние процессора других процессов из заранее определенной ячейки памяти и переходит туда, где остановился этот процесс.

Это делает это более ясным?

1 голос
/ 24 января 2011

Обычно он не загружается таким образом, что вы теряете информацию о текущем процессе.

Часто это прерывание происходит в контексте текущего процесса.

Таким образом, диспетчер (или планировщик) может сохранить всю соответствующую информацию в каком-либо блоке управления задачами перед загрузкой этой информации для следующего процесса.

Сюда входит содержимое регистра, указатель стека и т. Д.

Стоит отметить, что контекст следующего процесса включает его состояние нахождения в прерывании диспетчера, так что, когда он возвращается из прерывания, это совершенно другой процесс.

0 голосов
/ 03 января 2017

Основная ответственность операционной системы - контроль выполнения процессов.Это включает в себя определение шаблона для выполнения и распределение ресурсов для процессов.

Процесс может находиться в одном из двух состояний:

  1. Работает или
  2. Не выполняется

Когда ОС создаетновый процесс, он создает блок управления процессом для процесса и вводит этот процесс в систему в состояние не работает.Существующий процесс известен ОС и ожидает возможности выполнения.

Время от времени выполняющиеся в настоящее время процессы будут прерываться, и диспетчерская часть ОС будет выбирать некоторые другие процессы для запуска.

Во время выполнения, когда процесс лишен ресурсов, он блокируется.При наличии этих ресурсов он снова входит в состояние готовности и затем в рабочее состояние.Этот переход из состояния готовности в рабочее состояние выполняется диспетчером.Диспетчер отправляет процесс.

0 голосов
/ 22 декабря 2013

Диспетчерский модуль обеспечивает управление процессором для процесса, выбранного краткосрочным планировщиком; это включает в себя: переключение контекста, переключение в режим пользователя, прыжок в нужное место в пользовательской программе, чтобы перезапустить эту программу

...