Введение

Двухуровневое планирование — это термин в информатике, описывающий метод повышения эффективности планирования процессов, включающих процессы, выгруженные в память. Рассмотрим следующую проблему: система содержит 50 запущенных процессов, все с одинаковым приоритетом. Однако оперативная память системы может одновременно содержать только 10 процессов. Следовательно, 40 процессов всегда будут выгружены и записаны в виртуальную память на жесткий диск. Время, необходимое для выгрузки и загрузки процесса, составляет 50 мс соответственно. При использовании простого алгоритма Round Robin, при каждом переключении контекста процесс необходимо будет загрузить (поскольку в память загружаются только 10 наименее используемых процессов). Случайный выбор среди процессов снизит вероятность загрузки нужного процесса до 80% (40/50). В этом случае, очевидно, потребуется и выгрузка другого процесса. Выгрузка и загрузка процессов — ресурсоемкие операции, и планировщик будет тратить много времени на ненужные обмены. Именно здесь на помощь приходит двухуровневое планирование. Оно использует два различных планировщика: планировщик нижнего уровня, который выбирает только те процессы, которые находятся в оперативной памяти, и планировщик верхнего уровня, который отвечает за выгрузку и загрузку процессов из памяти. Планировщик верхнего уровня выполняет планирование гораздо реже, чем планировщик нижнего уровня, поскольку операции выгрузки и загрузки занимают много времени. Таким образом, планировщик верхнего уровня выбирает процессы, которые долгое время находятся в памяти, и выгружает их, заменяя процессами с диска, которые долгое время не выполнялись. Конкретный способ выбора процессов зависит от реализации планировщика верхнего уровня. Необходимо найти компромисс, учитывающий следующие факторы:

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