Открытие файла или каталога
Обычно предшествует операциям с файлом или каталогом. При открытии файла или каталога в оперативной памяти создается дескриптор файла. Дескриптор содержит информацию о расположении файла, ссылках совместного обращения к файлу. Операция открытия каталога открывает каталог подобно файлу и его содержимое становится доступно процессу, осуществляющему чтение списка файлов каталога.
Закрытие файла и каталога
Выполняется после завершения работы с файлом или каталогом. Необходимость этой операции в том, что операционная система использует ограниченное количество дескрипторов. Дескрипторы, работа с которыми завершена, обычно удаляются, а память, используемая для работы с ними, освобождается.
Чтение файла.
Чтение данных из файла выполняется обычно в определенный буфер, предоставленный текущим процессом. Как правило, это область оперативной памяти, зарезервированная как переменная. Чтение файла выполняется с текущей позиции файла.
Чтение каталога
Обычно чтение каталога предшествует операция открытия каталога. Затем каждая операция чтения возвращает информацию об одном элементе каталога (файла или каталога).
Запись
Запись данных в файл может выполняться как с произвольного места файла, для чего необходимо указать место, откуда будет осуществляться запись, либо информация добавляется к концу файла. Обычно второй способ записи выполняется с помощью отдельного системного вызова.
Запись в каталог обычно осуществляется отдельным системным вызовом. Это вызов создания каталога. Таким образом, открыть файл каталога на произвольную запись невозможно.
Поиск
Для файлов с произвольным доступом перемещает указатель на определенную позицию в файле. После выполнения операции поиска чтение и запись из файла или в файл выполняется с установленной позиции.
Учет занятых блоков файлов
Хранение списка свободных блоков – список, битовая карта
Каждый диск с файловой системой имеет хотя бы один раздел. В первом секторе этого раздела также всегда есть загрузочная запись (BR). Если в главной загрузочной записи данный раздел имеет признак загрузочного, то при старте системы BIOS сначала исполняет загрузочный блок MBR, после чего определяется стартовый раздел, и оттуда считывается загрузочный блок и исполняется. Этот блок обычно загружает операционную систему, находящуюся в этом разделе. Стартовый блок для однообразия содержится и в не загрузочных разделах. Все перечисленное одинаково для любых систем. Кроме первого сектора, во всем остальном строение внутри раздела изменяется от системы к системе.
При построении файловой подсистемы одна из задач, возлагаемая на нее – учет принадлежности занятых секторов диска конкретным файлам. Это может выполняться несколькими способами.
Непрерывное расположение
Первый способ учета секторов – непрерывное расположение файлов. В этом случае файлы представляют собой непрерывные наборы соседних секторов. Тогда на диске, состоящем из 1-дно килобайтных секторов, файл размером 50 килобайт занимает 50 секторов. Если же файл будет размером 49,4 килобайта, он все равно будет занимать 50 (целое количество) секторов. Этим грешит и данный метод, и любые методы хранения информации на жестком диске.
К достоинствам данного метода можно отнести:
- расположение файла характеризуется всего двумя числами: номером первого сектора файла и числом секторов в файле;
- чтение файла происходит за один прием, поэтому такой тип файловой системы наиболее быстродействующий
К сожалению, такой тип файловой системы со временем сильно фрагментирует диск. Это приводит к тому, что невозможно определить объем свободного пространства до момента дефрагментации. В процессе работы учет свободного пространства вести нельзя в принципе. Свободное пространство, известное системе – свободные сектора после последнего файла.
С учетом этих недостатков системы учета занятых блоков последовательного типа получили распространение там, где заранее известен размер файлов и изменение информации или не происходит, или происходит очень редко. Например, это накопители на магнитной ленте, CD и DVD-ROM.
Связанный список блоков.
Второй способ учета занятых блоков файлов состоит в представлении файла как связанного списка секторов. Предположим, тот же файл размером 50 килобайт располагается на диске с секторами, размером в 1 килобайт. Но в данном случае используется не смежные сектора, а пятьдесят фрагмента по 1 сектору. Первым способом (непрерывным) сохранить такой файл нельзя. Списком связанных секторов – можно. Первое слово каждого сектора - ссылка на следующий блок. Так из 50 секторов мы формируем файл. Дополнительно требуется место для хранения ссылок – 50 слов, таким образом, для файла требуется 50 секторов + 1 сектор. В последнем секторе используется 49 слов.
Главным недостатком данного типа организации – необходимость многократного чтения секторов файла с диска. Причем чтение этих секторов должно проводится в определенном порядке. Это сильно замедляет работу файловой подсистемы.
Кроме этого, требуется дополнительное место для хранения ссылок на следующий сектор. Места это занимает немного, то т.к. информация передается фрагментами с размером равным степени двойки потеря части места будет дробить информацию на несколько секторов.
К достоинствам может быть отнесено полное использование диска и меньшая фрагментация.
Связанный список с хранением в памяти
Устраняет имеющиеся недостатки данного метода связанного списка. Информация о расположении файлов хранится не в самих секторов, а в отдельной таблице, расположенной на диске. При старте системы эта таблица загружается в память. При этом количество ячеек таблицы равно количеству секторов на диске. Так для 20-ти гигабайтного диска требуется 20 миллионов четырехбайтовых слов, т.е. примерно 80 мегабайт. Невозможность хранения таблицы такого размера и является главным недостатком этого типа расположения файлов.
I-узел
Четвертый тип способа хранения занятых секторов файлов состоит в связывании с каждым файлом структуры данных, называемой i-узлом (i-node, index node). Узел содержит атрибуты файла и список номеров секторов файла.
Пример i-узла показан на рисунке. При наличии i-узла можно найти все сектора файла. Большое преимущество такой схемы перед хранящейся в памяти таблицей из связных списков заключается в том, что каждый конкретный i-узел должен находиться в памяти только тогда, когда соответствующий ему файл открыт. Если каждый i-узел занимает n-байт, а одновременно открыто может быть k-файлов для массива i-узлов потребуется в памяти всего k*n байтов.
Обычно этот размер значительно меньше, чем FAT-таблица. Размер таблицы, хранящей связанный список всех блоков диска, пропорционален размеру самого диска. Таким образом, размер таблицы линейно растет с ростом размера диска.
Пример простого i-узла
Для схемы i-узлов, напротив, требуется объема памяти размером, пропорциональным максимальному количеству файлов, которые могут быть открыты одновременно. При этом не важно, будет ли размер диска 1 Гбайт, 10 Гбайт или 100 Гбайт.
С такой схемой связана проблема, заключающаяся в том, что при выделении каждому файлу фиксированного количества дисковых адресов этого количества может не хватить. Одно из решений заключается в резервировании последнего дискового адреса не для блока данных, а для следующего адресного блока, как казано на рис. 6.12. Более того, можно создавать целые цепочки и даже деревья адресных блоков. I-узлы активно используются при создании файловых систем Unix –семейства.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|