Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
625 из 715
Главный процессор реагировал бы гораздо быстрее, если бы подчиненный процессор устанавливал при этом глобальный флаг; проверяя установку флага во время обработки очередного прерывания по таймеру, главный процессор произвел бы в итоге переключение контекста максимум через один таймерный тик. С другой стороны, подчиненный процессор мог бы прервать работу главного и заставить его переключить контекст немедленно, но данная возможность требует специальной аппаратной реализации.
алгоритм schedule_process (модифицированный)
входная информация: отсутствует
выходная информация: отсутствует
{
do while (для запуска не будет выбран один из процессов) {
if (работа ведется на главном процессоре)
for (всех процессов в очереди готовых к выполнению)
выбрать процесс, имеющий наивысший приоритет среди загруженных в память;
else /* работа ведется на подчиненном процессоре */
for (тех процессов в очереди, которые не нуждаются в главном процессоре)
выбрать процесс, имеющий наивысший приоритет среди загруженных в память;
if (для запуска не подходит ни один из процессов)
не загружать машину, переходящую в состояние простоя; /* из этого состояния машина выходит в результате прерывания */
}
убрать выбранный процесс из очереди готовых к выполнению;
переключиться на контекст выбранного процесса, возобновить его выполнение;
}
Рисунок 12.3. Алгоритм диспетчеризации
алгоритм syscall /* исправленный алгоритм вызова системной функции */
входная информация: код системной функции
выходная информация: результат
|< Пред. 623 624 625 626 627 След. >|