Читаем Архитектура операционной системы UNIX полностью

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

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

Рисунок 4.6. Блоки прямой и косвенной адресации в индексе

10 блоков прямой адресации по 1 Кбайту каждый = 10 Кбайт

1 блок косвенной адресации с 256 блоками прямой адресации = 256 Кбайт

1 блок двойной косвенной адресации с 256 блоками косвенной адресации = 64 Мбайта

1 блок тройной косвенной адресации с 256 блоками двойной косвенной адресации = 16 Гбайт

Рисунок 4.7. Объем файла в байтах при размере блока 1 Кбайт

алгоритм bmap /* отображение адреса смещения в байтах от начала логического файла на адрес блока в файловой системе */

входная информация:

 (1) индекс

 (2) смещение в байтах

выходная информация:

 (1) номер блока в файловой системе

 (2) смещение в байтах внутри блока

 (3) число байт ввода-вывода в блок

 (4) номер блока с продвижением

{

 вычислить номер логического блока в файле исходя из заданного смещения в байтах;

 вычислить номер начального байта в блоке для ввода-вывода; /* выходная информация 2 */

 вычислить количество байт для копирования пользователю; /* выходная информация 3 */

 проверить возможность чтения с продвижением, пометить индекс; /* выходная информация 4 */

 определить уровень косвенности;

 do (пока уровень косвенности другой) {

  определить указатель в индексе или блок косвенной адресации исходя из номера логического блока в файле;

  получить номер дискового блока из индекса или из блока косвенной адресации;

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

  if (число уровней косвенности исчерпано) return (номер блока);

  считать дисковый блок косвенной адресации (алгоритм bread);

  установить номер логического блока в файле исходя из уровня косвенности;

 }

}

Рисунок 4.8. Преобразование адреса смещения в номер блока в файловой системе

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT

Все жанры