- •Глава 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. Ввод – вывод и файловая система
Необходимость обеспечить программам возможность осуществлять обмен данными с внешними устройствами и при этом не включать в каждую программу соответствующий код, осуществляющий собственно управление устройствами ввода/вывода, привела разработчиков к созданию системного программного обеспечения и, в частности, самих операционных систем. Программирование задач управления вводом/выводом является наиболее сложным и трудоемким, требующим очень высокой квалификации. Поэтому код, позволяющий осуществлять операции ввода/вывода, стали оформлять в виде системных библиотечных процедур; потом его стали включать не в системы программирования, а в операционную систему с тем, чтобы в каждую отдельно взятую программу его не вставлять, а только позволить обращаться к такому коду. Системы программирования стали генерировать обращения к этому системному коду ввода/вывода и осуществлять только подготовку к собственно операциям ввода/вывода, то есть автоматизировать преобразование данных к соответствующему формату, понятному устройствам, избавляя прикладных программистов от этой сложной и трудоемкой работы. Другими словами, системы программирования вставляют в машинный код необходимые библиотечные подпрограммы ввода/вывода и обращения к тем системным программным модулям, которые, собственно, и управляют операциями обмена между оперативной памятью и внешними устройствами. Таким образом, управление вводом/выводом — это одна из основных функций любой ОС.
Файловая система ввиду ее сложности, специфичности и важности как основного хранилища всей информации вычислительной системы заслуживает отдельного рассмотрения, но, тем не менее, здесь файловая система рассматривается совместно с другими компонентами подсистемы ввода-вывода по следующим причинам. Во-первых, файловая система активно использует остальные части подсистемы ввода-вывода, а во-вторых, модель файла лежит в основе большинства механизмов доступа к устройствам, используемых в современной подсистеме ввода-вывода.
6.1. Функции операционной системы по управлению файлами и устройствами
Подсистема ввода-вывода (Input-Output Subsystem) мультипрограммной ОС при обмене данными с внешними устройствами компьютера должна выполнять следующие основные функции:
организация параллельной работы устройств ввода-вывода и процессора;
согласование скоростей обмена и кэширование данных;
разделение устройств и данных между процессами;
обеспечение удобного логического интерфейса между устройствами и остальной частью системы;
поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера;
динамическая: загрузка и выгрузка драйверов;
поддержка нескольких файловых систем;
поддержка синхронных и асинхронных операций ввода-вывода.
6.1.1. Организация параллельной работы устройств ввода-вывода и процессора
Каждое устройство ввода-вывода вычислительной системы снабжено специализированным блоком управления, называемым контроллером. Контроллер взаимодействует с драйвером — системным программным модулем, предназначенным для управления данным устройством. Контроллер периодически принимает от драйвера выводимую на устройство информацию, а также команды управления, которые говорят о том, что с этой информацией нужно сделать. Под управлением контроллера устройство может некоторое время выполнять свои операции автономно, не требуя внимания со стороны центрального процессора. Это время зависит от многих факторов — объема выводимой информации, степени интеллектуальности управляющего устройством контроллера, быстродействия устройства и т. п. Обычно скорость работы любого устройства ввода-вывода, даже самого скоростного, существенно ниже скорости работы процессора.
Процессы, происходящие в контроллерах, протекают в периоды между выдачами команд независимо от ОС. От подсистемы ввода-вывода требуется спланировать в реальном масштабе времени (в котором работают внешние устройства) запуск и приостановку большого количества разнообразных драйверов, обеспечив приемлемое время реакции каждого драйвера на независимые события контроллера. С другой стороны, необходимо минимизировать загрузку процессора задачами ввода-вывода, оставив как можно больше процессорного времени на выполнение пользовательских потоков.
Данная задача является классической задачей планирования систем реального времени и обычно решается на основе многоуровневой приоритетной схемы обслуживания по прерываниям. Для обеспечения приемлемого уровня реакции все драйверы (или части драйверов) распределяются по нескольким приоритетным уровням в соответствии с требованиями ко времени реакции и временем использования процессора. Для реализации приоритетной схемы обычно задействуется общий диспетчер прерываний ОС.
