- •Глава 4. Процессы и потоки
- •Уровни irql
- •Высший (ошибка шины,...)
- •Питание
- •Межпроцессорное прерывание
- •Устройство 1
- •Диспетчерски й/d pc
- •Низший (обычный код)
- •152 Глава 4. Процессы и потоки
- •154 Глава 4. Процессы и потоки
- •Диспетчер системных вызовов
- •156 Глава 4. Процессы и потоки
- •158 Глава 4. Процессы и потоки
- •160 Глава 4. Процессы и потоки
- •162 Глава 4. Процессы и потоки
- •164 Глава 4. Процессы и потоки
- •166 Глава 4. Процессы и потоки
- •168 Глава 4. Процессы и потоки
- •V(f) — нарастить число занятых буферов
- •V(f) — нарастить число занятых буферов
- •170 Глава 4. Процессы и потоки
- •172 Глава 4. Процессы и потоки
- •174 Глава 4. Процессы и потоки
- •176 Глава 4. Процессы и потоки
- •178 Глава 4. Процессы и потоки
системной
области памяти, куда они помещаются
после считывания из регистров
контроллера этого устройства, в
индивидуальную часть адресного
пространства процесса, запросившего
операцию ввода-вывода. Такое действие
постоянно выполняется системой
ввода-вывода, и для его реализации были
введены такие специфические процедуры
обслуживания прерываний, как АРС.
Диспетчеризация
прерываний является важной функцией
ОС, и эта функция реализована
практически во всех мультипрограммных
операционных системах. Можно<
заметить, что в общем случае в операционной
системе реализуется двухуровневый
механизм планирования работ. Верхний
уровень планирования выполняется
диспетчером прерываний, который
распределяет процессорное время между
потоком поступающих запросов на
прерывания различных типов — внешних,
внутренних и программных. Оставшееся
процессорное время распределяется
другим диспетчером — диспетчером
потоков на основании дисциплин
квантования и других,-рассмотренных
ранее.
Системные
вызовы
Системный
вызов позволяет
приложению обратиться к операционной
системе с просьбой выполнить то или
иное действие, оформленное как процедура
(или набор процедур) кодового сегмента
ОС.
Для
прикладного программиста операционная
система выглядит как некая библиотека,
предоставляющая некоторый набор
полезных функций, с помощью которых
можно упростить прикладную программу
или выполнить действия, запрещенные
в пользовательском режиме, например
обменяться данными с устройством
ввода-вывода.
Реализация
системных вызовов должна удовлетворять
следующим требованиям:
обеспечивать
переключение в привилегированный
режим;
обладать
высокой скоростью вызова процедур
ОС; "
обеспечивать
по возможности единообразное обращение
к системным вызовам для всех
аппаратных платформ, на которых работает
ОС;
допускать
легкое расширение набора системных
вызовов;
обеспечивать
контроль со стороны ОС за корректным
использованием сис- ' темных вызовов.
Первое
требование для большинства аппаратных
платформ может быть выполнено только
с помощью механизма программных
прерываний. Поэтому будем считать,
что остальные требования нужно обеспечить
именно для такой реализации системных
вызовов. Как это обычно бывает, некоторые
из этих требований взаимно
противоречивы.
Для
обеспечения высокой скорости было бы
полезно использовать векторные
свойства системы программных прерываний,
имеющиеся во многих процессорах, то
есть закрепить за каждым системным
вызовом определенное значение вектора.
Приложение при таком способе вызова
непосредственно154 Глава 4. Процессы и потоки
Мультипрограммирование
на основе прерываний 155
указывает
в аргументе запроса значение вектора,
после чего управление немедленно
передается требуемой процедуре
операционной системы (рис. 4.14, а).
Однако
этот децентрализованный способ передачи
управления привязан к особенностям
аппаратной платформы, а также не
позволяет операционной системе легко
модифицировать набор системных вызовов
и контролировать их,использование.
Например, в процессоре Pentium
количество системных вызовов определяется
количеством векторов прерываний,
выделенных для этой цели из общего
пула в 256 элементов (часть которых
используется под аппаратные прерывания
и обработку исключений). Добавление
нового системного вызова требует от
системного программиста тщательного
поиска свободного элемента в таблице
прерываний, которого к тому же на
каком-то этапе развития ОС может и не
оказаться.
Таблица
прерываний системы
Системный
вызов
Вектор
= 22h
Виртуальное
адресное пространство системы
|
|
|
|
|
|
|
Процедура обработки |
Адрес процедуры 21 h |
|
|
системного вызова 21 h |
Адрес процедуры 22h |
1 _ |
|
|
Адрес процедуры 23h |
|
|
Процедура обработки |
|
|
|
системного вызова 22h |
|
|
|
|
|
|
Процедура обработки системного вызова 23h |
|
|
|
|
Таблица прерываний системы
Системный
вызов
Вектор = 80h, R0r=21h
Адрес диспетчера системных вызовов
RCT
С