Спонсор: Microsoft
Санкт-Петербургский государственный университет
Опубликован: 13.11.2010 | Доступ: свободный | Студентов: 6726 / 1527 | Оценка: 4.64 / 4.23 | Длительность: 45:08:00
ISBN: 978-5-9963-0495-0
Лекция 19:

Системы файлов

Логическая организация директорий

Структуру директорий рекомендуется организовывать логически, т .е. в соответствии с логикой программы, хранения и использования данных. У такой организации директорий – две основные цели: эффективность (обеспечить быстрый поиск файла) и именование (обеспечить удобство для пользователей, например, в случае, если несколько пользователей называют два разных файла в своих директориях одним и тем же именем, в соответствии с его назначением). Директории позволяют осуществить логическую группировку файлов по их назначению, свойствам и т.д. (например, почта, документы, Java-код, игры).

В связи с этим, одноуровневая организация директорий для всех пользователей не рекомендуется, так как могут возникнуть проблемы с удобной группировкой файлов и с совпадением имен. Одноуровневая структура директорий изображена на рис. 19.4.

Одноуровневая организация директорий.

увеличить изображение
Рис. 19.4. Одноуровневая организация директорий.

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

Двухуровневая организация директорий.

увеличить изображение
Рис. 19.5. Двухуровневая организация директорий.

Однако данная организация не поддерживает возможность дальнейшей группировки файлов.

Наиболее общей и удобной, рекомендуемой читателям, является древовидная структура директорий ( рис. 19.6).

Древовидная структура директорий.

увеличить изображение
Рис. 19.6. Древовидная структура директорий.

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

Различаются абсолютный и относительный путь. Абсолютный путь указывает полный путь доступа к файлу, начиная от логического имени раздела, либо от корневой системной директории, например (в системе UNIX): /usr/bin/sh путь доступа к файлу командного процессора Bourne Shell.Относительный путь указывает путь доступа к файлу относительно некоторой текущей директории. В том же примере, если считать, что текущая директория - /usr, то относительный путь к тому же файлу имеет вид: bin/sh. Недостаток абсолютных путей в том, что на разных компьютерах (например, заказчика и исполнителя) абсолютные пути к одному и тому же файлу или к одной и той же директории могут оказаться различными. В результате возникают ошибки при сборке проекта, его архивировании, разархивировании и др. Поэтому рекомендуется в системных файлах, например, в make-файлах для сборки проектов, указывать, по возможности, относительные пути, либо обозначать рабочую директорию один раз с помощью некоторого макроса и использовать это обозначение в путях, например: ${SYSDIR}/sh, где макрос SYSDIR задает конкретный путь к системной директории на данном компьютере.

Пример древовидной структуры директорий приведен на рис. 19.6.

Примеры операций над директориями (в обозначениях рис. 19.6):

cd /spell/mail/prog – установка текущей директории.

type list – вывод на консоль содержимого одного из ее файлов.

Если текущая директория /mail, то поддиректория count создается командой:

mkdir count

Структура директорий в виде ациклического графа ( рис. 19.7) возникает вследствие использования различными пользователями одних и тех же файлов и директорий.

Структура директорий в виде ациклического графа.

увеличить изображение
Рис. 19.7. Структура директорий в виде ациклического графа.

При этом может возникнуть ситуация, когда у одного и того же файла (директории) два различных имени ( aliasing ).

В рис. 19.7, если в директории dict удалить ссылку list, то образуется подвисшая ссылка (dangling pointer).Возможные решения данной проблемы:

  • хранение обратных ссылок из файла на директорию (с целью своевременного удаления всех ссылок);
  • хранение cчетчиков ссылок на файл; при обнулении счетчика ссылок на файл последний считается не используемым, и его память перераспределяется.

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

Структура директорий в виде произвольного графа.

увеличить изображение
Рис. 19.8. Структура директорий в виде произвольного графа.

Циклические ссылки на файлы могут возникнуть из-за ошибок в программе, связанной с обработкой файлов. Если при этом она тестируется и многократно запускается, то это может привести к переполнению внешней памяти на диске (или в разделе диска), что и произошло у автора при отладке компилятора с языка CLU на МВК "Эльбрус" в 1980-х гг. Возможные решения проблемы циклических ссылок:

  • Допускать только ссылки на файлы, а не на поддиректории; данное решение слишком ограничительно.
  • Выполнять сборку мусора во внешней памяти; однако традиционные алгоритмы сборки мусора не делают проверок на наличие циклов, поэтому в цепочке циклически ссылающихся друг на друга файлов все они будут считаться используемыми.
  • Каждый раз при создании новой ссылки запускать алгоритм проверки отсутствия циклов – по-видимому, слишком "дорогое" решение.
Гульжан Мурсакимова
Гульжан Мурсакимова
Василий Четвертаков
Василий Четвертаков