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

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

Директории

Директория (directory, folder) - узел, содержащий информацию о файлах – их имена и ссылки на файлы и на другие директории во внешней памяти. Таким образом, возможна организация иерархии директорий или их более сложных взаимосвязей, вплоть до произвольных графов. Как структура директорий, так и файлы хранятся на диске. С помощью директорий поддерживается именование файлов с помощью путей (paths) – многослоговых имен, состоящих из имени корневой директории (или логического диска) и последовательности имен директорий последующих уровней. Например, в системе Windows c:\doc\plan.txt путь доступа к файлу, задающий его расположение – на логическом диске C:,в директории doc (документы), и имя файлаplan.txt.Имя содержит расширение, указывающее на тип файла.

Резервное копирование (back-up) файлов и директорий выполняется на специальные предназначенные для этого носители – например, на ленту (стример), flash-память, внешний переносной жесткий диск, компакт-диск (CD, DVD). Настоятельно рекомендуется регулярно копировать на внешний носитель (или на несколько внешних носителей) наиболее важные директории.

Особенности системы файлов в "Эльбрусе"

Говоря о структуре директорий и именовании файлов, нельзя не упомянуть столь экзотическую систему файлов, как в МВК "Эльбрус". Это будет полезно читателям, чтобы сравнить и лучше оценить разнообразие подходов к системам файлов.

Основные концепции системы файлов МВК "Эльбрус" – это файлы, контейнеры, справочники. Понятие контейнера в "Эльбрусе" близко к современным понятиям тома и контейнера в системах Windows и Solaris: контейнер – это хранилище файлов на одном или нескольких дисках. Понятие справочника близко к понятию директории в традиционных файловых системах.

Файл в "Эльбрусе" состоит из заголовка и памяти. В заголовке хранятся атрибуты файла, число которых – порядка 100 (!).

Существенным отличием файловой системы "Эльбруса" является то, что возможно создание файла и управление им без присваивания ему имени, т.е. без отображения его в справочниках (директориях). Такой временный файл создается в программе, ссылка на файл хранится в глобальной или локальной переменной, и по окончании выполнения программы файл уничтожается, если на него не была сохранена ссылка в справочнике на диске. Кроме того, файлы могут ссылаться друг на друга (по прямой "физической" файловой ссылке, а не c помощью символьных путей) через справочники внешних ссылок (СВС).СВС имеется у каждого файла. Его элементы адресуются по номерам, а не по именам. Типичный пример: файл объектного кода (ФОК) ссылается через свой СВС на файл дополнения к файлу объектного кода (ДФОК),содержащий в унифицированном виде таблицы именованных сущностей, определенных в программе и ее процедурах. Выражаясь современным языком, ДФОК содержит метаданные. Эта взаимосвязь используется при диагностике ошибок времени выполнения и для многих других целей.

К недостаткам файловой системы "Эльбруса" можно отнести усложненную структуру файлов, большое число атрибутов, зависимость логической структуры файла и набора операций над ним от типа внешнего устройства, на котором он расположен. По сравнению с системой файлов "Эльбруса", система файлов в UNIX гораздо проще и удобнее, но нисколько не уступает по функциональности.

Типичная организация файловой системы изображена на рис. 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. Многие файлы создаются в текущей директории неявно, в результате компиляции или каких-либо других системных операций. Например, если в текущей директории имеется файл исходного кода на языке Javaprogram.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 и выводит на консоль полный путь доступа к каждому найденному файлу с таким именем.

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

Гульжан Мурсакимова
Гульжан Мурсакимова
Василий Четвертаков
Василий Четвертаков