![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Управление файлами. Файловая система FAT. Особенности ее организации.
Системная область создается и инициализируется при форматировании диска, а в последующем обновляется при работе. Область данных содержит файлы и каталоги, которые образуют на диске иерархическое дерево каталогов, с единственной директорией не входящей в другие – корневым каталогом. Область данных доступна через пользовательский интерфейс операционной системы. Системная область содержит загрузочную запись, зарезервированные сектора, таблицу размещения файлов и корневой каталог. Для каждого файла и каталога в файловой системе хранится справочная информация. Каждый элемент такого справочника занимает 32 байта и содержит: имя файла или каталога, расширение имени файла, атрибуты файла – системный, архивный, только для чтения и др., дату и время создания и последнего изменения файла, номер начального кластера, размер файла. Система FAT очень проста и имеет одно серьезное достоинство: врожденную устойчивость к сбоям. В то же время у нее есть и ряд серьезных недостатков. Первый недостаток состоит в том, что при каждой операции над файлами система должна обращаться к FAT. Это приводит к частым перемещениям головок дисковода и в результате к резкому снижению производительности. Действительно, исполнение программы на одной и той же машине под MS DOS и под DOS-эмулятором систем UNIX или OS/2 различается по скорости почти в 1, 5 раза. Особенно это заметно при архивировании больших каталогов. Сначала в файловой системе FAT в DOS 1 использовались 12-разрядные элементы FAT. (В настоящее время 12-разрядная FAT все еще находит применение дл гибких дисков.) В DOS 2, оснащенной дополнительными средствами для работы с жесткими дисками, в FAT предусмотрены 16-разрядные элементы. Причина проблемы, возникшей в 1987 г., кроется в запросах нижнего уровн к операционной системе на считывание секторов диска с передачей 16-разрядного значения в качестве параметра. Существует 65 536 различных 16-разрядных значений; умножив 65 536 на 512 байт в секторе, получим 32 Мбайт. Что касается числа секторов на диске, оно ограничено возможностями операционной системы. В DOS 4.0 дл обработки запросов на считывание секторов нижнего уровня используются 32-разрядные параметры. Предел в 2 Гбайт на самом деле обусловлен не проблемами операционной системы, а существующими программами. На диске емкостью 2 Гбайт и более кластеры имеют размер 64 Кбайт, или 65 536 байт (см. рис. 2). Но самое большое значение, которое может быть представлено в 16 разрядах, составляет 65 535; 64 Кбайт - слишком большая величина для 16 разрядов. В Microsoft обнаружили, что при разработке многих существующих в настоящее время программ их авторы исходили из предположения, что значение числа байт в кластере умещается в 16 разрядах. С увеличением размеров диска единица в двоичном 8-разрядном представлении числа секторов в кластере смещается влево. При смещении единицы за крайнюю левую цифровую позицию возникает ошибка превышения размера 4 Гбайт. Размер кластера указан в виде 16-разрядных двоичных чисел. И вновь единица смещается влево, а при смещении ее за крайнюю левую позицию возникает " 2-Гбайт кризис". Даже если такой проблемы не возникло при объеме в 2 Гбайт, то операционная система все равно не сможет работать с дисками емкостью свыше 4 Гбайт. При использовании FAT16 число секторов в кластере сохраняется самой ОС в одном байте блока параметров диска, устанавливаемого ОС. Это число должно быть кратным степени 2 и при этом меньше 256. Таким образом, в кластер может входить не более 128 секторов, или 64 Кбайт. В итоге даже если ограничение в 2 Гбайт снимается, система FAT16 приемлема лишь для дисков емкостью менее 4 Гбайт. В файловой системе FAT32 как элементы FAT, так и номера секторов - 32-разрядные. Вот что это значит: умножим 4 294 967 296 различных 32-разрядных значений на 512 байт в секторе и получим огромное число 2 Тбайт (2 199 023 255 552 байт), которое представляет собой максимально возможную емкость диска при использовании FAT32. Физическая организация данных на носителе зависит от файловой системы. В качестве примера рассмотрим файловую систему FAT. Она предусматривает выделение в процессе форматирования диска специальных областей: системной и данных. Основными компонентами системной области являются: загрузочная запись; таблицы размещения файлов (FAT) (обычно их две – основная и копия) и корневой каталог. Область данных содержит файлы и подкаталоги. Вся область данных диска делится на кластеры (англ. cluster), которые представляют собой неделимые блоки данных одного размера на диске. Все кластеры пронумерованы. В самом начале диска размещается таблица FAT, содержащая столько записей, сколько кластеров доступно на диске. В ней отмечены используемые кластеры, неиспользуемые, содержащие нулевую информацию, а также поврежденные кластеры, которые помечаются определенным значением, после чего они уже никогда не употребляются. Таблица FAT содержит сведения о номерах кластеров, в которых размещается файл. Наличие у каждого кластера индивидуального номера позволяет найти область расположения файла, причем необязательно, чтобы его кластеры располагались рядом. Если разные фрагменты файла располагаются в несмежных кластерах, то говорят о фрагментации файла. Каждый кластер файла содержит номер следующего в цепочке его 9 Все сведения, содержащиеся здесь, можно получить путем чтения корневого сектора и вызова ряда других функций ОС с некоторыми вычислениями, но блок информации удобен тем, что он содержит все данные вместе. Это единственный вызов, который возвращает адрес заголовка драйвера устройства. Каталог файлов представляет собой массив 32-байтных элементов - описателей файлов. С точки зрения операционной системы все каталоги (кроме корневого каталога в системах FAT12 и FAT16) выглядят как файлы и могут содержать произвольное количество записей. Корневой каталог (Root Directory) - это главный каталог диска, с которого начинается дерево подкаталогов. Для корневого каталога в FAT12 и FAT16 в системной области логического диска выделено специальное место фиксированного размера (16 Кбайт), рассчитанное на хранение 512 элементов. В системе FAT32 корневой каталог является файлом произвольного размера. Смещение Длина Содержимое 00h 11 Короткое имя файла 0Bh 1 Атрибуты файла 0Сh 1 *Зарезервировано под Windows NT (должно содержать 0) 0Dh 1 *Поле, уточняющее время создания файла (в десятках миллисекунд). Значение поля может находиться в пределах от 0 до 199 0Eh 2 *Время создания файла 10h 2 *Дата создания файла 12h 2 *Дата последного обращения к файлу для записи или считывания данных 14h 2 *Старшее слово номера первого кластера файла 16h 2 Время выполнения последней операции записи в файл 18h 2 Дата выполнения последней операции записи в файл 1Ah 2 Младшее слово номера первого кластера файла 1Ch 4 Размер файла в байтах (32-разрядное число) Знак " *" означает, что поле обрабатывается только в файловой системе FAT32. В системах FAT12 и FAT16 поле считается зарезервированным и содержит значение 0.
Короткое имя файла состоит из двух полей: 8-байтного поля, содержащего собственно имя файла, и 3-байтного поля, содержащего расширение. Если введенное пользователем имя файла короче восьми символов, то оно дополняется пробелами (код пробела - 20h), если введенное расширение короче трех символов, то оно также дополняется пробелами. Некоторые функции DOS требуют в качестве параметра байт атрибутов файла. Разряды байта атрибутов устанавливаются в 1 в том случае, если у файла имеется соответствующее свойство: бит 0 - только для чтения; бит 1 - скрытый; бит 2 - системный; бит 3 - идентификатор тома; бит 4 - каталог; бит 5 - архивирован; биты 6 и 7 - резерв (установлены в 0). Поле времени создания файла и поле времени выполнения последней операции записи в файл имеют следующий формат: Час Минута Секунда/2 15 11 10 5 4 0 " Секунда/2" означает двухсекундный отсчет (допустимо значение от 0 до 29). Поле даты создания файла, поле даты последного обращения к файлу и поле даты последней записи в файл имеют следующий формат: Год Месяц День 15 9 8 5 4 0 При создании файлов отсчет дат ведется от начала эпохи MS-DOS, т.е. от 01.01.1980. Биты 9-15 содержат номер года минус 1980 (допустимо значение от 0 до 127). Фрагментация диска — это появление на диске множества свободных участков, разделенных занятыми участками. Операционная система MS DOS записывает файлы на диск физическими блоками, называемыми кластерами. Кластер занимает один или несколько смежных секторов и может иметь размер в зависимости от емкости диска и версии операционной системы от 2 до 32 Кбайт для жестких дисков и 512 байт для гибких дисков. После форматирования диска или в том случае, когда на нем имеется достаточно свободного пространства, операционная система записывает файл в смежные, примыкающие друг к другу кластеры. Считывание информации из такого файла происходит при минимальном перемещении магнитных головок. По мере записи на диск новых файлов свободное пространство на нем уменьшается. При недостаточном размере непрерывного свободного пространства на диске операционная система использует для размещения нового файла имеющиеся свободные участки, помещая в них отдельные цепочки кластеров файла — фрагменты файла. При этом фрагменты могут располагаться на значительном расстоянии друг от друга, что приводит к существенному увеличению времени на перемещение магнитных головок и соответственно времени считывания или записи файла. 10 Файлы в UNIX-хранятся в древовидной иерархической файловой системе. Корень файловой системы – это корневой каталог, обозначенный символом «/». Каждый промежуточный узел в дереве файловой системы – это каталог. Конечные вершины дерева файловой системы являются либо пустыми каталогами, либо файлами. Абсолютное путевое имя файла состоит из имен всех каталогов, ведущих к указанному файлу, начиная с корневого каталога. Так, путевое имя /home/test.file означает, что файл test.file расположен в каталоге home, который, в свою очередь, находится в корневом каталоге «/». Каталог, так же как и файл, описывается при помощи inode. Содержимое каталога представляет собой массив записей, каждая из которых содержит информацию о файле, который находится «внутри» текущего каталога. Запись каталога имеет следующий формат: порядковый номер inode файла; длина записи в байтах; имя файла; длина имени файла. Поиск номера inode файла всегда начинается с корневого каталога. Например, чтобы получить порядковый номер inode файла, находящегося в корневом каталоге, операционная система должна получить содержимое корневого каталога, найти в нем запись с именем этого файла и извлечь из этой записи порядковый номер inode файла. Несколько первых номеров inode зарезервированы файловой системой, их перечень содержится в заголовочном файле: /* * Special inode numbers */ #define EXT2_BAD_INO 1 /* Bad blocks inode */ #define EXT2_ROOT_IN 2 /* Root inode */ #define EXT2_ACL_IDX_IN 3 /* ACL inode */ #define EXT2_ACL_DATA_INO 4 /* ACL inode */ #define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */ #define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */ Для записи корневого каталога зарезервирован inode под номером 2 (root inode). Этот inode находится в группе блоков 0 и занимает вторую позицию в таблице inode этой группы. Номер первого незарезервированного inode хранится в суперблоке. Определив порядковый номер inode файла, ядро вычисляет номер группы, в которой этот inode расположен, и его позицию в таблице inode группы. Считав из этой позиции inode, операционная система получает полную информацию о файле, включая адреса блоков, в которых хранится содержимое файла. Номер группы блоков, в которой расположен inode, вычисляется по формуле: group = (inode_num - 1) / inodes_per_group где: group – искомый номер группы блоков; inode_num – порядковый номер inode, определяющего файл; inodes_per_group – число inode в группе (эта информация находится в суперблоке). Позиция inode в таблице inode группы определяется по формуле: index = (inode_num - 1) % inodes_per_groupe где index – позиция inode в таблице. Рассмотрим пример получения содержимого файла test.file, находящегося в корневом каталоге. Для чтения файла /test.file необходимо: в массиве записей корневого каталога найти запись об этом файле; извлечь порядковый номер inode файла, вычислить номер группы, в которой этот inode расположен; из дескриптора данной группы извлечь адрес таблицы inode группы; вычислить позицию inode в этой таблице; считать inode файла; из inode извлечь адреса информационных блоков и осуществить чтение информации, находящейся в этих блоках. Обычный файл — это просто последовательность байтов.Текстовые документы, исполняемые программы, библиотеки функций и многое другое — все это хранится в обычных файлах. К ним возможен как последовательный, так и прямой доступ. Каталог содержит именованные ссылки, на другие файлы или каталоги. Он создается командой mkdir и удаляется (если пустой) командой rmdir. Каталоги, в которых есть файлы, можно удалить командой rm -r. Жесткие Имя файла хранится в родительском каталоге, а не в самом файле. Это так называемая жесткая ссылка. Файл должен иметь хотя бы одну жесткую ссылку в каком-нибудь каталоге, но может иметь и больше в любом месте файловой системы. Жесткие ссылки, ссылающиеся на один файл, равноправны. Символическая, или " мягкая", ссылка обеспечивает возможность вместо путевого имени файла указывать псевдоним. Когда ядро сталкивается с символической ссылкой при поиске файла, оно извлекает из нее хранящееся в ней путевое имя. Различие между жесткими и символическими ссылками состоит в том, что жесткая ссылка — прямая, т.е. указывает непосредственно на индексный дескриптор файла, тогда как символическая ссылка указывает на файл по имени. Файл, адресуемый символической ссылкой, и сама ссылка физически являются разными объектами файловой системы. Символические ссылки создаются командой
|