96
Для длинных имен файлов, в формате Unicode-16, используется несколько 32байтовых записей каталога в специальном формате. Один элемент, такого формата записи, показан на рисунке 4.5 и имеет несколько полей.
Таблица 4.3 - Основной вариант записи для короткого имени FAT32
Смещение |
|
Описание |
|
Hex |
Dec |
Длина поля |
|
00h |
0 |
8 байт |
Имя файла |
08h |
8 |
3 байт |
Расширение файла |
0Bh |
11 |
1 байт |
Атрибуты файла |
0Ch |
12 |
2 байт |
Зарезервировано для NT |
0Eh |
14 |
2 байт |
Время создания файла |
10h |
16 |
2 байт |
Дата создания файла |
12h |
18 |
2 байт |
Дата последнего доступа |
14h |
20 |
2 байт |
Старшее слово номера начального кластера |
16h |
22 |
2 байт |
Время последней записи |
18h |
24 |
2 байт |
Дата последней записи |
1Ah |
26 |
2 байт |
Младшее слово начального кластера |
1Ch |
28 |
4 байт |
Размер файла в байтах |
Рисунок 4.5 - Структура элемента записи для длинного имени файла
Таблица 7.4 - Значения 11-го байта атрибутов
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Hex |
Значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
01h |
Только чтение |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
02h |
Скрытый |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
04h |
Системный |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
08h |
Метка тома |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
10h |
Подкаталог |
|
|
|
|
|
|
|
|
|
97 |
|
|
|
|
|
|
|
|
|
|
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
20h |
Архивный (измененный) |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
40h |
Зарезервировано |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
80h |
Зарезервировано |
Область данных — все остальные кластеры раздела. Они используются для хранения подкатологов и файлов.
Подкатологи – это файлы, содержащие последовательности 32-битных записей
имен файлов и подкаталогов, указанного выше формата.
Содержимое файлов — данные некоторой последовательности кластеров. Последовательность кластеров — произвольная и неупорядоченная, но отражена в виде цепочки, в таблице FAT.
Замечание
Чем больше размер кластера, тем больший размер раздела может адресоваться и повышается скорость обработки файлов, но уменьшается эффективность их хранения.
ext2 (ext2fs) - Second Extended File System — базовая файловая система ОС Linux. Разработана Реми Кардом и представлена в январе 1993 года.
Поддерживает файлы размером до 2 Гбайт.
Является преемницей ext - Extended File System, представленной в апреле 1992 года.
Структура дискового раздела ext2fs представляет последовательность группы блоков, которые нумеруются, начиная с 1.
Загрузочная запись
– принадлежит 1-й группе блоков
Группа |
Группа |
... |
Группа |
блоков 1 |
блоков 2 |
|
блоков n |
Каждая группа блоков состоит из последовательности блоков, которые также нумеруются, начиная с 1.
Каждая группа блоков имеет одинаковое число блоков, кроме последней, которая может быть неполной.
Начало каждой группы блоков имеет адрес, который может быть получен как:
Address = (номер_группы — 1)* (число_блоков_в_группе)
Размер блока может быть 1, 2 или 4 килобайта, что определяется в момент форматирования – при создании файловой системы.
Блок является адресуемой единицей дискового пространства.
|
|
|
98 |
|
|
Каждая группа блоков имеет одинаковое строение: |
|
||||
Супер- |
Описание |
Битовая |
Битовая карта |
Таблица |
Область |
блок |
группы |
карта |
индексных |
индексных |
блоков |
|
блоков |
блоков |
дескрипторов |
дескрипторов |
данных |
|
(Group |
(Block |
(Inode Bitmap) |
(Inode Table) |
|
|
Descriptors) |
Bitmap) |
|
|
|
Такая структура служит повышению производительности файловой системы:
•сокращается расстояние между таблицей индексных дескрипторов и блоками данных;
•сокращается время поиска нужного места головками в процессе операций записи/считывания файла.
Первый элемент группы блоков - суперблок, который одинаков для всех групп. Все остальные элементы - индивидуальны для каждой группы.
Первые 1024 байта раздела занимает загрузочная запись раздела.
Суперблок, хранится в первой группе блоков и имеет смещение 1024 байта. Наличие нескольких копий суперблока объясняется чрезвычайной важностью этого элемента файловой системы.
Дубликаты суперблока используются при восстановлении файловой системы после сбоев.
Информация, хранимая в суперблоке (см. табл. 4.5), используется для организации доступа к остальным данным на диске. В суперблоке определяется размер файловой системы, максимальное число файлов в разделе, объем свободного пространства и содержится информация о том, где искать незанятые участки.
При запуске ОС, суперблок считывается в память и все изменения файловой системы вначале находят отображение в копии суперблока, находящейся в ОЗУ, и записываются на диск только периодически.
При выключении системы, суперблок обязательно должен быть записан на диск.
Таблица 4.5 - Структура суперблока
Название поля |
Тип |
Комментарий |
s_inodes_count |
ULONG |
Число индексных дескрипторов в файловой системе |
s_blocks_count |
ULONG |
Число блоков в файловой системе |
s_r_blocks_count |
ULONG |
Число блоков, зарезервированных для суперпользователя |
s_free_blocks_count |
ULONG |
Счетчик числа свободных блоков |
s_free_inodes_count |
ULONG |
Счетчик числа свободных индексных дескрипторов |
|
|
Первый блок, который содержит данные. В |
s_first_data_block ULONG |
зависимости от размера блока, это поле может быть |
|
|
|
равно 0 или 1. |
|
|
|
99 |
|
s_log_block_size |
ULONG |
Индикатор размера логического блока: 0 = 1 Кб; 1 = 2 |
||
Кб; 2 = 4 Кб. |
|
|||
s_log_frag_size |
LONG |
Индикатор размера фрагментов |
|
|
s_blocks_per_group |
ULONG |
Число блоков в каждой группе блоков |
||
s_frags_per_grou |
ULONG |
Число фрагментов в каждой группе блоков |
||
p |
|
|
|
|
s_inodes_per_group |
ULONG |
Число |
индексных дескрипторов |
(inodes) в каждой |
группе блоков |
|
|||
|
|
|||
s_mtime |
ULONG |
Время, когда в последний раз была смонтирована |
||
|
|
файловая система. |
|
|
s_wtime |
ULONG |
Время, когда в последний раз производилась запись в |
||
файловую систему |
|
|||
|
|
Счетчик числа монтирований файловой системы. |
||
|
|
Если этот счетчик достигает значения, указанного в |
||
s_mnt_count |
USHORT |
следующем поле (s_max_mnt_count), файловая |
||
|
|
система должна быть проверена (это делается при |
||
|
|
перезапуске), а счетчик обнуляется. |
||
s_max_mnt_count SHORT |
Число, |
определяющее, сколько |
раз может быть |
|
смонтирована файловая система |
|
|||
|
|
|
||
s_magic |
USHORT |
"Магическое число" (0xEF53), указывающее, что |
||
|
|
файловая система принадлежит к типу ex2fs |
||

