Архитектура современных операционных систем
40 В Unix используется круговая многоуровневая диспетчеризация, согласно которой планировщик планирует загрузку процессора следующим образом: 1. после истечения квоты времени, выделенной процессу, его выпол- нение приостанавливается, если он до этого не был приостановлен или сам не перешел в состояние ожидания, контекст процесса сохраняется, и он переходит в конец очереди своего приоритета. 2. из очереди готовых процессов выбирается наиболее высокоприори- тетный процесс, его контекст восстанавливается и он запускается на выполне- ние. 3. если имеется несколько процессов с одинаковым приоритетом, то выбирается тот, который ждет дольше (поле CPU которого меньше). 4. Если в системе нет ни одного готового процесса, планировщик пе- реходит в состояние ожидания, и повторяет попытку планирования при следу- ющем тике таймера или прерывании. Все приоритеты в системе разбиты на 2 класса: 1. Системные. 2. Пользовательские. Внутри каждого из классов существуют уровни приоритетов (рис. 2.22.). Пользовательские уровни приоритета используются для процессов, рабо- тающих в пользовательском режиме, системные уровни – для процессов в си- стемном режиме. Процессы, работающие в системном режиме, не могут прерываться пла- нировщиком и работают, пока сами не перейдут в ожидание. Их приоритеты при этом устанавливаются в зависимости от того, какого события они ждут. Наивысшим приоритетом обладают процессы, ожидающие свопинга и т.д. При переходе процесса из системного режима в пользовательский, его приоритет пересчитывается по правилам пересчета пользовательских приоритетов. Для пересчета приоритета готовых пользовательских процессов плани- ровщик выполняет следующие действия:
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy