Курынин Р.В., Машечкин И.В., Терехин А.Н. - Конспект лекций по ОС (1114685), страница 48
Текст из файла (страница 48)
Вообще говоря, эти правила нежесткие, их можнонарушать, но обычно, следуя им, пользователь системы получает дополнительное удобство.Прежде всего, необходимо отметить, что файловая система ОС Unix являетсяиерархической древовидной файловой системой (4.2.2), т.е. у нее есть корневой каталог /, изкоторого за счет каталогов разных уровней вложенности «вырастает» целое дерево имен файлов.186/unixbinetctmpmntusrdevincludelibsysРис.
109.…userbinsys…Логическая структура каталогов.Система предполагает, что в корневом каталоге всегда расположен некоторый файл, вкотором размещается код ядра операционной системы. Сразу оговоримся, что мы рассматриваемнекоторую модельную системы: в действительности файл с кодом ядра и упоминаемые в будущемкаталоги могут иметь иное расположение в системе и другие имена. Вообще говоря, в корневомкаталоге можно размещать любые файлы (с учетом прав доступа), но система предполагаетналичие совокупности каталогов с предопределенными именами.
Рассмотрим основные каталогисистемы.В каталоге /bin находятся команды общего пользования (точнее говоря исполняемыефайлы, реализующие указанные команды).Каталог /etc содержит системные таблицы и команды, обеспечивающие работу с этимитаблицами. В частности, в этом каталоге хранится таблица (файл) passwd, содержащуюинформацию о зарегистрированных в системе пользователей.Каталог /tmp является каталогом временных файлов, т.е.
в этом каталоге система ипользователи могут размещать свои файлы на некоторый ограниченный промежуток времени, приэтом при перезагрузке системы нет гарантии, что файлы не будут удалены из этого каталога.Каталог /mnt традиционно используют для монтирования различных файловых систем кданной системе. Операция монтирования в общих чертах заключается в том, что кореньмонтируемой файловой системы ассоциируют с данным каталогом (или с одним из егоподкаталогов), после чего доступ к файлам подмонтированной системы осуществляется уже черезэтот каталог (т.н. точку монтирования).В каталоге /dev размещаются специальные файлы устройств, посредством которыхосуществляется регистрация обслуживаемых в системе устройств и связь этих устройств с тем илииным драйвером.
Соответственно, все устройства, с которыми работает операционная система,именуются посредством имен этих специальных файлов устройств.Каталог /usr можно охарактеризовать, как каталог пользовательской информации.Предполагается, что это каталог имеет свою специфичную структуру подкаталогов. В частности,каталог /usr/lib обычно содержит инструменты работы пользователей, не относящихся напрямуюк взаимодействию с операционной системой (например, тут могут храниться системыпрограммирования, C-компилятор, C-отладчик и т.п.).
Еще один достаточно важным каталогомявляется каталог /usr/include, который содержит файлы заголовков (или include-файлы) срасширением *.h, и именно в этом каталоге будет искать препроцессор C-компиляторасоответствующие файлы заголовков, указанные в программе в угловых скобках. Каталог/usr/bin — это каталог команд, которые введены на данной вычислительной установке (например,тут могут храниться команды, связанные с непосредственной деятельностью организации).
И,наконец, в каталоге /usr/user размещаются домашние каталоги зарегистрированных в системепользователей.187Итак, мы рассмотрели основные аспекты логической структуры каталогов ОС Unix. Ещераз отметим, что, придерживаясь рекомендаций системы в плане размещения тех или иныхфайлов, легче и удобнее поддерживать систему «в порядке».4.2.3Внутренняя организация файловой системы: модель версии System VРассмотрение внутренней организации файловой системы мы начнем с модели файловойсистемы, реализованной в ОС Unix версии System V.
Данная файловая система была реализованаодной из первых в ОС Unix и имеет название s5fs.СуперблокРис. 110.Область индексныхдескрипторовБлоки файловСтруктура файловой системы версии System V.Данная файловая система имеет следующую структуру (4.2.3). Файловая система занимаетчасть того раздела, в котором она находится (назовем его системным разделом, чтобы отличатьего от разделов с другими файловыми системами, имеющими схожую организацию, и которыеможно примонтировать к данной системе), начиная с нулевого блока и заканчивая некоторымфиксированным блоком.
Эта часть состоит из трех подпространств: суперблока, областииндексных дескрипторов и блоков файлов.Итак, первое подпространство — это суперблок. Он содержит данные, определяющиестатические параметры и характеристики данной файловой системы (например, информация оразмере блока файла, информация о размере всей файловой системы в блоках или байтах или жеинформация о количестве индексный дескрипторов в системе). Также суперблок хранитинформацию об оперативном состоянии файловой системы. Суперблок является частью файловойсистемы, которая резидентно находится в оперативной памяти. Среди прочего суперблок хранитинформацию о наличии свободных ресурсов файловой системы — наличие свободных блоков врабочем пространстве файловой системы и наличие свободных индексных дескрипторов.
Забегаявперед, отметим, что для этих целей используются соответственно массив номеров свободныхблоков и массив индексных дескрипторов.Следующее подпространство — это область индексных дескрипторов. Индексныедескрипторы были описаны нами выше, мы их рассматривали как некоторые системныеструктуры данных фиксированного размера, содержащих комплексную информацию оразмещении, актуальном состоянии и содержимом конкретного файла.Последнее подпространство — это блоки файлов (если быть более точным, то данноепространство корректнее было бы назвать рабочим пространством файловой системы). Здесьразмещаются блоки файлов (с содержимым этих файлов), а также системная информация, котораяне поместилась в суперблоке и области индексных дескрипторов.4.2.3.1Работа с массивами номеров свободных блоковИзначально номера всех свободных блоков файловой системы выстраиваются в единыйсвязный список (4.2.3.1), который размещается в нескольких блоках.
Первый блок располагается всуперблоке (а значит, в оперативной памяти). Каждый блок хранит номера свободных блоков, атакже номер следующего блока данного массива.188N блоков свободно≠0Выделениесвободныхблоков≠00Рис. 111.Работа с массивами номеров свободных блоков.Работа с массивом номеров свободных блоков достаточно проста. При запросе наполучение свободного блока происходит поиск в первом блоке массива ячейки с содержательной(ненулевой) информацией, обнуление найденной ячейки, а блок с найденным номером выдается вответ на запрос. Если же происходит обнуление последней ячейки блока, ссылающейся наследующий блок массива, то предварительно содержимое этого блока загружается в суперблок ииспользуется уже как первый блок этого массива. Если же какой-то блок освобождается, товыполняются противоположные действия в обратном порядке.На первый взгляд может показаться, что хранение в блоках массива свободных блоковуменьшают рабочее пространство файловой системы (т.е.
пользователь не сможетвоспользоваться блоками, хранящими массив), но это не так: если представить граничнуюситуацию, когда нет свободных блоков, тогда нет и номеров свободных блоков, а значит, нет иблоков, хранящих эти номера, т.е. файловая система занята на 100%.4.2.3.2Работа с массивом свободных индексных дескрипторовМассив номеров свободных индексных дескрипторов — это массив фиксированногоколичества элементов. Изначально данный массив заполнен номерами свободных индексныхдескрипторов.Если происходит освобождение индексного дескриптора (т.е. происходит удаление файла),то происходит обращение к данному массиву.
Если в массиве есть свободные места, топроисходит запись номера освободившегося индексного дескриптора в первое встретившеесясвободное место массива, иначе номер дескриптора «забывается».При создании файла происходят обратные действия. Идет обращение к массиву, если он непуст, то из него изымается первый содержательный элемент, который представляет собой номерсвободного индексного дескриптора. Если же при обращении к массиву оказалось, что он пуст, а всуперблоке присутствует информация о наличии свободных индексных дескрипторах, то системазапускает процесс обновления рассматриваемого массива. Этот процесс обращается к областииндексных дескрипторов, последовательно перебирает их и в зависимости от их содержимогоделает однозначный вывод о занятости или свободности дескриптора.