СТРУКТУРА ФАЙЛОВОЙ СИСТЕМЫ




Файловая система обычно размещается на дисках или других устройствах внешней памяти, имеющих блочную структуру. Каждый жесткий диск состоит из одной или нескольких логических частей, называемых разделами (partitions)/ Расположение и размер разделов определяются при форматировании диска. Каждый раздел содержит свою файловую систему. В разделе может располагаться только одна файловая система. Кроме блоков, сохраняющих каталоги и файлы, во внешней памяти поддерживается еще несколько служебных областей.

В мире UNIX существует несколько разных видов файловых систем со своей структурой внешней памяти. Наиболее известны традиционная (первая) файловая система UNIX System V (s5fs) и файловая система семейства UNIX BSD (ufs).

Файловые системы современных версий UNIX имеют весьма сложную архитектуру, различаются для разных версий, но все они используют базовые идеи, заложенные в s5fs и ufs.

 

Базовая файловая системаs5fs

состоит из четырех компонентов (рис. 1).

 
 

Рис. 1. Структура файловой системы s5fs

 

Кратко опишем суть и назначение каждой области диска.

· Boot-блок содержит программу раскрутки, которая служит для первоначального запуска ОС UNIX. В файловых системах ufs реально используется boot-блок только корневой файловой системы. В дополнительных файловых системах эта область присутствует, но не используется.

· Суперблок - это наиболее ответственная область файловой системы, содержащая информацию, которая необходима для работы с файловой системой в целом. Суперблок содержит список свободных блоков и свободные i-узлы (information nodes - информационные узлы).

· Массив индексных дескрипторов (ilist) содержит список i-узлов, соответствующих метаданным всех файлов данной файловой системы. Максимальное число файлов, которые могут быть созданы в файловой системе, определяется числом i-узлов в массиве ilist. В i-узле хранится информация, описывающая файл: режимы доступа к файлу, время создания и последней модификации, идентификатор пользователя и идентификатор группы создателя файла, описание блочной структуры файла, т.е. номера его блоков, и т.д. Ядро обращается к inode по индексу в массиве ilist. Один inode является корневым, через него обеспечивается доступ к структуре каталогов и файлов. По соглашению номер 1 не используется. Первым используемым номером всегда является 2.

· Блоки данных - в этой части файловой системы хранятся реальные данные файлов. Блоки данных занимают большую часть дискового раздела. Их число определяет максимальный суммарный объем всех файлов данной файловой системы. Размер блока данных определяется при форматировании файловой системы командой mkfs и может быть установлен в 512, 1024, 2048, 4096 или 8192 байтов.

 

Вообще-то каждый дисковый блок содержит либо некоторое число inode (индексов), либо данные файла. Т.е. несколько inode сгруппированы в одном блоке. Команда df -t может показать число имеющихся/свободных индексныхописателей (inode) и блоков.

 

Рассмотрим подробнее некоторые компоненты.

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

- тип Ф.С.

- размер Ф.С. в блоках

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

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

- число свободных inode

- флаги (модификации и режима монтирования)

- размер блока

- список номеров свободных inode

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

Хранение двух последних списков целиком в суперблоке непрактично, т.к. они м.б. очень большими. Поэтому для индексных дескрипторов хранится только часть списка. Когда в этом подсписке число свободных inode приближается к нулю, ядро вновь просматривает ilist и формирует новый список (у свободных inode поле di_mode = 0).

В отношении блоков такой подход неприменим. По содержимому блока нельзя судить, свободен он или занят. Поэтому необходимо хранить список номеров свободных блоков целиком. Но он может занимать много (!) блоков. Поэтому в суперблоке находится только один из них. А первый элемент этого блока указывает на блок, хранящий продолжение списка. Выделение свободных блоков происходит с конца списка суперблока. Как только в списке останется один элемент (первый), ядро его интерпретирует как указатель на блок, содержащий продолжение списка. Содержимое этого блока считывается в суперблок (а он же в памяти, как мы помним) и сам он становится свободным.

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

 

di_mode di_nlinks di_uid di_gid di_size di_atime di_mtime di_ctime
di_adr[0]
di_adr[1]
di_adr[2]
di_adr[3]
di_adr[4]
di_adr[5]
di_adr[6]
di_adr[7]
di_adr[8]
di_adr[9]
di_adr[10]
di_adr[11]
di_adr[12]
тип s s t r w x r w x r w x
SUID SGID user group other

 
 

 


Рис. 2

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

Блоки хранения данных в общем случае располагаются не последовательно. Каждый блок может использоваться только одним файлом (в других Ф.С. это может быть и не так). Достоинства этого способа заключается в эффективном использовании дискового пространства, но последний блок используется не полностью (в среднем наполовину). С течением времени файлы становятся сильно «разбросанными» по диску, что замедляет к ним доступ, уменьшает производительность обмена данными.

В inode информация о блоках, принадлежащих файлу, хранится в виде массива из 13 элементов. Первые 10 элементов адресуют непосредственно блоки, в которых хранятся данные файла. 11-й элемент содержит адрес блока, в которм находятся адреса блоков хранения данных. 12-й элемент указывает на блок, содержащий адреса блоков, а те, в свою очередь, указывают на блоки с данными файла. 13-й элемент массива используется для тройной косвенной адресации. Т.о. для маленьких файлов (до 10к при размере блока = 1024байта) используется прямая индексация, обеспечивающая максимальную производительность. Для файлов, размер которых не превышает 266к (10к+256 адресов*1024байта), достаточно простой косвенной адресации. При использовании тройной косвенной адресации можно обеспечить доступ к 16 777 215 блокам.

 





©2015-2017 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.

Обратная связь

ТОП 5 активных страниц!