Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 625 из 715

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

алгоритм schedule_process (модифицированный)

входная информация: отсутствует

выходная информация: отсутствует

{

 do while (для запуска не будет выбран один из процессов)  {

  if (работа ведется на главном процессоре)

   for (всех процессов в очереди готовых к выполнению)

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

  else /* работа ведется на подчиненном процессоре */

   for (тех процессов в очереди, которые не нуждаются в главном процессоре)

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

  if (для запуска не подходит ни один из процессов)

   не загружать машину, переходящую в состояние простоя; /* из этого состояния машина выходит в результате прерывания */

 }

 убрать выбранный процесс из очереди готовых к выполнению;

 переключиться на контекст выбранного процесса, возобновить его выполнение;

}

Рисунок 12.3. Алгоритм диспетчеризации

алгоритм syscall /* исправленный алгоритм вызова системной функции */

входная информация: код системной функции

выходная информация: результат

|< Пред. 623 624 625 626 627 След. >|

Java книги

Контакты: [email protected]