Как работает диспетчер?

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

Ответы

Ответ 1

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

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

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

  • Программа, которая в настоящее время имеет контекст, запущена на процессоре. Регистры, счетчик программ, флаги, база стека и т.д. Подходят для этой программы; за исключением, например, "зарезервированного регистра" операционной системы или какого-то такого, ничего о программе ничего не знает о диспетчере.
  • Запускается прерывание по времени для функции диспетчера. Единственное, что происходит на данный момент (в случае с ванильной архитектурой) - это то, что счетчик программ сразу же переходит к тому, что указано в адресе ПК в прерывании BIOS. Это начинает выполнение подпрограммы диспетчера диспетчеризации; все остальное остается нетронутым, поэтому диспетчер видит регистры, стек и т.д. программы, которая ранее выполнялась.
  • Диспетчер (как и все программы) имеет набор инструкций, которые работают с текущим набором регистров. Эти инструкции написаны таким образом, что они знают, что предыдущее исполняемое приложение оставило все свое состояние позади. Первые несколько инструкций в диспетчере будут хранить это состояние в памяти где-то.
  • Диспетчер определяет, какой должна быть следующая программа для CPU, берет все ранее сохраненное состояние и заполняет регистры.
  • Диспетчер переходит к соответствующему счетчику ПК, как указано в задаче, которая теперь имеет полный контекст, установленный на процессоре.

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

Является ли это более ясным?

Ответ 2

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

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

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

Это включает в себя содержимое регистра, указатель стека и т.д.

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

Ответ 3

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

Ответ 4

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

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

  • Запуск или
  • Не работает

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

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

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