Материал: 6261

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

101

Каждая строка Inode Table имеет размер 128 байт и имеет структуру индексного дескриптора файлов, рассмотренного ниже. Количество строк Inode Table, а следовательно, и размер таблицы, задается при создании файловой системы.

Замечание

Каждый файл требует одной записи в таблицу дескрипторов. Поэтому размер этих таблиц нужно предусмотреть заранее.

Среди индексных дескрипторов имеется несколько значений дескрипторов, которые зарезервированы для специальных целей и играют особую роль в файловой системе.

Замечание

Значения этих дескрипторов, которые перечислены в таблице 4.7, не могут быть использованы для других целей.

Таблица 4.7 - Специальные индексные дескрипторы

Идентификатор

Знач. Описание

Индексный дескриптор, в котором перечисле- EXT2_BAD_INO 1 ны адреса дефектных блоков на диске (Bad

blocks inode).

EXT2_ROOT_INO

EXT2_ACL_IDX_INO

EXT2_ACL_DATA_INO

EXT2_BOOT_LOADER_INO

EXT2_UNDEL_DIR_INO EXT2_FIRST_INO

2Индексный дескриптор корневого каталога файловой системы (Root inode).

3 ACL inode. 4 ACL inode.

5Индексный дескриптор загрузчика (Boot loader inode).

6 Undelete directory inode.

11Первый незарезервированный индексный дескриптор.

Самый важный дескриптор в этом списке - дескриптор корневого каталога.

Каталог файловой системы - файл, состоящий из записей переменной длины.

Таблица 4.8 - Структура файла корневого каталога

Название поля

Тип

Описание

inode

ULONG

Номер индексного дескриптора (индекс) файла

rec_len

USHORT

Длина этой записи

name_len

USHORT

Длина имени файла

name

CHAR[0]

Первый символ имени файла

102

Замечание

Отдельная запись в каталоге не может пересекать границу блока, то есть должна быть расположена целиком внутри одного блока.

Если очередная запись каталога не помещается целиком в данном блоке, то она переносится в следующий блок, а предыдущая запись продолжается таким образом, чтобы она заполнила блок до конца.

Индексные дескрипторы файлов:

Вся информация о файле хранится в индексном десткрипторе (Inode).

Число файлов, которое может быть создано в файловой системе, ограничено числом индексных дескрипторов, которое:

•либо явно задается, при создании файловой системы;

•либо вычисляется, исходя из физического объема дискового раздела.

Размер индексного дескриптора = 32 * 4 = 128 байт. Структура индексного дескриптора приведена в таблице 4.9.

Таблица 4.9 - Структура индексного дескриптора файла

Название

Тип

поля

 

i_mode

USHORT

i_uid

USHORT

i_size

ULONG

i_atime

ULONG

i_ctime

ULONG

i_mtime

ULONG

i_dtime

ULONG

i_gid

USHORT

i_links_count

USHORT

i_blocks

ULONG

i_flags

ULONG

i_reserved1

ULONG

i_block

ULONG[

15]

 

i_version

ULONG

i_file_acl

ULONG

i_dir_acl

ULONG

i_faddr

ULONG

i_frag

UCHAR

Описание

Тип и права доступа к данному файлу.

Идентификатор владельца файла (Owner Uid).

Размер файла в байтах.

Время последнего обращения к файлу (Access time).

Время создания файла.

Время последней модификации файла.

Время удаления файла.

Идентификатор группы (GID).

Счетчик числа связей (Links count).

Число блоков, занимаемых файлом.

Флаги файла (File flags)

Зарезервировано для ОС

Указатели на блоки данных, которые рассмотрены далее в разделе «Система адресации данных»

Версия файла (для NFS)

ACL файла - Access Control List – список доступа

ACL каталога - Access Control List – список доступа

Адрес фрагмента (Fragment address) Номер фрагмента (Fragment number)

 

 

103

