- •Глава 6. Ввод – вывод и файловая система
- •6.1. Функции операционной системы по управлению файлами и устройствами
- •6.1.1. Организация параллельной работы устройств ввода-вывода и процессора
- •6.1.2. Согласование скоростей обмена и кэширование данных
- •6.1.3. Разделение устройств и данных между процессами
- •6.1.4. Обеспечение удобного логического интерфейса между устройствами и остальной частью системы
- •6.1.5. Поддержка широкого спектра драйверов и простота включения нового драйвера в систему
- •6.1.6. Динамическая загрузка и выгрузка драйверов
- •6.1.7. Поддержка нескольких файловых систем
- •6.1.8. Поддержка синхронных и асинхронных операций ввода-вывода
- •6.2. Многослойная модель подсистемы ввода – вывода
- •6.3. Логическая организация файловой системы
- •6.3.1. Цели и задачи файловой системы
- •6.3.2. Типы файлов
- •6.3.3. Иерархическая структура файловой системы
- •6.3.4. Имена файлов
- •6.3.5. Атрибуты файлов
- •6.3.6. Логическая организация файла
- •6.4. Физическая организация файловой системы
- •6.4.1. Диски, разделы, секторы, кластеры
- •6.4.2. Физическая организация и адресация файла
- •6.4.3. Физическая организация fat
- •Структура каталога
- •6.4.4. Физическая организация s5 и ufs
- •6.4.5.Физическая организация ntfs
- •6.5. Файловые операции
- •6.6. Контроль доступа к файлам
- •Вопросы для самоконтроля
6.1.2. Согласование скоростей обмена и кэширование данных
При обмене данными всегда возникает задача согласование скорости. Например, если один процесс вырабатывает некоторые данные и передает их другому процессу через оперативную память, то в общем случае скорости генерации данных и их чтения не совпадают. Согласование скорости обычно достигается за счет буферизации данных в оперативной памяти и синхронизации доступа процессов к буферу.
В подсистеме ввода-вывода для согласования скоростей обмена также широко используется буферизация данных в оперативной памяти. Однако буферизация только на основе оперативной памяти в подсистеме ввода-вывода оказывается недостаточной, из за большой разницы между скоростью обмена с оперативной памятью, куда процессы помещают данные для обработки, и скоростью работы внешнего устройства. Для таких случаев необходимо предусмотреть другие методы, и часто в качестве буфера используется дисковый файл, называемый спул-файлом. Типичный пример применения спулинга дает организация вывода данных на принтер. Печатаемые документы могут иметь объем в несколько десятков мегабайт, поэтому для их временного хранения (а печать документа может занимать десятки минут) объема оперативной памяти может просто не хватить.
Другим решением этой проблемы является использование большой буферной памяти в контроллерах внешних устройств. Такой подход особенно полезен в тех случаях, когда помещение данных на диск слишком замедляет обмен (или когда данные выводятся на сам диск).
Буферизация данных позволяет не только согласовать скорости работы процессора и внешнего устройства, но и решить другую задачу — сократить количество реальных операций ввода-вывода за счет кэширования данных. Дисковый кэш является непременным атрибутом подсистем ввода-вывода практически всех операционных систем, значительно сокращая время доступа к хранимым данным.
6.1.3. Разделение устройств и данных между процессами
Устройства ввода-вывода могут предоставляться процессам как в монопольное, так и в совместное (разделяемое) использование. При этом ОС должна обеспечивать контроль доступа теми же способами, что и при доступе процессов к другим ресурсам вычислительной системы — путем проверки прав пользователя или группы пользователей, от имени которых действует процесс, на выполнение той или иной операции над устройством.
Операционная система может контролировать доступ не только к устройству в целом, но и к отдельным порциям данных, хранимых или отображаемых этим устройством. Диск является типичным примером устройства, для которого важно контролировать доступ не к устройству в целом, а к отдельным каталогам и файлам. Так, в файловой системе обычно для каждого каталога и файла можно задать индивидуальные права доступа.
Однако, одно и то же устройство в разные периоды времени может использоваться как в разделяемом, так и в монопольном режимах, хотя существуют устройства, для которых обычно характерен только один из этих режимов. Операционная система должна осуществлять отслеживание процедур захвата и освобождения монопольно используемых устройств, а в случае совместного использования оптимизировать последовательность операций ввода-вывода для различных процессов в целях повышения общей производительности.
При разделении устройства между процессами может возникнуть необходимость в разграничении порции данных двух процессов друг от друга. Обычно такая потребность возникает при совместном использовании так называемых последовательных устройств, данные в которых в отличие от устройств прямого доступа не адресуются. Типичным представителем такого рода устройства является принтер, который не выделяется в монопольное владение процессам, и в то же время каждый документ должен быть напечатан в виде последовательного набора страниц. Для подобных устройств организуется очередь заданий на вывод, при этом каждое задание представляет собой порцию данных, которую нельзя разрывать, например документ для печати. Для хранения очереди заданий используется спул-файл, который одновременно согласует скорости работы принтера и оперативной памяти и позволяет организовать разбиение данных на логические порции.
