Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unix лекции / lection3.ppt
Скачиваний:
12
Добавлен:
20.04.2015
Размер:
358.91 Кб
Скачать

Внутреннее представление файлов

Алгоритм iget возвращает последний из идентифицированных индексов с возможностью считывания его с диска, используя буферный кеш, а алгоритм iput освобождает индекс. Алгоритм bmap устанавливает параметры ядра, связанные с обращением к файлу. Алгоритм namei преобразует составное имя пользовательского файла в имя индекса, используя алгоритмы iget, iput и bmap. Алгоритмы alloc и free выделяют и освобождают дисковые блоки для файлов, алгоритмы ialloc и ifree назначают и освобождают для файлов индексы.

Индекс на диске

Индексы существуют на диске в статической форме и ядро считывает их в память прежде, чем начать с ними работать.

Содержит:

идентификатор владельца файла

тип файла

права доступа к файлу

календарные сведения

число указателей на файл

таблица адресов блоков

размер файла

Пример индекса

Изменение содержимого файла автоматически вызывает коррекцию индекса, однако коррекция индекса еще не означает изменения содержимого файла.

Индекс в оперативной памяти

Копия индекса в памяти, кроме полей дискового индекса, включает в себя и следующие поля:

Состояние индекса в памяти (заблокирован, ждет снятия блокировки, отличается ли индекс или файл от своего дискового представления…)

Логический номер устройства ФС, содержащей файл

Номер индекса (номер в линейном массиве на диске)

Указатели на другие индексы в памяти (хеш- очереди)

Счетчик ссылок активных (открытых) экземпляров файла

Размещение файлов. Пример

Размещение непрерывного файла и фрагментация пространства

Недостатки непрерывного выделения свободного пространства:

1.Необходимо при увеличении файла копировать его в область, размер которой равен требуемому размеру.

2.Образовавшаяся «дыра» может быть занята файлом, размер которого не более 10 блоков – нужна дефрагментация

Размещение файлов

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

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

Если логический блок занимает 1 Кбайт, то файлу, состоящему из 100 Кбайт, понадобился бы индекс на 100 номеров блоков, а 1000 Кбайт – 1000.

Тогда в индексе либо размер под блоки должен варьироваться в зависимости от размера файла, либо необходимо установить жесткое ограничение на размер файла => необходимо использовать косвенную адресацию!

Адресация

Версия Unix V работает с 13 точками входа.

Блок, имеющий пометку "прямая адресация" на рисунке, содержит

номера дисковых блоков, в которых хранятся реальные данные.

Блок, имеющий пометку "одинарная косвенная адресация", указывает на

блок, содержащий список номеров блоков прямой адресации.

Максимальный размер файла

Предположим, что размер логического блока в файловой системе 1 Кбайт и что номер блока занимает 32 бита (4 байта). Тогда в блоке может храниться до 256 номеров блоков. Расчеты показывают, что максимальный размер файла превышает 16 Гбайт, если использовать в индексе 10 блоков прямой адресации и 1 одинарной косвенной адресации, 1 двойной косвенной адресации и 1 тройной косвенной адресации. В действительности ограничен 4 Гб.

алгоритм bmap

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

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

Адресация

350 000 байт

1)Прямая адресация – 10 блоков * 1024 байта = 10240 байт

2)Одинарная косвенная адресация – 1 блок памяти диска размером 1 Кб сможет разместить ссылки (по 4 байта) на 256 адресов, тогда 256 блоков *1024 байта=262144 байт.

3)262144+10240 = 272384 байт. Следовательно, искомый адрес находится далее 4)350000-272384=77616 байт – отступ от начала двойной косвенной адресации.

5)В двойной косвенной адресации 256 блоков одинарной адресации, каждый указывает на 256 прямой по 1 Кб => 77616байт /1024 байт=75,796..

6)Следовательно, искомый адрес находится в нулевом блоке одинарной косвенной адресации (т.к. с 0 нумеруем), 75 блоке прямой по смещению 816 для двойной косвенной адресации (77616-75*1024=816).

Дисковый блок занимает 1024 байта. Если процессу нужно обратиться к байту, имеющему смещение от начала файла, равное 9000, в результате вычислений ядро приходит к выводу, что этот байт располагается в блоке прямой адресации с номером 8 (начиная с 0). Затем ядро обращается к блоку с номером 367;

808-й байт в этом блоке (если вести отсчет с 0) и является 9000-м байтом в файле.

Соседние файлы в папке Unix лекции