Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Операции над директориями

Типичная организация файловой системы изображена на рис. 19.3.

Рис. 19.3. Организация файловой системы.

Файловые системы организуются на дисках. Каждый диск поделен на разделы (partitions) – смежные области дисковой памяти, имеющие свои логические имена (обычно в виде первых букв латинского алфавита). Однако возможна и организация раздела, занимающего несколько дисков. Для деления диска на разделы рекомендуем утилиту Partition Magic. В разделах хранятся директории и файлы. Каждый раздел имеет корневую директорию, у которой при необходимости могут быть организованы поддиректории, на которые она ссылается.

Следует иметь в виду, что в разных разделах могут быть установлены различные операционные системы, использующие разное форматирование и разные файловые системы для своей работы. Даже если на компьютере установлена только одна ОС, различные разделы могут использовать различные типы файловых систем, например, в Windows раздел A может использовать файловую систему FAT32, а раздел B – файловую систему NTFS. В разделе C может быть инсталирована ОС Linux, использующая свою собственную файловую систему Ext2Fs.

Над директориями определен ряд операций, которые аналогичны друг другу во всех операционных системах, хотя по именам могут отличаться. Операции над директориями доступны как из командного языка, так и через специализированный API. В своем изложении мы будем использовать команды для работы с файлами. Аналогичные действия могут быть выполнены с помощью GUI через графическую оболочку ОС.

Установка текущей (рабочей) директории. При работе с директориями основным является понятие текущей (рабочей) директории, которая устанавливается в командных языках командой cd (change directory), например, если в данный момент текущей является корневая директория диска C:, то команда:

cd doc

установит в качестве текущей поддиректорию doc. Текущая директория в командном языке обозначается точкой (.).

Поиск файла. Как уже отмечалось, поиск файла выполняется с помощью символьного пути (path), образованного последовательностью имен директорий, например, C:\doc\plan.txt. Если требуется найти файл в текущей директории, указывается его имя. Например, в Windows команда:

type plan.txt

выводит содержимое файла plan.txt в текущей директории (C:\doc) на консоль.

Создание файла. Как правило, создание файла в текущей директории выполняется программой, которая в дальнейшем будет работать с этим файлом – например, в Windows – текстовыми редакторами notepad, wordpad, Microsoft Word. Многие файлы создаются в текущей директории неявно, в результате компиляции или каких-либо других системных операций. Например, если в текущей директории имеется файл исходного кода на языке Java – program.java, то в результате его компиляции:

javac program.java

Java-компилятор создает в текущей директории class-файл, содержащий двоичный байт-код Java-программы – файл program.class.

Многие программы создают в текущей директории временные файлы, подчас с весьма экзотическими именами, - например, Microsoft Word в результате открытия файла с документом. По окончании работы программы временные файлы удаляются.

Создание директории. В рабочей директории можно создать другую директорию. На командном языке это делается командой mkdir, например:

mkdir tmp.

Удаление файла из текущей директории выполняется специальной командой - del (в Windows) или rm (в UNIX). Удаление уничтожает только ссылку на файл из директории, но не сам файл. Если на него есть другие ссылки, он сохраняется. Типичной ошибкой пользователей является поспешное неверное удаление файла. Если оно выполнено в системе Windows, то, как правило, файл можно восстановить специальными утилитами (кроме его имени), так как, например, в системе FAT файл представляется как список смежных областей. Если же удаление файла выполнено в UNIX, то, к сожалению, файл восстановлению не подлежит, так как в UNIX используется представление в виде индексных блоков, содержащих ссылки на все блоки данных файла.

Вывод содержимого директории. Команда dir (в Windows) и ls (в UNIX) выводит содержимое директории на консоль. С помощью перенаправления стандартного вывода содержимое директории можно сохранить в текстовом файле, например:

ls doc > doc_list.txt

Переименование файла. Имя файла в директории можно изменить, если новое имя уже не встречается в директории. В UNIX это делается командой mv, например:

mv old_file.txt new_file.txt

Создание символической ссылки. Из элемента директории можно создать символическую ссылку на другую директорию. Это может оказаться необходимым, если требуется смоделировать структуру директорий, созданную на другом компьютере, например, на компьютере заказчика, так как системные файлы в программном продукте, например, make-файлы для его сборки, ссылаются на определенные пути доступа к директориям. В UNIX символическая ссылка создается командой ln, например:

cd /my_dir

ln –s /doc doc

Создается символическая ссылка из директории my_dir на директорию /doc, под тем же именем doc. Таким образом, пути /doc и /my_dir/doc указывают на одну и ту же директорию. В UNIX такой прием используется очень часто.

Обход файловой системы. Более сложная операция осуществляет обход дерева директорий, начиная с заданной корневой, например, с целью поиска заданного файла. Например, в системе UNIX команда:

find. –name plan.txt –print

выполняет поиск в текущей директории и всех ее поддиректориях файла plan.txt и выводит на консоль полный путь доступа к каждому найденному файлу с таким именем.

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

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

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

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

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

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

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

 




Поделиться с друзьями:


Дата добавления: 2013-12-13; Просмотров: 953; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.023 сек.