Структура ФС базовых UNIX-подобных ОС

· Классический вариант: S5FS

Суперблок Массив индексных дескрипторов ilist Блоки хранения данных

 

В суперблоке хранятся:

stype – тип ФС

s_fsize – размер ФС

s_isize – размер массива индексных дескрипторов

s_tfree – число свободных блоков

s_tinode – число свободных индекс блоков Inode

s_fmod – флаги модификации

s_fronly – флаг режима

размер логического блока

размер в логических блоках (512, 1024, …)

список используемых/свободных inode

список адресов свободных блоков

Inode (индексные дескрипторы) – метаданные файла. Хранят информацию о файле, необходимую для обработки данных.

Массив индексных дескрипторов – содержит информацию о файле необходимую для обработки (при открытии файла ядро переписывает структуру данных в ОЗУ и размещает в таблице in_core inode (в ОЗУ)) dinode -> in_core inode (в ОЗУ)

Структура dinode: включает тип файла, доп атрибуты

di_mode – тип файла, доп атрибуты

di_nlinks – число ссылок на файл

di_uid, di_gid – id пользователя и группы

di_size – размер файла в байтах

di_atime, di_ctime – время последнего доступа/модификации

di_mtime – время последней модификации/доступа

di_addr[13] - адрес

di_inod – указатель наличия флага SUID. Чтобы прочитать файл др. польз-ля, не имея права чтения.

IFREG, IFDIR, IFBLK/IFCHR – константы, с помощью которых задаётся тип файла.

di_addr[13] – массив адресов дисковых блоков хранящихся данных.

di_addr[0] - di_addr[9] – непосредственная адресация по номеру блока (10 блоков)

di_addr[10] – косвенная адресация – указатель на блок (блок блоков)

di_addr[11] – двукратная косвенная адресация и т.д.

 

· Система FFS = ufs

Суперблок Массив свободных блоков и inode ilist Блоки хранения данных   Суперблок

 

Отличия от S5FS: предусмотрено логическое деление дискового разделения на 1 или несколько групп цилиндров (последовательно расположенных цилиндров).

На группу цилиндров отводится фиксированное число inode. Управляющая информация размешается с различным смещением от начала групп цилиндров (на одной пластине информация о всех группах). Смещение = один сектор относительно предыдущей группы. Для соседних групп информация размещается на различных пластинах диска. Это повышение надежности т.к. потеря одного сектора, цилиндра или пластины не приводит к потере всех копий суперблока.

Производительность ФС зависит от:

- размеров блока информации

- алгоритмов размещения свободных блоков на носителях и inode

Чем больше блок, тем лучше для производительности (меньше обращений к диску), но при этом нерациональное использование дискового пространства (нужна постоянная дефрагментация). Существуют алгоритмы, использующие вес блока или его части (дефрагментация).

Max размер фрагмента – 0,5 размера блока. Min – min единица адресации диска (= сектор)

Алгоритмы размешения зависят от ФС. Правила выбора алгоритма для повышения производительности:

- файл размещается в блоках хранения данных, принадлежащих одной группе цилиндров там, где его метаданные (это снижает tобращения);

- все файлы каталога находятся в одной группе цилиндров (это повышает vпослед. доступа);

- следующий подкаталог находится в группе цилиндров, отличной от родительского каталога (для равномерного распределения по диску);

- последующие блоки размещаются исходя из оптимизации физического доступа к диску (с некоторым смещением друг относительно друга в зависимости от скорости перемещения головки винчестера).

КПД ФС нормальное функционирование при > 10 % свободного места на диске

Запись каталога – структура данных.

Структура каталога:

d_ino - номер inode (индекс в массиве ilist)

d_reclen - длина записи

d_namlen - длина имени

d_name[] - имя файла

Здесь имя файла дополняется нулями до четырёх байтов. При удалении имени запись не удаляется, а присоединяется к предыдущей записи. В предыдущей записи меняется reclen (на длину удаляемого файла). Удаление первой записи (d_ino = NULL) -> не ограничивается длина имени.