□ Список адресов свободных блоков
Поскольку число свободных inode и блоков хранения данных может быть значительным, хранение двух последних списков целиком в суперблоке непрактично. Например, для индексных дескрипторов хранится только часть списка. Когда число свободных inode в этом списке приближается к 0, ядро просматривает ilist и вновь формирует список свободных inode. Для этого ядро анализирует поле di_mode
индексного дескриптора, которое равно 0 у свободных inode.
К сожалению, такой подход неприменим в отношении свободных блоков хранения данных, поскольку по содержимому блока нельзя определить, свободен он или нет. Поэтому необходимо хранить список адресов свободных блоков целиком. Список адресов свободных блоков может занимать несколько блоков хранения данных, но суперблок содержит только один блок этого списка. Первый элемент этого блока указывает на блок, хранящий продолжение списка и т.д., как это показано на рис. 4.1.
Выделение свободных блоков для размещения файла производится с конца списка суперблока. Когда в списке остается единственный элемент, ядро интерпретирует его как указатель на блок, содержащий продолжение списка. В этом случае содержимое этого блока считывается в суперблок и блок становится свободным. Такой подход позволяет использовать дисковое пространство под списки, пропорциональное свободному месту в файловой системе. Другими словами, когда свободного места практически не остается, список адресов свободных блоков целиком помещается в суперблоке.
Индексные дескрипторы
Индексный дескриптор, или inode, содержит информацию о файле, необходимую для обработки данных, т.е.
Индексный дескриптор не содержит:
□ имени файла, которое содержится в блоках хранения данных каталога;
□ содержимого файла, которое размещено в блоках хранения данных.
При открытии файла ядро помещает копию дискового inode в память в таблицу struct dinode
) приведена на рис. 4.2. Основные поля дискового inode следующие:
di_mode | Тип файла, дополнительные атрибуты выполнения и права доступа. |
di_nlinks | Число ссылок на файл, т.е. количество имен, которые имеет файл в файловой системе. |
di_uid , di_gid | Идентификаторы владельца-пользователя и владельца- группы. |
di_size | Размер файла в байтах. Для специальных файлов это поле содержит старший и младший номера устройства. |
di_atime | Время последнего доступа к файлу. |
di_mtime | Время последней модификации. |
di_ctime | Время последней модификации inode (кроме модификации полей di_atime, di_mtime). |
di_addr[13] | Массив адресов дисковых блоков хранения данных. |
Рис. 4.2. Структура дискового inode
Поле di_mode
хранит несколько атрибутов файла: тип файла (IFREG
для обычных файлов, IFDIR
для каталогов, IFBLK
или IFCHR
для специальных файлов блочных и символьных устройств соответственно); права доступа к файлу для трех классов пользователей и дополнительные атрибуты выполнения (SUID, SGID и sticky bit), значения этих атрибутов были подробно рассмотрены в главе 1.
Заметим, что в индексном дескрипторе отсутствует информация о времени создания файла. Вместо этого inode хранит три значения времени: время последнего доступа (di_atime
), время последней модификации содержимого файла (di_mtime
) и время последней модификации метаданных файла (di_ctime
). В последнем случае не учитываются модификации полей di_atime
и di_mtime
. Таким образом, di_ctime
изменяется, когда изменяется размер файла, владелец, группа, или число связей.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии