организовать двустороннюю поочередную связь процесса-родителя и процесса-ребенка через pipe, используя для синхронизации сигналы sigusr1 и sigusr2. |
Организация файловой системы в UNIX. Работа с файлами и директориями. Понятие о memory mapped файлах
Операции над файлами и директориями
Хотя с точки зрения пользователя рассмотрение операций над файлами и директориями представляется достаточно простым и сводится к перечислению ряда системных вызовов и команд операционной системы, попытка систематического подхода к набору операций вызывает определенные затруднения. Далее речь пойдет в основном о регулярных файлах и файлах типа " директория ".
В лекции (лекция 11, раздел "Организация файлов и доступ к ним") речь шла о том, что существует два основных вида файлов, различающихся по методу доступа: файлы последовательного доступа и файлы прямого доступа. Если рассматривать файлы прямого и последовательного доступа как абстрактные типы данных, то они представляются как нечто, содержащее информацию, над которой можно совершать следующие операции:
- Для последовательного доступа: чтение очередной порции данных ( read ), запись очередной порции данных ( write ) и позиционирование на начале файла ( rewind ).
- Для прямого доступа: чтение очередной порции данных ( read ), запись очередной порции данных ( write ) и позиционирование на требуемой части данных ( seek ).
Работа с объектами этих абстрактных типов подразумевает наличие еще двух необходимых операций: создание нового объекта ( new ) и уничтожение существующего объекта ( free ).
Расширение математической модели файла за счет добавления к хранимой информации атрибутов, присущих файлу (права доступа, учетные данные), влечет за собой появление еще двух операций: прочитать атрибуты ( get attribute ) и установить их значения ( set attribute ).
Наделение файлов какой-либо внутренней структурой (как у файла типа " директория ") или наложение на набор файлов внешней логической структуры (объединение в ациклический направленный граф ) приводит к появлению других наборов операций, составляющих интерфейс работы с файлами, которые, тем не менее, будут являться комбинациями перечисленных выше базовых операций.
Для директории, например, такой набор операций, определяемый ее внутренним строением, может выглядеть так: операции new, free, set attribute и get attribute остаются без изменений, а операции read, write и rewind ( seek ) заменяются более высокоуровневыми:
- прочитать запись, соответствующую имени файла, – get record ;
- добавить новую запись – add record ;
- удалить запись, соответствующую имени файла, – delete record.
Неполный набор операций над файлами, связанный с их логическим объединением в структуру директорий, будет выглядеть следующим образом:
- Операции для работы с атрибутами файлов – get attribute, set attribute.
- Операции для работы с содержимым файлов – read, write, rewind(seek) для регулярных файлов и get record, add record, delete record для директорий.
- Операция создания регулярного файла в некоторой директории (создание нового узла графа и добавление в граф нового именованного ребра, ведущего в этот узел из некоторого узла, соответствующего директории ) – create. Эту операцию можно рассматривать как суперпозицию двух операций: базовой операции new для регулярного файла и add record для соответствующей директории.
- Операция создания поддиректории в некоторой директории – make directory. Эта операция отличается от предыдущей операции create занесением в файл новой директории информации о файлах с именами " ." и " ..", т.е. по сути дела она есть суперпозиция операции create и двух операций add record.
- Операция создания файла типа "связь" – symbolic link.
- Операция создания файла типа "FIFO" – make FIFO.
- Операция добавления к графу нового именованного ребра, ведущего от узла, соответствующего директории, к узлу, соответствующему любому другому типу файла, – link. Это просто add record с некоторыми ограничениями.
- Операция удаления файла, не являющегося директорией или "связью" (удаление именованного ребра из графа, ведущего к терминальной вершине с одновременным удалением этой вершины, если к ней не ведут другие именованные ребра), – unlink.
- Операция удаления файла типа "связь" (удаление именованного ребра, ведущего к узлу, соответствующему файлу типа "связь", с одновременным удалением этого узла и выходящего из него неименованного ребра, если к этому узлу не ведут другие именованные ребра), – unlink link.
- Операция рекурсивного удаления директории со всеми входящими в нее файлами и поддиректориями – remove directory.
- Операция переименования файла (ребра графа ) – rename.
- Операция перемещения файла из одной директории в другую (перемещается точка выхода именованного ребра, которое ведет к узлу, соответствующему данному файлу) – move.
Возможны и другие подобные операции.
Способ реализации файловой системы в реальной операционной системе также может добавлять новые операции. Если часть информации файловой системы или отдельного файла кэшируется в адресном пространстве ядра, то появляются операции синхронизации данных в кэше и на диске для всей системы в целом ( sync ) и для отдельного файла ( sync file ).
Естественно, что все перечисленные операции могут быть выполнены процессом только при наличии у него определенных полномочий (прав доступа и т.д.). Для выполнения операций над файлами и директориями операционная система предоставляет процессам интерфейс в виде системных вызовов, библиотечных функций и команд операционной системы. Часть этих системных вызовов, функций и команд мы рассмотрим в следующих разделах.