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

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

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

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

 

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

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

 

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

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

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

 

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

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

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

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

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

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

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

mkdir count

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

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

 

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

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

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

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

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

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

 

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

· Допускать только ссылки на файлы, а не на поддиректории; данное решение слишком ограничительно.

· Выполнять сборку мусора во внешней памяти; однако традиционные алгоритмы сборки мусора не делают проверок на наличие циклов, поэтому в цепочке циклически ссылающихся друг на друга файлов все они будут считаться используемыми.

· Каждый раз при создании новой ссылки запускать алгоритм проверки отсутствия циклов – по-видимому, слишком "дорогое" решение.