Организация UNIX-систем и ОС Solaris




Таблица индексных дескрипторов: детали - часть 2


Структура, описывающая физическое размещение файла на диске, в UFS представляет собой последовательность из номеров блоков.

Если файл занимает более двенадцати блоков (т.е. его длина больше 12*8192 =98304 байт), то предпоследние три номера обозначают не номера блоков данных, а номера косвенных блоков (indirect blocks), в которых хранятся указатели на следующие блоки данных и, возможно, на следующие косвенные блоки.

Первые двенадцать номеров блоков содержат просто номера блоков данных. Тринадцатый номер - это номер косвенного блока первого уровня. В блоке первого уровня содержится до 2048 адресов блоков данных (речь идет о 8192-байтных блоках).

Четырнадцатый номер блока содержит номер косвенного блока второго уровня. Косвенный блок второго уровня содержит 2048 номеров косвенных блоков первого уровня, таким образом, через косвенный блок второго уровня адресуется до 20482 блоков данных.

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

Файл не может располагаться на разных разделах UNIX. Файл может быть фрагментирован, хотя файловая система построена так, чтобы свести фрагментацию к минимуму. Теоретически рекомендуется не заполнять файловую систему более, чем на 70%, чтобы не увеличивать фрагментацию при работе.

Максимальный размер файла может быть легко посчитан, так как мы знаем правила адресации блоков данных. Если размер блока равен 512 байт, то напрямую адресуемые из индексного дескриптора блоки в сумме дают размер 12 ? 8192 байта = 98304 байта.

Адресуемые через номер косвенного блока первого уровня - 2048 ? 8192 байта = 16777216 байт.

Адресуемые через номер косвенного блока второго уровня - 20482 ? 8192 байта = 34359738368 байт.

Адресуемые через номер косвенного блока третьего уровня - 20483 ? 8192 байта = 70368744177664 байта.

Вместе получается примерно 64 Тбайт. Однако Solaris 9, насколько об этом можно судить по доступным фактам, не поддерживает файлы размером более 1 Тбайт на данный момент.

Все современные системы UNIX используют 128-байтный индексный дескриптор, который вмещает больше информации и номер блока в нем занимает не 3 байта (как в прошлом), а 4. Поэтому адресовать можно весьма большие разделы.

28 байт в таком дескрипторе отводится под разные расширения, включая место для 32-разрядных идентификаторов владельца и группы файла, а также под 64-разрядные поля времен модификации. Введение 64-разрядных полей времени в UNIX вместо прежних 32-разрядных нужно для того, чтобы избежать "проблемы 2031 года", т.к. именно в этом году перестанет хватать 32 байт для представления времени в системах UNIX. Разработчики обоснованно полагают, что до тех пор все существующие системы UNIX будут заблаговременно переведены на 64-разрядную архитектуру.




Содержание  Назад  Вперед