Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

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


Каталог FAT32 (GPT-диски).

Каталог FAT32 (GPT-диски).

GPT-диск должен содержать один системный раздел. В системах на основе EFI и UEFI этот раздел также называется системным разделом EFI или ESP. Этот раздел обычно хранится на основном жестком диске. С системного раздела происходит загрузка компьютера. Минимальный размер этого раздела составляет 100 МБ, и он должен форматироваться только с помощью формата файлов FAT32 (FAT32 «понимают» различные операционные системы). Этим разделом управляет операционная система, и он не должен содержать никакие другие файлы, включая средства среды восстановления Windows. Пример конфигурации разделов на GPT-диске с UEFI показан на рис. 1.

 

Рис. 1.Cтандартная конфигурация дисков в разметке GPT на UEFI-системе.

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

Структура элемента каталога файлов приведена в табл. 1. Элемент начинается с 11-байтного поля, содержащего так называемое «короткое имя» файла, по которому операционная система обычно осуществляет поиск файла в каталоге. «Короткое имя» состоит из двух полей: 8-байтного поля, содержащего собственно имя файла и 3-байтного поля, содержащего расширение. Если введенное пользователем имя файла короче восьми символов, то оно дополняется пробелами (код пробела - 20h). Если введенное расширение короче трех байтов, то оно также дополняется пробелами. Разделительная точка между именем и расширением файла не хранится в структуре данных, она подставляется программами операционной системы после имени файла (задание имени файла, вывод списка файлов на экран и т. д. В «коротком имени» все текстовые символы преобразуются операционной системой в верхний регистр.

Назначение разрядов полей 2-х байтового поля времени следующее:

- биты 0-4 - двухсекундный отсчет (допустимо значение от 0 до 29);

- биты 5-10 - минута (допустимо значение от 0 до 59);

- биты 11-15 - час (допустимо значение от 0 до 23).

Назначение разрядов 2-х байтного поля даты:

- биты 0-4 - день месяца (допустимо значение от 1 до 31);

- биты 5-8 - номер месяца в году (допустимо значение от 1 до 12);

- биты 9-15 - номер года минус 1980 (допустимо значение от 0 до 127).

Номер первого кластера файла задается двумя двухбайтовыми полями, содержащими младшее слово и старшее слово номера кластера соответственно.

Поле размера файла является 32-разрядным числом, что позволяет задавать размер файла до 4 Гбайт. Для каталогов, значение этого поля устанавливается в ноль. Ограничение на размер каталога с этим полем никак не связано и вызвано тем, что дисковые утилиты операционной системы используют в качестве счетчика элементов каталога 16-разрядное слово (каталог может содержать до 65536 32-байтных элементов).

Таблица 1. Структура элемента каталога

В файловых системах FAT32 пользователи могут присваивать файлам имена длиной до 255 символов и более чем с одной точкой. Имя файла считается длинным, если оно превышает размеры, допускаемые форматом «8.3», или если в нем содержатся строчные буквы и другие символы, недопустимые в пространстве имен формата «8.3». Версии операционных систем начиная ещес Windows 95 и далее позволяют присваивать файлу (в дополнение к «короткому имени») так называемое «длинное имя», используя для его хранения «свободные» элементы каталога, смежные с основным элементом, который определяет файл (рис 2). «Короткое» и «длинное» имена файла являются уникальными, то есть не должны встречаться дважды в одном каталоге.

Рис. 2.

На рис. 2 с адреса 00000020 расположены 32 байта записи каталога, описывающей файл с «коротким именем» PROGRA~1, которое получено сокращением «длинного имени» файла ProgramFiles и добавлением символов ~1, а с адреса 00000000 расположены 32 байта записи каталога, используемой для хранения «длинного имени» этого файла. Первый байт «короткого имени» выполняет функции признака «занятости» элемента каталога, но если он содержит E5h, то элемент каталога свободен (то есть его можно использовать при создании нового файла), а если он равен 00h, то элемент каталога свободен и является началом «чистой» области каталога (после него нет ни одного использованного элемента).

Если первый байт «короткого имени» равен 05h, то следует считать, что в этом байте находится ASCII-символ с кодом 0E5h (символ KANJI японского алфавита). В «коротком имени» нельзя использовать ASCII-символы с кодами меньше 20h (за исключением кода 05h в первом байте «короткого имени»), символы с кодами 22h, 2Ah, 2Bh, 2Сh, 2Eh, 2Fh, 3Ah, 3Вh, 3Ch, 3Dh, 3Eh, 3Fh, 5Bh, 5Ch, 5Dh, 7Ch, пробел (код 20h) в первом байте «короткого имени». При задании пользователем имени файла допускается отсутствие расширения, но имя должно содержать по крайней мере один символ.

Разрядам байта атрибутов (табл. 1) соответствует, определяемое разрядом свойство файла:

- бит 0 равный единице определяет файл предназначенный только для чтения;

- бит 1 равный единице определяет скрытый файл;

- бит 2 равный единице определяет системный файл;

- бит 3 равный единице определяет идентификатор (метку) тома;

- бит 4 равный единице определяет каталог;

- бит 5 равный единице определяет архивированный файл;

- биты 6 и 7 зарезервированы и должны иметь значение 0.

«Длинное имя» записывается в кодировке формата Unicode. Unicode - это универсальная международная кодировка, которая предусматривает выделение для набора символов каждого языка определенной непрерывной последовательности двоичных чисел. Символы Unicode хранятся в виде 16-разрядных чисел, что позволяет представить свыше 60 тысяч различных символов, но на каждый символ расходуется два байта памяти. Набор символов латинского алфавита (то есть символов английского языка) и математические символы считаются в Unicode основными и размещаются в диапазоне 0020h-007Eh. Преобразование латинских символов из формата Unicode в ASCII-код сводится к простому отсечению старшего байта символа. Символы русского языка (Cyrillic) размещаются в диапазоне 0410h-044Fh и преобразование русских символов из формата Unicode в ASCII-код проблематично.

Признаком того, что «свободный» элемент каталога используется для хранения участка «длинного имени» является наличие единиц в разрядах 0-3 байта атрибутов (для файлов и каталогов такое сочетание невозможно). «Длинное имя» в пустые элементы каталога записывается разрезанным на части, как показано в рис. 3, 4. В одном элементе каталога можно сохранить фрагмент длиной до 13 символов Unicode (поскольку в трех участках имеется в сумме 26 байт), а неиспользованный участок последнего фрагмента заполняется кодами FFFFh.

«Длинное имя» записывается в 32-х байтную запись каталога, расположенную перед 32-х байтной записью «короткого имени» (рис 3), причем фрагменты (рис. 4) размещены в обратном порядке, начиная с последнего фрагмента (рис. 5).

 

Рис. 3. Пример «Длинного имени» (ProgramFiles). 

Фрагменты «длинного имени» пронумерованы. В младших разрядах байта номера фрагмента хранят собственно номер, а разряд 6 служит признаком последнего фрагмента «длинного имени», разряд 7 зарезервирован (равен 0).

Рис. 4. Структура элемента каталога, хранящего фрагмент длинного имени файла.

С целью поддержки совместимости для каждого длинного имени файла автоматически генерируется псевдоним, удовлетворяющий формату «8.3». Этот псевдоним составляется из первых шести символов имени файла, дополняемых знаками ~N (где N - порядковый номер), и первых трех символов за последней точкой. Таким образом, файл ProgramFiles получит псевдоним PROGRA~1. Если в каталоге уже есть такой псевдоним, порядковый номер увеличивается на единицу до тех пор, пока не получится уникальное имя. Ни пользователь, ни приложение не могут повлиять на процесс автоматического формирования псевдонима. В псевдониме используются только допустимые символы, а все буквы должны быть заглавными, чтобы соответствовать правилам формата «8.3». Для имен формата «8.3» (и псевдонимов) допустима любая комбинация букв и цифр, пробел (ASCII-код 20h), символы ASCII с кодами больше 127, а также знаки: $ %’-_ @ ~ ' !( )^#&.

Следующие символы допустимы в длинных именах файлов, но недопустимы в псевдонимах или именах формата «8.3»: + , ; = [ ] . Кроме того, файловые системы (начиная с Windows 98) подчиняются таким правилам:

- максимальная длина имени файла - 255 знаков, включая символ NULL;

- максимальная длина пути - 260 знаков, включая символ NULL;

- набор символов OEM, используемый устанавливаемой файловой системой, определяется реестром и содержимым файла Unicode.bin;

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

Имя файла и псевдоним одинаковы, если имя соответствует формату «8.3» (т. е. содержит только допустимые для псевдонима символы, и все буквы заглавные). Отсюда следует, что имя файла, во всем совпадающее с псевдонимом за исключением того, что содержит строчные буквы, все равно считается длинным. В таком случае псевдоним формируется простым преобразованием строчных букв в заглавные - например, Examples.txt трансформируется в EXAMPLES.TXT (при поиске в файловой системе регистр букв не учитывается).

Элемент каталога FAT, размер которого составляет 32 байта, хранит имя файла, его размер, начальный кластер и метку времени (время создания, последнего доступа и т.д.). Если имя файла состоит из Unicode-символов или не соответствует правилам именования по формуле «8.3», оно считается длинным, и для его хранения выделяются дополнительные элементы каталога. Вспомогательные элементы предшествуют главному элементу для файла. На рис. 3 был показан пример элемента каталога для файла с именем «The quick brown fox». Система создала представление этого имени в формате «8.3», THEQUI~1.FOX (в элементе каталога нет «точки», поскольку предполагается, что точка следует после восьмого символа), и использовала два дополнительных 32-х байтных элемента для хранения длинного Unicode-имени.

Все каталоги, за исключением корневого, содержат в двух первых элементах вместо описателей файлов специальные ссылки. В элементе с номером 0 размещается указатель на сам каталог, а в поле имени находится одна точка (.). В элементе с номером 1 размещается указатель на «родительский» каталог (каталог более высокого уровня), а в поле имени находятся две точки (..). Если ссылка на таблицу FAT у элемента №1 имеет нулевое значение, то текущий каталог находится в корневом каталоге. На рис. 5 показано размещение стандартного описателя и фрагментов длинного имени файла.

 

Рис. 5. Запись в каталог описателей файла с «длинным» именем.


Лицензия