next up previous contents index
Next: Каналы Up: Файловая система Previous: Журналируемые файловые системы   Contents   Index

Системные операции для работы с файловой системой

Здесь рассматриваются системные функции, обеспечивающие обращение к существующим файлам, такие как open, read, write, lseek и close, затем функции создания новых файлов, а именно, creat и mknod, и, наконец, функции для работы с индексом или для передвижения по файловой системе: chdir, chroot, chown, stat и fstat. Исследуются более сложные системные функции: pipe и dup - имеют важное значение для реализации каналов в SHELL; mount и umount расширяют видимое для пользователя дерево файловых систем; link и unlink изменяют иерархическую структуру файловой системы. Затем дается представление об абстракциях, связанных с файловой системой, в отношении поддержки различных файловых систем, подчиняющихся стандартным интерфейсам. Ниже приводятся три структуры данных ядра: таблица файлов, в которой каждая запись связана с одним из открытых в системе файлов, таблица пользовательских дескрипторов файлов, в которой каждая запись связана с файловым дескриптором, известным процессу, и таблица монтирования, в которой содержится информация по каждой активной файловой системе.

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

+------+--------------+--------+-------+-------+---------+-------+ | Воз- | Используют | Назна- | Рабо- | Ввод- | Работа- | Управ-| | вра- | алгоритм | чают | тают | вывод | ют со | ление | | щают | namei | индек- | с ат- | из | структу-| де- | | деск-| | сы | рибу- | файла | рой фай-| ревь- | | рип- | | | тами | | ловых | ями | | торы | | | файла | | систем | | | файла| | | | | | | +------+--------------+--------+-------+-------+---------+-------+ | open | open stat | | | | | | | creat| creat link | creat | chown | read | | | | dup | chdir unlink| mknod | chmod | write | mount | chdir | | pipe | chroot mknod | link | stat | lseek | umount | chown | | close| chown mount | unlink | | | | | | | chmod umount| | | | | | +------+--------------+--------+-------+-------+---------+-------+ +---+--+--------------+--------+-------+-------+---------+----+--+ | Алгоритмы работы с файловой системой на нижнем уровне | +-------------+------------------+------------------------+ | namei | | | +-------------+ ialloc ifree | alloc free bmap | | iget iput | | | +-------------+------------------+------------------------+ +---------------------------------------------------------+ | алгоритмы работы с буферами | +---------------------------------------------------------+ | getblk brelse bread breada bwrite | +---------------------------------------------------------+

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

  1. Cистемные функции, возвращающие дескрипторы файлов для использования другими системными функциями.

  2. Cистемные функции, использующие алгоритм namei для анализа имени пути поиска.

  3. Cистемные функции, назначающие и освобождающие индекс с использованием алгоритмов ialloc и ifree.

  4. Cистемные функции, устанавливающие или изменяющие атрибуты файла.

  5. Cистемные функции, позволяющие процессу производить ввод-вывод с использованием алгоритмов alloc, free и алгоритмов выделения буфера.

  6. Cистемные функции, изменяющие структуру файловой системы.

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

Вызов системной функции open (открыть файл) - это первый шаг, который должен сделать процесс, чтобы обратиться к данным в файле.

Для чтения из файла используется функция read (читать), а для записи в файл write (писать).

В первой версии системы, разработанной Томпсоном и Ричи, отсутствовал внутренний механизм, с помощью которого процессу мог бы быть обеспечен исключительный доступ к файлу. Механизм захвата был признан излишним, поскольку ``мы не имеем дела с большими базами данных, состоящими из одного файла, которые поддерживаются независимыми процессами''. Для того, чтобы повысить привлекательность системы UNIX для коммерческих пользователей, работающих с базами данных, в версию V системы ныне включены механизмы захвата файла и записи. Захват файла - это средство, позволяющее запретить другим процессам производить чтение или запись любой части файла, а захват записи - это средство, позволяющее запретить другим процессам производить ввод-вывод указанных записей (частей файла между указанными смещениями).

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

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

Системная функция open дает процессу доступ к существующему файлу, а системная функция creat создает в системе новый файл.

Системная функция mknod создает в системе специальные файлы, в число которых включаются поименованные каналы, файлы устройств и каталоги.

Смена владельца или режима (прав) доступа к файлу является операцией, производимой над индексом, а не над файлом. Это делается операциями chown и chmod, соответственно.

Системные функции stat и fstat позволяют процессам запрашивать информацию о статусе файла: типе файла, владельце файла, правах доступа, размере файла, числе связей, номере индекса и времени доступа к файлу.

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

Системная функция mount (монтировать) связывает файловую систему из указанного раздела на диске с существующей иерархией файловых систем, а функция umount (демонтировать) выключает файловую систему из иерархии. Функция mount, таким образом, дает возможность обращаться к данным в дисковом разделе как к файловой системе, а не как к последовательности дисковых блоков.

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

Системная функция unlink удаляет из каталога точку входа для файла.

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



Alex Otwagin 2002-12-16