Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS.DOC
Скачиваний:
18
Добавлен:
28.10.2018
Размер:
653.82 Кб
Скачать
    1. Индексные дескрипторы

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

При такой организации файлов в UNIX должен существовать список, который бы показывал, как конвертировать физическое представление файла в логическое. Это и есть список индексных дескрипторов, или, как их еще называют, i-узлов (i-nodes).

Каждый файл определяется индексным дескриптором, который содержит всю необходимую информацию о данном файле. Сюда записываются режим, тип файла, его длина в байтах, идентификаторы владельца и группы, дата последней модификации. Длина индексного дескриптора составляет 64 байта, и структуру его можно найти в файле /usr/include/sys/inode.h.

Наиболее важная часть i-узла (индексного дескриптора) есть список адресов на диске. Это 13 номеров блоков на диске, хранящихся в индексном дескрипторе. Первые 10 номеров задают первые 10 блоков файла. Длина блока, которую использует файловая система, может быть различна, но обыкновенно составляет 1024 байта в блоке. Если данные файла умещаются в первых 10 блоках или даже не занимают их все, то лишь несколько элементов списка содержат дисковые адреса. Так, если файлу достаточно четырех блоков, то первые 4 элемента списка включают соответствующие адреса, а остальные 9 заполнены нулями. В том случае, когда длина данных превышает 10 блоков (10240 байт), первые 10 элементов списка ссылаются на блоки файла, а 11-й - на блок, где размещается список следующих 256 номеров блоков. Этот блок называют косвенным. Это удобно для файлов, чей размер не превышает 10 + 256 (272384 байта). Если файл не умещается даже в 266 блоков, 12-й блок содержит адрес блока, включающего адреса 256 номеров блоков, каждый из которых, в свою очередь, содержит 256 номеров блоков, которые используются для нахождения содержания файла. Тринадцатый блок используется подобным же способом, только уже на следующем уровне. Таким образом, в 12-м блоке содержится адрес двойного косвенного блока, а в 13-м блоке - адрес тройного косвенного блока.

Таким образом, теоретически максимальный размер одного файла в UNIX составляет 16842762 блока, или 17246988288 байта! Однако, файловая система UNIX налагает ограничения на пользователей и предлагает создавать файлы размером не более 1 или 2 Мбайт, чтобы случайно не создать файл, который займет все блоки на диске.

Способ, по которому файловая система переводит имена файлов в индексные дескрипторы, достаточно прост. Каталог, в сущности, представляет собою файл, содержащий таблицу с информацией. Для каждого файла в каталоге существует строка в таблице, которая содержит имя файла и номер индексного дескриптора, который ассоциируется с файлом. Когда вводится команда cat proba.txt, чтобы получить содержимое файла на дисплее, файловая система начинает прежде всего искать в таблице текущего каталога строку с именем proba.txt, находит номер i-узла (индексного дескриптора), связанного с этим файлом, и после этого начинает извлекать блоки, которые содержат информацию, записанную в файл.

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

Таким образом, кеширование диска и хранение в памяти копии индексных дескрипторов активных файлов существенно повышают эффективность файловой системы. Однако есть одно существенное обстоятельство, которое крайне нежелательно для файловых систем UNIX, - это внезапное отключение питания. Если система работает без UPS (бесперебойный источник питания), это может привести к нежелательным последствиям, например к потере блоков, к некорректным индексным дескрипторам, каталогам и т. д.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]