Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_po_Operatsionnym_sistemam.docx
Скачиваний:
62
Добавлен:
19.09.2019
Размер:
259.46 Кб
Скачать

Единообразный интерфейс для драйверов устройств

Главный вопрос операционной системы — как сделать так, чтобы все устройства ввода-вывода и драйверы выглядели более-менее одинаково. Если диски, принте­ры, клавиатуры и т. д. требуют различных интерфейсов, при появлении каждого нового устройства будет требоваться переделка операционной системы.

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

С именованием устройств тесно связан вопрос защиты. Как операционная сис­тема предотвращает доступ пользователей к устройствам, на который у них нет прав? В UNIX и в Windows 2000 устройства представляются в файловой системе в виде именованных объектов, что дает возможность применять обычные правила защиты файлов к устройствам ввода-вывода. Таким образом, системный админи­стратор может установить нужные разрешения для каждого устройства.

  1. Ввод-вывод в операционной системе. Буферизация. Сообщения об ошибках. Захват и освобождение выделенных устройств. Независимый от устройств размер блока. Буферизация

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

Улучшенный вариант: пользовательский процесс предоставляет буфер размером в п символов в пространстве пользователя, после чего выполняет чтение п символов. Процедура обработки прерываний помещает приходящие символы в буфер до тех пор, пока он не заполнится. Затем она акти­визирует процесс пользователя. Такая схема гораздо эффективнее предыдущей, однако у нее также есть недостатки: что случится, если в момент прибытия символа страница памяти, в которой расположен буфер, окажется выгруженной из физической памяти? Конечно, буфер можно зафиксировать в памяти; если слишком мно­го процессов начнут фиксировать свои страницы в памяти, пул доступных стра­ниц памяти уменьшится, в результате чего снизится производительность.

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

Однако даже при использовании этой схемы имеются определенные проблемы. Что случится с символами, прибывающими в тот момент, когда страница пользова­теля загружается с диска? Поскольку буфер полон, их некуда поместить. Решение проблемы состоит в использовании второго буфера в ядре, в который помещают­ся символы после заполнения первого буфера до его освобождения. При этом буферы как бы меняются местами, то есть первый буфер начинает иг­рать роль запасного. Такая схема часто называется двойной буферизацией.

Буферизация является широко применяемой технологией, однако у нее имеют­ся свои недостатки. Если при буферизации данные копируются слишком много раз, страдает производительность.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]