i_fsize

UCHAR

Размер фрагмента (Fragment size)

i_pad1

USHORT

Заполнение

i_reserved2

2]ULONG[

Зарезервировано

Среди множества полей индесного десткриптора файла, более подробно мы рассмотрим i_mode и i_block.

Поле i_mode - тип и права доступа к файлу.

Оно является двух-байтовым словом, каждый бит которого служит флагом, индицирующим отношение файла к определенному типу или установку одного конкретного права на файл (таблица 4.10).

Таблица 4.10 - Поле прав доступа к файлу

Идентификатор

Значение

Назначение флага (поля)

S_IFMT

F000

Маска для типа файла

S_IFSOCK

A000

Доменное гнездо (socket)

S_IFLNK

C000

Символическая ссылка

S_IFREG

8000

Обычный (regular) файл

S_IFBLK

6000

Блок-ориентированное устройство

S_IFDIR

4000

Каталог

S_IFCHR

2000

Байт-ориентированное (символьное) устройство

S_IFIFO

1000

Именованный канал (fifo)

S_ISUID

0800

SUID - бит смены владельца

S_ISGID

0400

SGID - бит смены группы

S_ISVTX

0200

Бит сохранения задачи (sticky bit)

S_IRWXU

01C0

Маска прав владельца файла

S_IRUSR

0100

Право на чтение

S_IWUSR

0080

Право на запись

S_IXUSR

0040

Право на выполнение

S_IRWXG

0038

Маска прав группы

S_IRGRP

0020

Право на чтение

S_IWGRP

0010

Право на запись

 

 

104

S_IXGRP

0008

Право на выполнение

S_IRWXO

0007

Маска прав остальных пользователей

S_IROTH

0004

Право на чтение

S_IWOTH

0002

Право на запись

S_IXOTH

0001

Право на выполнение

Система адресации данных - одна из самых существенных составных частей файловой системы. Именно она позволяет находить нужный файл среди множества как пустых, так и занятых блоков на диске.

В ext2fs, она реализуется полем i_block индексного дескриптора файла.

Поле i_block в индексном дескрипторе файла представляет собой массив из 15 адресов блоков, что наглядно демонстрируется рисунком 4.6.

Рисунок 4.6 - Адресация блоков файла с помощью i_block

105

Первые 12 адресов в этом массиве i_block[0 - 11] = EXT2_NDIR_BLOCKS [0 - 11] - прямые ссылки (адреса) на номера блоков, в которых хранятся данные из файла.

Следующий адрес i_block[12] = EXT2_IND_BLOCK является косвенной ссылкой на блок, в котором хранится список следующих адресов блоков с данными для этого файла:

Количество адресов = (размер_блока / размер_ULONG)

Следующий адрес i_block[13] = EXT2_DIND_BLOCK указывает на блок двойной косвенной адресации (double indirect block). Этот блок содержит список адресов блоков, которые в свою очередь содержат списки адресов следующих блоков данных того файла, который задается данным индексным дескриптором:

Количество адресов = (размер_блока / размер_ULONG)2

Последний адрес i_block[14] = EXT2_TIND_BLOCK указывает на блок тройной косвенной адресации:

Количество адресов = (размер_блока / размер_ULONG)3

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

•определить адреса групп блоков данных прочитать групповые дескрипторы;

•из групповых дескрипторов определяем положение и размер индексных дескрипторов файлов;

•просматривая таблицу индексных дескрипторов файлов, мы определяем, что

описывает дескриптор: файл, каталог, символьное или блочное устройство, другие объекты;

•по дескрипторам каталогов мы читаем блоки данных, в которых записаны

имена файлов, каталогов, других устройств и соответствующие номера записей в таблице индексных дескрипторов файлов;

•номера свободных блоков и индексных дескрипторов файлов мы определяет по соответствующим битовым таблицам (картам).

Источник: https://studfile.net/preview/16438529/