| |
Здесь рассматриваются системные функции, обеспечивающие обращение к
существующим файлам, такие как 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 | +---------------------------------------------------------+
Системные функции классифицируются на несколько категорий, хотя некоторые из функций присутствуют более, чем в одной категории:
namei
для анализа
имени пути поиска.
ialloc
и ifree
.
alloc
, free
и алгоритмов
выделения буфера.
Вызов системной функции open
(открыть файл) - это первый шаг,
который должен сделать процесс, чтобы обратиться к данным в файле.
Для чтения из файла используется функция read
(читать), а для
записи в файл write
(писать).
В первой версии системы, разработанной Томпсоном и Ричи, отсутствовал внутренний механизм, с помощью которого процессу мог бы быть обеспечен исключительный доступ к файлу. Механизм захвата был признан излишним, поскольку ``мы не имеем дела с большими базами данных, состоящими из одного файла, которые поддерживаются независимыми процессами''. Для того, чтобы повысить привлекательность системы UNIX для коммерческих пользователей, работающих с базами данных, в версию V системы ныне включены механизмы захвата файла и записи. Захват файла - это средство, позволяющее запретить другим процессам производить чтение или запись любой части файла, а захват записи - это средство, позволяющее запретить другим процессам производить ввод-вывод указанных записей (частей файла между указанными смещениями).
Обычное использование системных функций read
и write
обеспечивает последовательный доступ к файлу, однако процессы могут
использовать вызов системной функции lseek
для указания места в
файле, где будет производиться ввод-вывод, и осуществления произвольного
доступа к файлу.
Процесс закрывает открытый файл, когда процессу больше не нужно обращаться
к нему с помощью функции close
.
Системная функция open
дает процессу доступ к существующему файлу,
а системная функция creat
создает в системе новый файл.
Системная функция mknod
создает в системе специальные файлы, в
число которых включаются поименованные каналы, файлы устройств и каталоги.
Смена владельца или режима (прав) доступа к файлу является операцией,
производимой над индексом, а не над файлом. Это делается операциями
chown
и chmod
, соответственно.
Системные функции stat
и fstat
позволяют процессам
запрашивать информацию о статусе файла: типе файла, владельце файла,
правах доступа, размере файла, числе связей, номере индекса и времени
доступа к файлу.
Системная функция dup
копирует дескриптор файла в первое свободное
место в таблице пользовательских дескрипторов файла, возвращая новый
дескриптор пользователю. Она действует для всех типов файла.
Системная функция mount
(монтировать) связывает файловую систему из
указанного раздела на диске с существующей иерархией файловых систем, а
функция umount
(демонтировать) выключает файловую систему из
иерархии. Функция mount
, таким образом, дает возможность
обращаться к данным в дисковом разделе как к файловой системе, а не как к
последовательности дисковых блоков.
Системная функция link
связывает файл с новым именем в структуре
каталогов файловой системы, создавая для существующего индекса новую
запись в каталоге.
Системная функция unlink
удаляет из каталога точку входа для файла.
Наличие типа файловой системы дает ядру возможность поддерживать одновременно множество файловых систем, таких как сетевые файловые системы или даже файловые системы из других операционных систем. Процессы пользуются для обращения к файлам обычными функциями системы UNIX, а ядро устанавливает соответствие между общим набором файловых операций и операциями, специфичными для каждого типа файловой системы.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |