Общая структура планировщика-диспетчера. Функции выделения/освобождения памяти

Страницы работы

Содержание работы

III Анализ алгоритмов управления

III.1 Общая структура планировщика-диспетчера

Рассмотрим общую структуру планировщика-диспетчера, реализованного в данном курсовом проекте.

 


На данной схеме показано взаимодействие основных компонентов: примитивов ядра ОС (MAllok, SwapSegm, и др.), бесприоритетной очереди процессов пользователя, планировщика, выбирающего очередной процесс на исполнение из этой очереди, и диспетчера, выделяющего текущему процессу квант процессорного времени.

Рассмотрим конкретную реализацию вышеперечисленных компонентов.

III.2 Функции выделения/освобождения памяти

При выделении памяти происходит программное прерывание, процесс приостанавливается и управление передается менеджеру памяти. Менеджер памяти определяет есть ли в наличии требуемый объем оперативной памяти, если есть, выделяется новый сегмент требуемого размера, в таблицу сегментов процесса добавляется новая запись, содержащая информацию о выделенном сегменте. Далее управление передается  диспетчеру и он либо передает управление процессу, если не закончился квант времени, либо планировщику, для выбора нового процесса из очереди. Если же свободная оперативная память требуемого размера отсутствует, менеджер памяти освобождает один или несколько занятых сегментов, путем откачки их на диск (SwapSegm()).


 


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

III. 3 Обработка прерываний

Общая схема обработки прерываний показана на рис. 6.

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

Непланируемые (аппаратные) прерывания возникают в следующих случаях.

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


выбор новой задачи

 
 


Прерывание «ошибка адресации» возникает при попытке процессом удалить несуществующий сегмент, либо если при операции чтения/записи в сегмент, смещение превышает размер сегмента. При этом прерывании процесс аварийно завершается.

Алгоритмы обработки аппаратных прерываний приводятся на рис. 7.

 

Похожие материалы

Информация о работе