Для координации работы драйверов в подсистеме ввода вывода может выделяться особый модуль называемый

Обновлено: 04.07.2024

Основные задачи подсистемы ввода/ вывода в мультипрограммной ОС:

- организация параллельной работ устройств ввода/вывода и процессора.

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

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

- обеспечение удобного логического интерфейса между устройствами ввода/вывода и остальной частью системы.

- поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера.

- динамическая загрузка и выгрузка драйвера.

- поддержка синхронных и асинхронных операций ввода/вывода.

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

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

Например: драйвер файловых систем.

Для координации работы драйвера в подсистеме ввода/вывода может выделится особый модуль – менеджер ввода/вывода.

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

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

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

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

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

Механизм контроля доступа к файлу позволяет администратору многопользовательской ОС, задавать отдельным пользователям и группам пользовательский набор операций, который им разрешено выполнять над отдельными или группами файлов, объединенных в каталог.

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

Управление файлами Unix.

Ядро системы Unix рассматривает файлы, как потоки (последовательности ). Любая внутренняя логическая структура связана с конкретными приложениями. Unix же работает с физической структурой файла.

Различают 4 типа файлов в Unix:

- обычные файлы;

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

- специальные(используются для доступа к периферийным устройствам, каждое устройство связано с определенным файлом);

Индексные узлы.

Именование всеми типами файлов осуществляется посредством индексных узлов.

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

Информация содержащаяся на индексном узле ОС Unix.

Размещение файлов.

Размещение файлов происходит поблочно, динамически по мере необходимости отсюда следует блоки файлов на диске не обязательно образуют непрерывную область для отслеживания фалов используется индексный метод, при этом часть индекса храниться в индексной дескрипторе (inode).

Узел включает в себя 39 байт адресной информации, организованной как 13 трехбайтных адресов ( указателей).

Первые 10 адресов указывают на первые 10 блоков данных .

Если файл больше 10 блоков (больше 5-ти Кбайт), то используется 1,2 или 3 уровня косвенности.

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

Если файл содержит еще большее число блоков, то 12-й адрес узла укажет на 2-ой уровень косвенности. Этот блок содержит список адресов дополнительного уровня косвенности на следующие блоки. Если файл содержит еще больше блоков, то 13-й адрес – на третий уровень косвенности.

Емкость файлов в ОС Unix.

Уровень Количество блоков Количество байт
Прямой 10 кб
Один уровень коственности 256 кб
Два уровня коственности 256Х256=64 кб 64 Мб
Три уровня коственности 256Х64 кб= 16 мб 16 Гб

- такая схема имеет фиксированный относительно небольшой размер, отсюда следует может длительное время содержаться в ОЗУ.

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

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

inode адреса блоков данных блоки данных

адреса блоков с адресами блоков данных

рис 11. Схема адресации блоков в Unix.


Рис.12. Структура индексного узла

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

Размер блока

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

Для систем со страничной организацией памяти характерна сходная проблема с размером страницы.

Проведенные исследования показали, что большинство файлов имеют небольшой размер. Например, в Unix приблизительно 85% файлов имеют размер менее 8 Кбайт и 48% - менее 1 Кбайта.

Можно также учесть, что в системах с виртуальной памятью желательно, чтобы единицей пересылки диск-память была страница (наиболее распространенный размер страниц памяти - 4 Кбайта). Отсюда обычный компромиссный выбор блока размером 512 байт, 1 Кбайт, 2 Кбайт, 4 Кбайт.

Файловая система ОС Unix.

В классической ОС Unix файловая система расположена на диске таким образом.

Суперблок Блоки данных

Рис.13. Физическая организация файловой системы ufs.

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

Каталог традиционной ФС Unix представляет собой не сортированный набор 16-ти байтовых записей 2 байта->Ne inode, 14-> имя файла.

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

В начале раздела находится суперблок, содержащий общее описание файловой системы, например:

· тип файловой системы;

· размер файловой системы в блоках;

· размер массива индексных узлов;

· размер логического блока.

Описанные структуры данных создаются на диске в результате его форматирования (например, утилитами format, makefs и др.). Их наличие позволяет обращаться к данным на диске как к файловой системе, а не как к обычной последовательности блоков.

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

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

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

Директории в ОС Unix

Структура директории проста. Каждая запись содержит имя файла и номер его индексного узла. Вся остальная информация о файле (тип, размер, время модификации, владелец и т. д. и номера дисковых блоков) находится в индексном узле.


Рис. 14. Вариант записи в директории Unix

В более поздних версиях Unix форма записи претерпела ряд изменений, например, имя файла описывается структурой. Однако суть осталась прежней.

