Главная страница Межпроцессное взаимодействие (состязание) программа может использовать в дальнейшем относительные имена, поскольку точно знает, где она находится в дереве каталогов. У каждого процесса есть свой рабочий каталог, поэтому, когда процесс меняет свой рабочий каталог и потом завершает работу, это не влияет на работу других процессов, и в файловой системе не остается никаких следов от подобных изменений. Таким образом, процесс может без опасений менять свой рабочий каталог, когда это ему удобно. С другой стороны, если библиотечная процедура поменяет свой рабочий каталог и не восстановит его при возврате управления, программа, вызвавшая ее, может оказаться не в состоянии продолжать свою работу, так как ее предположения о текущем каталоге окажутся неверными. По этой причине библиотечные процедуры редко меняют рабочие каталоги, а когда все-таки меняют, обязательно восстанавливают старое имя перед возвратом. Большинство операционных систем, поддерживающих иерархические каталоги, имеют специальные элементы в каждом каталоге. Это . и .. , означающие текущий каталог и родительский каталог. Чтобы продемонстрировать, как это работает, обратимся к дереву каталогов системы UNIX, показанному на рис. 5.5. Корневой каталог /usr/jim Рис. 5.5. Дерево каталогов UNIX Для некоторого процесса каталог /usr/ast является рабочим. Чтобы переместиться вверх по дереву, он может использовать обозначение .. . Например, он может копировать файл /usr/lib/dictionary в свой собственный каталог при помощи команды ср . ./Hb/dictionary Две точки являются инструкцией системе подняться вверх (в каталог usr). После этого нужно открыть каталог lib и найти в нем файл dictionary. 5.2.3. Операции с каталогами Системные вызовы, управляющие каталогами, значительно менее схожи в различных системах, чем системные вызовы для работы с файлами. Чтобы дать представление о том, что они собой представляют и как работают, приведем следующий пример (взятый из UNIX). ♦ Create. Создать каталог. Только что созданный каталог пуст и не содержит других элементов, кроме . и .. , автоматически помещаемых в каталог операционной системой. ♦ Delete. Удалить каталог. Может быть удален только пустой каталог. Элементы . и .. файлами не являются и удалены быть не могут. ♦ Opendir. Открыть каталог. После этой операции каталог может быть прочитан. Например, для распечатки всех файлов каталога программа, создающая список, открывает каталог, чтобы прочитать имена всех содержащихся в нем файлов. Прежде чем каталог может быть прочитан, его следует открыть, подобно открытию и чтению файла. ♦ Closedir. Закрыть каталог. Когда каталог прочитан, его следует закрыть, чтобы освободить место во внутренней таблице системы. ♦ Readdir. Прочитать следующий элемент открытого каталога. В прежние времена было возможно читать каталоги с помощью обычного системного вызова read, но такой подход был небезопасен, так как требовал от программиста умения работать с внутренней структурой каталогов. Поэтому был создан отдельный системный вызов readdir, всегда возвращающий одну запись каталога стандартного формата независимо от используемой структуры каталогов. ♦ Rename. Переименование каталога. Во многих отношениях каталоги аналогичны файлам и могут переименовываться так же, как и файлы. ♦ Link. Связывание представляет собой технику, позволяющую файлу появляться сразу в нескольких каталогах. Этот системный вызов принимает в качестве входных параметров имя файла и имя пути и создает связь между ними. Таким образом, один и тот же файл может появляться сразу в нескольких каталогах. Подобная связь, увеличивающая на единицу счетчик f-узла файла (для учета количества каталогов со ссылками на этот файл), иногда называется жесткой связью. ♦ Unlink. Удаление ссылки на файл из каталога. Если файл присутствует только в одном каталоге, данный системный вызов удалит его из файловой системы. Если существует несколько ссылок на этот файл, будет удалена только указанная ссылка, а остальные останутся. Этот системный вызов применяется для удаления файла в операционной системе UNIX. В приведенном выше списке перечислены наиболее важные системные вызовы, но существует также множество других, например, для управления защитой информации. 5.3. Реализация файловой системы Теперь пора перейти от рассмотрения файловой системы с точки зрения пользователя к рассмотрению с точки зрения разработчика системы. Пользователей интересует то, как называются файлы, какие операции допустимы над ними, как выглядит дерево каталогов и тому подобные интерфейсные вопросы. Проектировщики файловых систем интересуются тем, как хранятся файлы и каталоги, как осуществляется управление дисковым пространством и как добиться надежной и эффективной работы файловой системы. В следующих разделах мы познакомимся с этим взглядом на файловую систему. 5.3.1. Реализация файлов Вероятно, наиболее важным моментом в реализации хранения файлов является учет соответствия блоков диска файлам. Для определения того, какой блок какому файлу принадлежит, в различных операционных системах применяются различные методы. Некоторые из них будут рассмотрены в данном разделе. Неразрывные файлы Простейшей схемой выделения файлам определенных блоков на диске является система, в которой файлы представляют собой наборы последовательных соседних блоков диска. Тогда на диске с блоками по 1 Кбайт файл размером в 50 Кбайт будет занимать 50 последовательных блоков. При 2-килобайтовых блоках такой файл займет 25 смежных блоков. У монолитных файлов есть два существенных преимущества. Во-первых, такую модель легко реализовать, так как системе, чтобы определить, какие блоки принадлежат тому или иному файлу, нужно следить всего лишь за двумя числами: номером первого блока файла и числом блоков в файле. Зная первый блок файла, любой другой его блок легко получить при помощи простой операции сложения. Во-вторых, при работе с неразрывными файлами производительность просто превосходна, так как весь файл может быть прочитан с диска за одну операцию. Требуется только одна операция позиционирования (для первого блока). После этого более не нужно искать цилиндры и тратить время на ожидание поворота диска, поэтому данные могут считываться с максимальной скоростью, на какую
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |