Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ОС.docx
Скачиваний:
44
Добавлен:
22.09.2019
Размер:
3.18 Mб
Скачать

34. Функции базовой подсистемы и интерфейс драйверов. (Лекция 8)

Базовая подсистема ввода-вывода служит посредником между процессами вычислительной системы и набором драйверов. Системные вызовы для выполнения операций ввода-вывода трансформируются ею в вызовы функций необходимого драйвера устройства. Однако обязанности базовой подсистемы не сводятся к выполнению только действий трансляции общего системного вызова в обращение к частной функции драйвера. Базовая подсистема предоставляет вычислительной системе такие услуги, как поддержка блокирующихся, неблокирующихся и асинхронных системных вызововбуферизация и кэширование входных и выходных данных, осуществление spooling'a и монопольного захвата внешних устройств, обработка ошибок и прерываний, возникающих при операциях ввода-вывода, планирование последовательности запросов на выполнение этих операций.

Блокирующиеся системные вызовы. Применение такого вызова приводит к блокировке инициировавшего его процесса, т. е. процесс переводится ОС из состояния исполнение в состояние ожидание. Завершив выполнение всех операций ввода-вывода, предписанных системным вызовом, ОС переводит процесс из состояния ожидание в состояние готовность. После того как процесс будет снова выбран для исполнения, в нем произойдет окончательный возврат из системного вызова. Типичный случай - когда процессу необходимо получить от устройства строго определенное количество данных, без которых он не может выполнять работу далее.

Неблокирующиеся системные вызовы. Процесс, применивший неблокирующийся вызов, не переводится в состояние ожидание вообще. Системный вызов возвращается немедленно, выполнив предписанные ему операции ввода-вывода полностью, частично или не выполнив совсем, в зависимости от текущей ситуации (состояния устройства, наличия данных и т. д.). Типичный случай - периодическая проверка на поступление информации с клавиатуры при выполнении трудоемких расчетов.

Процесс, использовавший асинхронный системный вызов, никогда в нем не блокируется. Системный вызов инициирует выполнение необходимых операций i/o и немедленно возвращается, после чего процесс продолжает свою регулярную деятельность. Об окончании завершения операции i/o ОС впоследствии информирует процесс изменением значений некоторых переменных, передачей ему сигнала или сообщения или каким-либо иным способом. Неблокирующийся системный вызов для выполнения операции read вернется немедленно, но может прочитать запрошенное количество байтов, меньшее количество или вообще ничего. Асинхронный системный вызов для этой операции также вернется немедленно, но требуемое количество байтов рано или поздно будет прочитано в полном объеме.

Функции базовой подсистемы

- Планирование последовательности запросов к устройствам

  • Преобразование вызова функций в обращение к необходимым драйверам

  • Обработка результатов работы драйверов и передача информации между ними

  • Поддержка синхронных и асинхронных вызовов

- Буферизация и кэширование входных и выходных данных

- Монопольный захват устройств

- Накопление запросов к устройствам (spooling)

Синхронный вызов – вызов с блокировкой вызывающего процесса до возврата данных от устройства

Асинхронный вызов – вызов без блокировки вызывающего процесса, завершающийся до возврата данных от устройства

Буферизация – временное сохранение данных обмена вне процесса пользователя. См. 35 вопрос.

Кэширование (caching) – хранение в быстрой памяти синхронизируемой копии содержимого более медленной памяти/устройства.

Буфер часто содержит единственный набор данных, существующий в системе, в то время как кэш по определению содержит копию данных, существующих где-нибудь еще. Например, буфер, используемый базовой подсистемой для копирования данных из пользовательского пространства процесса при выводе на диск, может в свою очередь применяться как кэш для этих данных, если операции модификации и повторного чтения данного блока выполняются достаточно часто.

Функции буферизации и кэширования не обязательно должны быть локализованы в базовой подсистеме ввода-вывода. Они могут быть частично реализованы в драйверах и даже в контроллерах устройств, скрытно по отношению к базовой подсистеме.

Spooling – механизм накопления заданий на вывод в буферных областях (ОЗУ, диск), позволяющий процессу-источнику запроса завершать ввод-вывод до его выполнения.

Блочно-ориентированные устройства – сохраняют информацию блоками и выполняют поблочную передачу (диски, сетевые карты, видеокарты).

Поточно-ориентированные (символьные) устройства – выполняют передачу потока байт (клавиатуры, терминалы, принтеры, порты, указывающие устройства, звуковые карты, видеокамеры и т.п.).