Как и система видов Линнея, система типов устройств является далеко не полной и не строго выдержанной. Устройства обычно принято разделять по преобладающему типу интерфейса на следующие виды:

  • символьные (клавиатура, модем, терминал и т. п.);
  • блочные (магнитные и оптические диски и ленты, и т. д.);
  • сетевые (сетевые карты);
  • все остальные (таймеры, графические дисплеи, телевизионные устройства, видеокамеры и т. п.);

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

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

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

Для блочных устройств , таких как магнитные и оптические диски, ленты и т. п. естественными являются операции чтения и записи блока информации – read и write , а также, для устройств прямого доступа, операция поиска требуемого блока информации – seek .

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

Помимо функций read , write , seek (для блочных устройств ), get , put (для символьных устройств ) и ioctl , в состав интерфейса обычно включают еще следующие функции.

  • Функцию инициализации или повторной инициализации работы драйвера и устройства – open .
  • Функцию временного завершения работы с устройством (может, например, вызывать отключение устройства) – close .
  • Функцию опроса состояния устройства (если по каким-либо причинам работа с устройством производится методом опроса его состояния, например, в операционных системах Windows NT и Windows 9x так построена работа с принтерами через параллельный порт) – poll .
  • Функцию остановки драйвера, которая вызывается при остановке операционной системы или выгрузке драйвера из памяти, halt .

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

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

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

Блокирующиеся, неблокирующиеся и асинхронные системные вызовы

Все системные вызовы, связанные с осуществлением операций ввода-вывода, можно разбить на три группы по способам реализации взаимодействия процесса и устройства ввода-вывода.

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

Управление вводом/выводом – одна из основных функций любой операционной системы.

Организация ввода/вывода в различных ОС имеет много общего, а реализация сильно отличается от системы к системе.

Основные понятия и концепции организации ввода/вывода в ОС

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

Главный принцип ввода/вывода – любые операции по управлению вводом/выводом объявляются привилегированными и могут выполняться только самой ОС. Для обеспечения этого принципа в большинстве процессоров вводятся два режима: режим пользователя, выполнение команд ввода/вывода запрещено; режим супервизора, выполнение команд ввода/вывода разрешено.

Использование команд ввода/вывода в пользовательском режиме вызывает исключение (прерывание) и управление передается ОС.

Для мультипрограммных ОС одним из основных видов ресурсов – устройства ввода/вывода и обслуживающие их программы. ОС должны управлять разделяемыми и неразделяемыми устройствами и позволять параллельно выполняющимися задачам использовать различные устройства ввода/вывода.

Непосредственное обращение к внешним устройствам из пользовательских программ не разрешено по трем причинам:

- возможные конфликты при доступе к устройствам ввода/вывода;

- повышение эффективности использование этих ресурсов;

- ошибки в программах ввода/вывода могут привести к разрушению системы.

Менеджер ввода-вывода

Компонента ОС, выполняющая ввод/вывод называется супервизором ввода/вывода.

2.4.2.1.Основные задачи супервизора следующие:

- получение, проверка на корректность и выполнение запросов на ввод/вывод от прикладных задач и от модулей самой системы;

- планирование ввода/вывода: выполнение или постановка в очередь;

- инициирование ввода/вывода – передача управления драйверам;

- при получении сигналов прерывания передача управления соответствующей программе обработки прерывания;

- передача сигнала о завершении операции ввода/вывода.

2.4.2.2. Состав супервизора:

1. верхний слой – системные вызовы и нижний слой – взаимодействие с контроллерами устройств

2. драйверы – низкоуровневый (традиционные) и высокоуровневые (общие)

3. специальный файл – спулинг файл

Если устройство ввода/вывода является инициативным, управление со стороны супервизора ввода/вывода заключается в активизации соответствующего вычислительного процесса. Инициативное устройство – устройство, по сигналу прерывания от которого запускается соответствующая ему программа.

2.4.3. Основные режимы ввода/вывода:

1. режим обмена с опросом готовности Центральный процессор посылает устройству управления команду для ввода/вывода, которую оно исполняет, преобразуя в сигнал, понятный ему самому. Устройства ввода/вывода намного медленнее центрального процессора, поэтому сигнал готовности приходится очень долго ждать, постоянно опрашивая устройство интерфейса. В режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, выполняет в цикле команду «проверить готовность устройства». Центральный процессор в таком режиме используется нерационально.

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

2.4.5. Виды ввода-вывода:

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

Для организации асинхронного ввода необходимо:

- выделить область памяти для временного хранения считываемых с устройства данных;

- связать выделенный буфер с задачей, заказавшей операцию ввода;

- запрос на операцию ввода разбить на две части (два запроса).

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

Накопители на магнитных дисках обладают крайне низкой скоростью по сравнению с быстродействием центральной части процессора. С учетом того, что операции чтения/записи на диск производятся несколькими большими процессами или сегментами памяти, средняя скорость работы процессора с оперативной памятью на 2 – 3 порядка выше, чем скорость передачи данных из внешней памяти на магнитных дисках в оперативную память. Чтобы сгладить такое несоответствие в производительности основных подсистем, используется буферирование и/или кэширование данных.

