Добавлен: 29.10.2018
Просмотров: 48124
Скачиваний: 190
4.5. Примеры файловых систем
361
именно этим и занимается. Пользователи Windows должны регулярно запускать эту
программу, делая исключение для SSD-накопителей.
Дефрагментация проводится успешнее на тех файловых системах, которые распола-
гают большим количеством свободного пространства в непрерывном участке в конце
раздела. Это пространство позволяет программе дефрагментации выбрать фраг-
ментированные файлы ближе к началу раздела и скопировать их блоки в свободное
пространство. В результате этого освободится непрерывный участок ближе к началу
раздела, в который могут быть целиком помещены исходные или какие-нибудь другие
файлы. Затем процесс может быть повторен для следующего участка дискового про-
странства и т. д.
Некоторые файлы не могут быть перемещены; к ним относятся файлы, используемые
в страничной организации памяти и реализации спящего режима, а также файлы
журналирования, поскольку выигрыш от этого не оправдывает затрат, необходимых
на администрирование. В некоторых системах такие файлы все равно занимают не-
прерывные участки фиксированного размера и не нуждаются в дефрагментации. Один
из случаев, когда недостаток их подвижности становится проблемой, связан с их раз-
мещением близко к концу раздела и желанием пользователя сократить размер этого
раздела. Единственный способ решения этой проблемы состоит в их полном удалении,
изменении размера раздела, а затем их повторном создании.
Файловые системы Linux (особенно ext2 и ext3) обычно меньше страдают от дефраг-
ментации, чем системы, используемые в Windows, благодаря способу выбора дисковых
блоков, поэтому принудительная дефрагментация требуется довольно редко. Кроме
того, SSD-накопители вообще не страдают от фрагментации. Фактически дефрагмен-
тация SSD-накопителя является контрпродуктивной. Она не только не дает никакого
выигрыша в производительности, но и приводит к износу, сокращая время их жизни.
4.5. Примеры файловых систем
В следующих разделах будут рассмотрены несколько примеров файловых систем, от
самых простых до более сложных. Поскольку современные файловые системы UNIX
и собственная файловая система Windows 8 рассмотрены в главе 10, посвященной
UNIX, и в главе 11, посвященной Windows 8, здесь эти системы рассматриваться не
будут. Зато будут рассмотрены их предшественники.
4.5.1. Файловая система MS-DOS
Файловая система MS-DOS — одна из тех систем, которые применялись на первых
персональных компьютерах. До появления Windows 98 и Windows ME она была основ-
ной файловой системой. Она все еще поддерживается на Windows 2000, Windows XP
и Windows Vista, но теперь уже не является стандартом для новых персональных
компьютеров, за исключением тех случаев, когда на них используются гибкие диски.
Тем не менее она и ее расширение (FAT-32) нашли широкое применение во многих
встраиваемых системах. Ее используют большинство цифровых камер. Многие MP3-
плееры используют только эту систему. Популярное устройство Apple iPod использует
ее в качестве исходной файловой системы, хотя искушенные хакеры могут переформа-
тировать iPod и установить другую файловую систему. Таким образом, электронных
устройств, использующих файловую систему MS-DOS, стало намного больше, чем
362
Глава 4. Файловые системы
когда-либо в прежние времена, и их несомненно больше, чем устройств, использующих
более современную файловую систему NTFS. Уже только по этой причине стоит рас-
смотреть эту систему более подробно.
Чтобы прочитать файл, программа MS-DOS должна сначала сделать системный вы-
зов open, чтобы получить его дескриптор. Системному вызову open указывается путь,
который может быть как абсолютным, так относительным (от текущего рабочего ка-
талога). В пути ведется покомпонентный поиск до тех пор, пока не будет определено
местоположение последнего каталога, после чего происходит его чтение в память.
Затем в нем ведется поиск открываемого файла.
Хотя каталоги в файловой системе MS-DOS переменного размера, в них использу-
ются записи фиксированного размера — 32 байта. Формат записи каталога системы
MS-DOS показан на рис. 4.26. В этой записи содержатся имя файла, его атрибуты,
дата и время создания, номер начального блока и точный размер файла. Имена фай-
лов короче 8 + 3 символов выравниваются по левому краю полей, и каждое поле по
отдельности дополняется пробелами. Поле
Attributes
(атрибуты) представляет собой
новое поле, содержащее биты, указывающие, что для файла разрешено только чтение,
файл должен быть заархивирован, файл является системным или скрытым. Запись
в файл, для которого разрешено только чтение, не разрешается. Таким образом осу-
ществляется защита файлов от случайных повреждений. Бит archived (архивный) не
играет для операционной системы никакой роли (то есть MS-DOS его не проверяет
и не устанавливает). Он предназначен для того, чтобы пользовательские программы
архивирования его сбрасывали при создании резервной копии файла, а остальные
программы его устанавливали, если файл подвергся модификации. Таким образом,
программа резервного копирования получает возможность просто просмотреть со-
стояние этого бита у каждого файла, чтобы определить, какие именно файлы следует
архивировать. Бит hidden (скрытый файл) может быть установлен для предотвращения
появления файла при отображении содержимого каталога. В основном он используется
для того, чтобы не смущать новичков присутствием файлов, назначение которых им
непонятно. И наконец, бит system (системный) также скрывает файлы и защищает их
от случайного удаления командой del. Этот бит установлен у всех файлов, содержащих
основные компоненты системы MS-DOS.
Рис. 4.26. Запись каталога файловой системы MS-DOS
В записи каталога содержатся также дата и время создания или последнего изменения
файла. Точность показания времени составляет ±2 с, поскольку под него отводится
2-байтовое поле, способное хранить только 65 536 уникальных значений (а в сутках
86 400 с). Это поле времени подразделяется на секунды (5 бит), минуты (6 бит) и часы
(5 бит). Счетчики даты в днях также используют три подполя: день (5 бит), месяц
(4 бита) и год — 1980 (7 бит). При использовании 7-разрядного числа для года и отсчета
4.5. Примеры файловых систем
363
времени с 1980 года самым большим отображаемым годом будет 2107-й. Это означает,
что файловой системе MS-DOS присуща проблема 2108 года.
Чтобы избежать катастрофы, пользователи системы MS-DOS должны как можно рань-
ше начать подготовку к 2108 году. Если бы в MS-DOS использовались объединенные
поля даты и времени в виде 32-разрядного счетчика секунд, то удалось бы добиться
точности до секунды, а катастрофу можно было бы отложить до 2116 года.
В MS-DOS размер файла хранится в виде 32-разрядного числа, поэтому теоретически
файл может иметь размер до 4 Гбайт. Но другие ограничения, рассматриваемые далее,
приводят к тому, что максимальный размер файла равен 2 Гбайт или еще меньше. Как
ни удивительно, но значительная часть записи (10 байт) остается неиспользуемой.
В MS-DOS файловые блоки отслеживаются через таблицу размещения файлов (FAT —
file allocation table), содержащуюся в оперативной памяти. В записи каталога хранится
номер первого блока файла. Этот номер используется в качестве индекса к одному из
64 K элементов FAT в оперативной памяти
1
. Следуя по цепочке, можно найти все блоки.
Работа с FAT показана на рис. 4.9.
Существуют три версии файловой системы, использующей FAT: FAT-12, FAT-16 и FAT-
32 в зависимости от разрядности дискового адреса. Вообще-то название FAT-32 дано
несколько неверно, поскольку для адресов диска используются только 28 бит младшего
разряда. Ее следовало бы назвать FAT-28, но число, являющееся степенью двойки, куда
более благозвучно.
Еще одним вариантом файловой системы FAT является exFAT, введенная компанией
Microsoft для больших съемных устройств. Компания Apple лицензировала exFAT,
поэтому она является одной из современных файловых систем, которая может исполь-
зоваться для переноса файлов в обе стороны между компьютерами Windows и компью-
терами OS X. Поскольку на exFAT распространяется право собственности и компания
Microsoft не выпустила ее спецификацию, далее она рассматриваться не будет.
Для всех вариантов FAT размер дискового блока может быть кратен 512 байтам (это
число может быть разным для каждого раздела) и браться из набора разрешенных раз-
меров блока (которые Microsoft называет размерами кластера), разных для каждого
варианта. В первой версии MS-DOS использовалась FAT-12 с блоками по 512 байт, за-
давая максимальный размер раздела 2
12
· 512 байт (на самом деле только 4086 · 512 байт,
поскольку 10 дисковых адресов задействовано в качестве специальных маркеров, на-
пример конца файла, плохого блока и т. д.). При этом максимальный размер дискового
раздела составлял около 2 Мбайт, а размер таблицы FAT в памяти был 4096 записей по
2 байта каждая, поскольку при использовании в таблице 12-разрядных записей система
работала бы слишком медленно.
Эта система хорошо работает с гибкими дисками, но с появлением жестких дисков
возникла проблема. Microsoft решила эту проблему, разрешив дополнительные раз-
меры блоков в 1, 2 и 4 Кбайт. Такое изменение сохраняет структуру и размер таблицы
FAT-12, но допускает использование размера дисковых разделов вплоть до 16 Мбайт.
1
Следует заметить, что, во-первых, FAT в памяти формируется на основе одноименной
структуры данных на диске и должна своевременно обновляться, а во-вторых, примерный
объем FAT 64 К элементов справедлив только для FAT-16. Для FAT-12 он меньше, для FAT-32
соответственно больше. — Примеч. ред.
364
Глава 4. Файловые системы
Так как MS-DOS поддерживала четыре дисковых раздела на каждый привод, новая
файловая система FAT-12 работала с дисками объемом до 64 Мбайт. Но кроме этого
нужно было что-нибудь другое. Поэтому была представлена FAT-16 с 16-разряд-
ными дисковыми указателями. Дополнительно были разрешены размеры блоков
8, 16 и 32 Кбайт. (32 768 — это наибольшее число, кратное степени двойки, которое
может быть представлено 16 разрядами.) Таблица FAT-16 теперь все время занимала
128 Кбайт оперативной памяти, но с ростом доступного объема памяти она получила
широкое распространение и быстро вытеснила файловую систему FAT-12. Объем
наибольшего дискового раздела, поддерживаемого FAT-16, стал равен 2 Гбайт (64 K
записей по 32 Кбайт каждая), а наибольший объем диска — 8 Гбайт, то есть четыре
раздела по 2 Гбайт каждый. Долгое время этого было вполне достаточно.
Но такая ситуация сохранилась не навсегда. Для деловых писем такое ограничение не
играло существенной роли, а вот при хранении цифрового видео, использующего DV-
стандарт, в файле размером 2 Гбайт умещался видеофрагмент продолжительностью
чуть больше 9 минут. Как следствие того, что на диске персонального компьютера под-
держиваются только четыре раздела, самый большой видеофрагмент, который можно
было сохранить на диске, продолжался около 38 минут независимо от того, насколько
объемным был сам диск. Это ограничение также означало, что продолжительность
наибольшего видеофрагмента, который можно было подвергнуть линейному монтажу,
мог быть менее 19 минут, поскольку для этого требовался как входной, так и выходной
файлы.
Начиная со второго выпуска Windows 95 была представлена файловая система FAT-32,
использующая 28-разрядные дисковые адреса, а версия MS-DOS, положенная в основу
Windows 95, была приспособлена для поддержки FAT-32. В этой системе разделы тео-
ретически могли быть по 2
28
· 2
15
байт, но на самом деле они ограничивались размером
2 Тбайт (2048 Гбайт), поскольку система ведет учет размеров разделов секторами по
512 байт, используя 32-разрядные числа, а 2
9
· 2
32
= 2 Тбайт. Максимальный размер
раздела для различных размеров блока и всех трех типов FAT показан в табл. 4.4.
Кроме поддержки дисков большого объема файловая система FAT-32 имеет два
других преимущества над FAT-16. Во-первых, диск объемом 8 Гбайт, на котором
используется FAT-32, может быть отформатирован одним разделом. При исполь-
зовании FAT-16 он должен был иметь четыре раздела, которые появлялись бы для
пользователя Windows как логические диски
C:
,
D:
,
E:
и
F:
. Пользователь должен был
сам решать, какой файл на какой диск поместить, и следить за тем, что где находится.
Таблица 4.4. Максимальный размер раздела для различных размеров блока
(пустые клетки означают запрещенные комбинации)
Размер блока, Кбайт
FAT-12, Мбайт
FAT-16, Мбайт
FAT-32, Тбайт
0,5
2
1
4
2
8
128
4
16
256
1
8
512
2
16
1024
2
32
2048
2
4.5. Примеры файловых систем
365
Другое преимущество FAT-32 над FAT-16 заключается в том, что для дискового раздела
заданного размера могут использоваться блоки меньшего размера. Например, для 2-гига-
байтного дискового раздела система FAT-16 должна использовать 32-килобайтные блоки,
иначе при наличии всего 64 К доступных дисковых адресов она не смогла бы покрыть
весь раздел. В отличие от нее FAT-32 может использовать, к примеру, блоки размером
4 Кбайт для 2-гигабайтного дискового раздела. Преимущество блоков меньшего размера
заключается в том, что длина большинства файлов менее 32 Кбайт. При размере блока
32 Кбайт даже 10-байтовый файл будет занимать на диске 32 Кбайт. Если средний раз-
мер файлов, скажем, равен 8 Кбайт, то при использовании 32-килобайтных блоков около
3/4 дискового пространства будет теряться впустую, то есть эффективность использо-
вания диска будет очень низкой. При 8-килобайтных файлах и 4-килобайтных блоках
потерь дискового пространства не будет, но зато для хранения таблицы FAT потребуется
значительно больше оперативной памяти. При 4-килобайтных блоках 2-гигабайтный
раздел будет состоять из 512 К блоков, поэтому таблица FAT должна состоять из 512 К
элементов (занимая 2 Мбайт ОЗУ).
Файловая система MS-DOS использует FAT для учета свободных блоков. Любой нерас-
пределенный на данный момент блок помечается специальным кодом. Когда системе
MS-DOS требуется новый блок на диске, она ищет в таблице FAT элемент, содержащий
этот код. Поэтому битовый массив или список свободных блоков не нужен.
4.5.2. Файловая система UNIX V7
Даже в ранних версиях системы UNIX применялась довольно сложная многополь-
зовательская файловая система, так как в основе этой системы лежала операционная
система MULTICS. Далее будет рассмотрена файловая система V7, разработанная
для компьютера PDP-11, сделавшего систему UNIX знаменитой. Современная фай-
ловая система UNIX будет рассмотрена в контексте операционной системы Linux
в главе 10.
Файловая система представляет собой дерево, начинающееся в корневом каталоге,
с добавлением связей, формирующих направленный ациклический граф. Имена
файлов могут содержать до 14 любых символов ASCII, кроме слеша (поскольку он
служит разделителем компонентов пути) и символа NUL (поскольку он используется
для дополнения имен короче 14 символов). Символ NUL имеет числовое значение 0.
Каталог UNIX содержит по одной записи для каждого файла этого каталога. Каждая
запись каталога максимально проста, так как в системе UNIX используется система
i-узлов (см. рис. 4.10). Запись каталога, как показано на рис. 4.27, состоит всего из двух
полей: имени файла (14 байт) и номера i-узла для этого файла (2 байта). Эти параметры
ограничивают количество файлов в файловой системе до 64 К.
Рис. 4.27. Запись каталога файловой системы UNIX V7