<<
>>

Диспетчеризация процессов (нитей)

Операционная система NetWare включает в себя следующие очереди (рис. 8.4), в которых находятся различные нити, ожидая освобождения центрального процессора (ЦП): WorkToDoList (только для версии 4.x); RunList; Delayed WorkToDo; LowPriority.
Очереди перечислены в порядке убывания приоритетов обслуживания ни­тей. Внутри каждой очереди нити диспетчируются в соответствии с дисципли­ной FIFO: «первый пришел, первый обслужен». Уже отмечалось, что нить - это или внутренняя задача ОС, или задача, связанная с NLM-модулем. ОС иденти­фицирует и отслеживает каждую нить по ее блоку управления процессом РСВ (Process Control Block). Обычно в NetWare нить сама себя переводит в неактивное состояние (свтает в очередь). Это происходит в одном из следующих случаев (см. рис. 8.4).

1. Нить выполняет функцию SheduleWorkToDo (для версии 4.x). Создается новая нить, которая заимствуется из ядра NetWare и помещается в очередь WorkToDoList, имеющую высший приоритет для планирования на центральном процессоре (ЦП).

Старая нить помещается в конец очереди RunList. 2. Нить приостанавливается, устанавливая семафор (функция WaitOn LocalSemaphore) или ожидая активизации со стороны другой нити (функция SuspendThread). В этом случае нить помещается в конец очереди RunList, но не диспетчируется (не планируется) до наступления требуемого события. 3. Нить выполняет функцию ThreadSwitch, чтобы переключить контекст (т. е. чтобы активизировать другую нить из очереди). В этом случае нить помеща­ется в конец очереди RunList и диспетчируется, когда до нее доходит очередь. 4. Нить выполняет функцию BeginThread. Создается новая нить, которая помещается в конец очереди RunList. Старая нить продолжает выполняться. 5. Нить выполняет функцию ThreadSwitchWithDelay. Нить помещается в конец очереди DelayedWorkToDo и приостанавливается на 50 переключений контекста (нитей), после чего она помещается в конец очереди RunList. Число переключений контекста (50) можно изменить с помощью функции SetThread Handicap (при этом говорят, что устанавливается постоянный гандикап). Час­то функцию ThreadSwitchWithDelay используют для того, чтобы активизиро­вать задачи из очереди LowPriority, так как нити из этой очереди выполняются только в том случае, если пуста очередь RunList. Аналогичные действия вы­полняются, если встречается функция Delay (задержать нить на определенный интервал времени). 6. Нить выполняет функцию ThreadSwitchLowPriority. В этом случае она помещается в очередь LowPriority, имеющую самый низкий приоритет. Нити в этой очереди выполняются только в том случае, если пуста очередь RunList и нет нитей, для которых установлен постоянный приоритет. Типичные низкопри­оритетные нити - это создание резервной копии или упаковка файла.
<< | >>
Источник: В .А. Галкин, Ю .А. Григорьев. Телекоммуникации и сети. 2003

Еще по теме Диспетчеризация процессов (нитей):

  1. Очерк 2: Берт «Процесс — вот мое достояние. Именно процесс создает успех»
  2. Задания, мешающие когнитивному процессу (ЗМКП), и задания, помогающие когнитивному процессу (ЗПКП)
  3. Часть I. Начальный процесс
  4. ПРОЦЕСС НЕРВНЫЙ
  5. ПРОЦЕСС НАДСОЗНАТЕЛЬНЫЙ
  6. Психические процессы
  7. ПРОЦЕСС НЕРВНЫЙ: ИНДУКЦИЯ
  8. ПРОЦЕСС ПСИХИЧЕСКИЙ
  9. ПРОЦЕСС КУЛЬТУРНЫЙ
  10. Обратный процесс
  11. Ю.М. Плотински. Модели социальных процессо, 2001
  12. ПРОЦЕСС ТЕЛЕПАТИЧЕСКИЙ
  13. ПРОЦЕСС ДУШЕВНЫЙ БЕССОЗНАТЕЛЬНЫЙ
  14. Процесс
  15. Творческий процесс на телевидении
  16. 3.1. Содержание процесса
  17. Глава 9. Инновационные процессы
  18. БАЛАНС ПРОЦЕССОВ НЕРВНЫХ
  19. УРАВНОВЕШЕННОСТЬ ПРОЦЕССОВ НЕРВНЫХ