В современных компьютерах одновременно выполняется множество процессов . Активные процессы помещаются в массив, называемый очередью выполнения или runqueue . Очередь выполнения может содержать значения приоритета для каждого процесса, которые будут использоваться планировщиком для определения того, какой процесс запускать следующим. Чтобы гарантировать, что каждая программа имеет справедливую долю ресурсов, каждая из них запускается в течение определенного периода времени (кванта), прежде чем она будет приостановлена и помещена обратно в очередь выполнения. Когда программа останавливается, чтобы позволить другой запуск, программе с наивысшим приоритетом в очереди выполнения разрешается выполнение.
Процессы также удаляются из очереди выполнения, когда они просят засыпать , ожидают, когда ресурс станет доступным, или когда они были завершены.
В операционной системе Linux (до ядра 2.6.23) каждому ЦП в системе предоставляется очередь выполнения, которая поддерживает как активный, так и просроченный массив процессов. Каждый массив содержит 140 (по одному для каждого уровня приоритета) указателей на двусвязные списки , которые, в свою очередь, ссылаются на все процессы с заданным приоритетом. Планировщик выбирает следующий процесс из активного массива с наивысшим приоритетом. Когда истекает квант процесса, он помещается в массив с истекшим сроком действия с некоторым приоритетом. Когда активный массив больше не содержит процессов, планировщик меняет местами активный и просроченный массивы, отсюда и название планировщик O (1).
В UNIX или Linux , то сары команда используется для проверки очереди выполнения.
Vmstat UNIX или Linux команда также может быть использована для определения количества процессов , которые находятся в очереди , чтобы запустить или ожидающие выполнения. Они появляются в столбце «r».
Существует две модели очередей выполнения: одна назначает очередь выполнения каждому физическому процессору, а другая имеет только одну очередь выполнения в системе.
Смотрите также
- Полностью Fair Scheduler , алгоритм планирования, используемый в Linux начиная с ядра 2.6.23.