Архитектура операционной системы UNIX



              

ГЛАВНЫЙ И ПОДЧИНЕННЫЙ ПРОЦЕССОРЫ - часть 2


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

алгоритм syscall /* исправленный алгоритм вызова систем- * ной функции */ входная информация: код системной функции выходная информация: результат выполнения системной функции { если (работа ведется на подчиненном процессоре) { переустановить значение поля идентификации процессо- ра в соответствующей записи таблицы процессов; произвести переключение контекста; } выполнить обычный алгоритм реализации системной функции; перенастроить значение поля идентификации процессора, чтобы оно указывало на "любой" (подчиненный); если (на главном процессоре должны выполняться другие процессы) произвести переключение контекста; }

Рисунок 12.4. Алгоритм обработки обращения к системной функции

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

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

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

Comments:

Copyright ©




Содержание  Назад  Вперед