Простейший вариант – использование двойного буферирования: пока в один буфер заносятся данные с магнитного диска, из второго буфера ранее считанные данные могут быть прочитаны запросившей их программой. Аналогичный процесс происходит при записи. Буферирование используется во всех ОС.

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

Основные задачи подсистемы ввода/ вывода в мультипрограммной ОС:

- организация параллельной работ устройств ввода/вывода и процессора.

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

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

- обеспечение удобного логического интерфейса между устройствами ввода/вывода и остальной частью системы.

- поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера.

- динамическая загрузка и выгрузка драйвера.

- поддержка синхронных и асинхронных операций ввода/вывода.

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

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

Например: драйвер файловых систем.

Для координации работы драйвера в подсистеме ввода/вывода может выделится особый модуль – менеджер ввода/вывода.

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

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

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

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

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

Механизм контроля доступа к файлу позволяет администратору многопользовательской ОС, задавать отдельным пользователям и группам пользовательский набор операций, который им разрешено выполнять над отдельными или группами файлов, объединенных в каталог.

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

Управление файлами Unix.

Ядро системы Unix рассматривает файлы, как потоки (последовательности ). Любая внутренняя логическая структура связана с конкретными приложениями. Unix же работает с физической структурой файла.

Различают 4 типа файлов в Unix:

- обычные файлы;

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

- специальные(используются для доступа к периферийным устройствам, каждое устройство связано с определенным файлом);

Индексные узлы.

Именование всеми типами файлов осуществляется посредством индексных узлов.

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

Информация содержащаяся на индексном узле ОС Unix.

Размещение файлов.

Размещение файлов происходит поблочно, динамически по мере необходимости отсюда следует блоки файлов на диске не обязательно образуют непрерывную область для отслеживания фалов используется индексный метод, при этом часть индекса храниться в индексной дескрипторе (inode).

Узел включает в себя 39 байт адресной информации, организованной как 13 трехбайтных адресов ( указателей).

Первые 10 адресов указывают на первые 10 блоков данных .

Если файл больше 10 блоков (больше 5-ти Кбайт), то используется 1,2 или 3 уровня косвенности.

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

Если файл содержит еще большее число блоков, то 12-й адрес узла укажет на 2-ой уровень косвенности. Этот блок содержит список адресов дополнительного уровня косвенности на следующие блоки. Если файл содержит еще больше блоков, то 13-й адрес – на третий уровень косвенности.

Емкость файлов в ОС Unix.

Уровень Количество блоков Количество байт
Прямой 10 кб
Один уровень коственности 256 кб
Два уровня коственности 256Х256=64 кб 64 Мб
Три уровня коственности 256Х64 кб= 16 мб 16 Гб

- такая схема имеет фиксированный относительно небольшой размер, отсюда следует может длительное время содержаться в ОЗУ.

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

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

inode адреса блоков данных блоки данных

адреса блоков с адресами блоков данных

рис 11. Схема адресации блоков в Unix.


Рис.12. Структура индексного узла

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

Размер блока

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

Для систем со страничной организацией памяти характерна сходная проблема с размером страницы.

Проведенные исследования показали, что большинство файлов имеют небольшой размер. Например, в Unix приблизительно 85% файлов имеют размер менее 8 Кбайт и 48% - менее 1 Кбайта.

Можно также учесть, что в системах с виртуальной памятью желательно, чтобы единицей пересылки диск-память была страница (наиболее распространенный размер страниц памяти - 4 Кбайта). Отсюда обычный компромиссный выбор блока размером 512 байт, 1 Кбайт, 2 Кбайт, 4 Кбайт.

Файловая система ОС Unix.

В классической ОС Unix файловая система расположена на диске таким образом.

Суперблок Блоки данных

Рис.13. Физическая организация файловой системы ufs.

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

Каталог традиционной ФС Unix представляет собой не сортированный набор 16-ти байтовых записей 2 байта->Ne inode, 14-> имя файла.

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

В начале раздела находится суперблок, содержащий общее описание файловой системы, например:

· тип файловой системы;

· размер файловой системы в блоках;

· размер массива индексных узлов;

· размер логического блока.

Описанные структуры данных создаются на диске в результате его форматирования (например, утилитами format, makefs и др.). Их наличие позволяет обращаться к данным на диске как к файловой системе, а не как к обычной последовательности блоков.

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

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

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

Директории в ОС Unix

Структура директории проста. Каждая запись содержит имя файла и номер его индексного узла. Вся остальная информация о файле (тип, размер, время модификации, владелец и т. д. и номера дисковых блоков) находится в индексном узле.


Рис. 14. Вариант записи в директории Unix

В более поздних версиях Unix форма записи претерпела ряд изменений, например, имя файла описывается структурой. Однако суть осталась прежней.

Читайте также: