Хрестоматия по программированию на Си в Unix



Системные вызовы и взаимодействие с UNIX. Хрестоматия по программированию на Си в Unix - стр. 5


запрошено:______________XXXXXXXXXX______________

стало: ___________###__________####__________

Файлы устройств.

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

корневой каталог. Файлы в каждой FS имеют свои собственные I-узлы и собственную их нумерацию с 1. В начале каждой FS зарезервированы:

  • блок для загрузчика - программы, вызываемой аппаратно при включении машины (загрузчик записывает с диска в память машины программу /boot, которая в свою очередь загружает в память ядро /unix);
  • суперблок - блок заголовка файловой системы, хранящий размер файловой системы (в блоках), размер блока (512, 1024, ...), количество I-узлов, начало списка свободных блоков, и другие сведения об FS;
  • некоторая непрерывная область диска для хранения I-узлов - "I-файл".

Файловые системы объединяются в единую древовидную иерархию операцией монтирования подключения корня файловой системы к какому-то из каталогов-"листьев" дерева другой FS.

Файлы в объединенной иерархии адресуются при помощи двух способов:

  • имен, задающих путь в дереве каталогов:

    /usr/abs/bin/hackIt

    bin/hackIt

    ./../../bin/vi

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

  • внутренних адресов, используемых программами ядра и некоторыми системными программами.

Поскольку в каждой FS имеется собственная нумерация I-узлов, то файл в объединенной иерархии должен адресоваться ДВУМЯ параметрами:

  • номером (кодом) устройства, содержащего файловую систему, в которой находится искомый файл: dev_t i_dev;
  • номером I-узла файла в этой файловой системе: ino_t i_number;

Преобразование имени файла в объединенной файловой иерархии в такую адресную пару

выполняет в ядре уже упоминавшаяся выше функция namei (при помощи просмотра каталогов):

struct inode *ip = namei(...);




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