Таблица 16.3. Структура описания группы блоков
| Название поля |
Тип |
Назначение |
| bg_block_bitmap |
ULONG |
Адрес блока, содержащего битовую карту блоков (block bitmap) данной группы |
| bg_inode_bitmap |
ULONG |
Адрес блока, содержащего битовую карту индексных дескрипторов (inode bitmap) данной группы |
| bg_inode_table |
ULONG |
Адрес блока, содержащего таблицу индексных дескрипторов (inode table) данной группы |
| bg_free_blocks_count |
USHORT |
Счетчик числа свободных блоков в данной группе |
| bg_free_inodes_count |
USHORT |
Число свободных индексных дескрипторов в данной группе |
| bg_used_dirs_count |
USHORT |
Число индексных дескрипторов в данной группе, которые являются каталогами |
| bg_pad |
USHORT |
Заполнение |
| bg_reserved |
ULONG[3] |
Заполнение |
Размер описания группы блоков можно вычислить как
(размер_группы_блоков_в_ext2* число_групп) / размер_блока,
при необходимости округляем.
Информация, которая хранится в описании группы, используется для того, чтобы найти битовые карты блоков и индексных дескрипторов, а также таблицу индексных дескрипторов. Не забывайте, что блоки и группы блоков нумеруются, начиная с 1.
Битовая карта блоков (block bitmap) - это структура, каждый бит которой показывает, отведен ли соответствующий ему блок какому-либо файлу. Если бит равен 1, то блок занят. Эта карта служит для поиска свободных блоков в тех случаях, когда надо выделить место под файл, Битовая карта блоков занимает число блоков, равное (число_блоков_в_группе / 8) / размер_блока (при необходимости округляем).
Битовая карта индексных дескрипторов выполняет аналогичную функцию по отношению к таблице индексных дескрипторов: показывает, какие именно дескрипторы заняты.
Следующая область в структуре группы блоков служит для хранения таблицы индексных дескрипторов файлов. Структура самого индексного дескриптора подробнее рассматривается ниже в разд. 16.3.
И, наконец, все оставшееся место в группе блоков отводится для хранения собственно файлов.
16.3. Индексные дескрипторы файлов
Каждому файлу на диске соответствует один и только один индексный дескриптор файла, который идентифицируется своим порядковым номером - индексом файла. Это означает, что число файлов, которые могут быть созданы в файловой системе, ограничено числом индексных дескрипторов, которое либо явно задается при создании файловой системы, либо вычисляется исходя из физического объема дискового раздела.
Строение индексного дескриптора файла приведено в табл. 16.4.
Таблица 16.4. Структура индексного дескриптора
| Название поля |
Тип |
Описание |
| i_mode |
USHORT |
Тип и права доступа к данному файлу |
| i_uid |
USHORT |
Идентификатор владельца файла (Owner Uid) |
| i_size |
ULONG |
Размер файла в байтах |
| i_atime |
ULONG |
Время последнего обращения к файлу (Access time) |
| i_ctime |
ULONG |
Время создания файла |
| i_mtime |
ULONG |
Время последней модификации файла |
| i_dtime |
ULONG |
Время удаления файла |
| i_gid |
USHORT |
Идентификатор группы (GID) |
| i_link_scount |
USHORT |
Счетчик числа связей (Links count) |
| i_blocks |
ULONG |
Число блоков, занимаемых файлом |
| i_flags |
ULONG |
Флаги файла (File flags) |
| i_reserved1 |
ULONG |
Зарезервировано для ОС |
| i_block |
ULONG[15] |
Указатели на блоки, в которых записаны данные файла (это поле подробно описано в разд. 16.4) |
| i_version |
ULONG |
Версия файла (для NFS) |
| i_file_acl |
ULONG |
ACL файла |
| i_dir_acl |
ULONG |
ACL каталога |
| i_faddr |
ULONG |
Адрес фрагмента (Fragment address) |
| i_frag |
UCHAR |
Номер фрагмента (Fragment number) |
| i_fsize |
UCHAR |
Размер фрагмента (Fragment size) |
| i_pad1 |
USHORT |
Заполнение |
| i_reserved2 |
ULONG[2] |
Зарезервировано |
Поле типа и прав доступа к файлу представляет собой двухбайтовое слово, каждый бит которого служит флагом, индицирующим отношение файла к определенному типу или установку одного конкретного права на файл.
Таблица 16.5. Структура поля, задающего тип и права доступа
| Идентификатор |
Значение |
Назначение флага (поля) |
| 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 |
Право на запись |
| S_IXGRP |
0008 |
Право на выполнение |
| S_IRWXO |
0007 |
Маска прав остальных пользователей |
| S_IROTH |
0004 |
Право на чтение |
| S_IWOTH |
0002 |
Право на запись |
| S_IXOTH |
0001 |
Право на выполнение |
Среди индексных дескрипторов имеется несколько дескрипторов, которые зарезервированы для специальных целей и играют особую роль в файловой системе (табл. 16.6).
Читать дальше