s_state 
s_errors
s_pad 
s_lastcheck
s_checkinterval 
s_creator_os 
s_rev_level 
s_reserved
USHORT |
Флаги, указывающее текущее состояние файловой |
системы: является ли она чистой (clean) и т.п. |
|
USHORT |
Флаги, задающие процедуры обработки сообщений |
|
об ошибках (что делать, если найдены ошибки). |
USHORT |
Заполнение |
ULONG |
Время последней проверки файловой системы |
ULONG |
Максимальный период времени между проверками |
файловой системы |
|
ULONG |
Указание на тип ОС, в которой создана файловая |
|
система |
ULONG |
Версия (revision level) файловой системы. |
ULONG[ |
Заполнение до 1024 байт (235 * 4 = 940) |
235] |
|
Вслед за суперблоком расположено описание группы блоков (Group Descriptors). Это описание имеет структуру длиной 32 байта, представленную в таблице 4.6.
|
|
100 |
|
Таблица 4.6 - Структура описания группы блоков |
|
||
Название поля |
Тип |
Назначение |
|
bg_block_bitmap |
ULONG |
Адрес блока, содержащего битовую карту |
блоков |
(block bitmap) данной группы |
|
||
|
|
|
|
bg_inode_bitmap |
ULONG |
Адрес блока, содержащего битовую карту индексных |
|
дескрипторов (inode bitmap) данной группы |
|
||
|
|
|
|
bg_inode_table |
ULONG |
Адрес блока, содержащего таблицу индексных деск- |
|
рипторов (inode table) данной группы |
|
||
|
|
|
|
bg_free_blocks_c |
USHORT |
Счетчик числа свободных блоков в данной группе |
|
ount |
|
|
|
bg_free_inodes_count |
USHORT |
Число свободных индексных дескрипторов в данной |
|
группе |
|
||
|
|
|
|
bg_used_dirs_count |
USHORT |
Число индексных дескрипторов в данной |
группе, |
которые являются каталогами |
|
||
|
|
|
|
bg_pad |
USHORT |
Заполнение |
|
bg_reserved |
ULONG[3] |
Заполнение |
|
Размер описания группы блоков можно вычислить как:
N = (размер_группы_блоков_в_ext2 * число_групп) / размер_блока
Информация, которая хранится в описании группы, используется, чтобы найти:
•битовые карты блоков,
•индексных дескрипторов,
•таблицу индексных дескрипторов.
Битовая карта блоков (block bitmap) - это структура, каждый бит которой показывает, отведен ли соответствующий ему блок какому-либо файлу.
Если бит равен 1, то блок занят.
Эта карта также служит для поиска свободных блоков в тех случаях, когда надо выделить место под файл.
Битовая карта блоков занимает число блоков, равное:
Bloks = (число_блоков_в_группе / 8) / размер_блока
Битовая карта индексных дескрипторов выполняет аналогичную функцию по отношению к таблице индексных дескрипторов: показывает какие именно дескрипторы заняты.
Таблица индексных дескрипторов:
После битовой карты индексных дескрипторов, следует таблица индексных дескрипторов файлов - Inode Table.