Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Unix.doc
Скачиваний:
4
Добавлен:
26.11.2019
Размер:
2.41 Mб
Скачать

2.7 Особенности размещения файловой системы sVfs

Файловая система s5fs занимает раздел диска и состоит из трех основных компонентов, как показано на рисунке 2.6.

Рисунок 2.6 - Структура файловой системы s5fs

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

Для свободных индексных дескрипторов храниться только часть списка. Когда число свободных дескрипторов приближается к 0, ядро просматривает список и вновь формирует список свободных дескрипторов.

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

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

Рисунок 2.7 – Связь списков свободных блоков

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

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

При открытии файла ядро помещает копию дискового inode в память в таблицу in-core inode, которая содержит несколько дополнительных полей. Структура дискового inode (struct dinode) приведена на рисунке 2.8. Основные поля дискового inode следующие:

Таблица 4 – Содержимое dinode sVfs

di_mode

Тип файла, дополнительные атрибуты выполнения и права доступа.

di_nlinks

Число ссылок на файл, т. е. количество имен, которые имеет файл в файловой системе.

di_uid, di_gid

Идентификаторы владельца-пользователя и владельца-группы.

di_size

Размер файла в байтах. Для специальных файлов это поле содержит старший и младший номера устройства.

di_atime

Время последнего доступа к файлу.

di_mtime

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

di_ctime

Время последней модификации inode (кроме модификации полей di_atime, di_mtime).

di_addr [13]

Массив адресов дисковых блоков хранения данных.

Поле di_mode хранит несколько атрибутов файла: тип файла (IFREG для обычных файлов, IFDIR для каталогов, IFBLK или IFCHR для специальных файлов блочных и символьных устройств соответственно); права доступа к файлу для трех классов пользователей и дополнительные атрибуты выполнения (SUID, SGID и sticky bit).

Заметим, что в индексном дескрипторе отсутствует информация о времени создания файла. Вместо этого inode хранит три значения времени: время последнего доступа (di_atime), время последней модификации содержимого файла (di_mtime) и время последней модификации метаданных файла (di_ctime). В последнем случае не учитываются модификации полей di_atime и di_mtime. Таким образом, di_ctime изменяется, когда изменяется размер файла, владелец, группа, или число связей.

Рисунок 2.8 Структура дискового inode sVfs.

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