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

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

17.1. Согласование скоростей обмена и кэширования данных

При обмене данными всегда возникает задача согласования скоростей работы устройств. Решение этой задачи достигается буферизацией данных [10, 17]. В подсистеме ввода-вывода часто используется буферизация в оперативной памяти. Однако буферизация только на основе оперативной памяти часто оказывается недостаточной из-за большой разницы скоростей работы оперативной памяти, и внешнего устройства объема оперативной памяти может просто не хватить. В этих случаях часто используют в качестве буфера дисковый файл, называемый спул-файлом. Типичный пример применения спулинга – вывод данных на принтер (для печатаемых документов объем в несколько Мбайт – не редкость, поэтому временное хранение такого файла в течение десятков минут в оперативной памяти нецелесообразно).

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

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

Возможные схемы буферизации ввода-вывода приведены на рис. 7.3.

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

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

Пусть Т – время, необходимое для ввода одного блока, а С – для вычислений, выполняющихся между запросами на ввод-вывод. Без буферизации время выполнения, приходящееся на один блок, будет равно Т + С. При использовании одинарной буферизации время будет равно max [С, T] + M, где М – время перемещения данных из системного буфера в пользовательскую память. В большинстве случаев T + C > max [C, T] + M.

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

Время выполнения при блочно-ориентированной передаче можно грубо оценить как max [C, T]. Таким образом, если C <= T, то блочно-ориентированное устройство может работать с максимальной скоростью. Если C > T, то двойная буферизация избавляет процесс от необходимости ожидания завершения ввода-вывода.

Двойной буферизации может оказаться недостаточно, если процесс часто выполняет ввод или вывод. Решить проблему помогает наращивание количества буферов. Если буфер больше двух, схема именуется циклической буферизацией.

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

17.2. Разделение устройств и данных между процессами

Устройства ввода-вывода могут предоставляться процессам как в монопольном, так и разделенном режиме. При этом ОС должна обеспечивать контроль доступа теми же способами, что и при доступе процессов к другим ресурсам вычислительной системы, – путем проверки прав пользователя или группы пользователей, от имени которых действует процесс, на выполнение той или иной операции над устройством.

ОС может контролировать доступ не только к устройству в целом, но и к отдельным порциям данных, хранимых этим устройством. Диск является типичным примером такого устройства, где важно контролировать доступ к файлам и каталогам. В последнем случае непременным является задание режима совместного использования устройства в целом.

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

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

При разделении устройства между процессами может возникнуть необходимость в разграничении данных процессов друг от друга. Обычно такая потребность появляется при совместном использовании последовательных устройств, которые, в отличие от устройств прямого доступа, не адресуются. Типичный представитель такого устройства – принтер. Для таких устройств организуется очередь заданий на вывод, при этом каждое задание представляет собой порцию данных, которую нельзя разрывать, например, документ для печати.

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

17.3. Обеспечение логического интерфейса между устройствами и системой

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

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

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

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