Типы файлов – имена и расширения

      Комментарии к записи Типы файлов – имена и расширения отключены

Лекция 14. Системы файлов

План занятия:

1. Понятие файла.

2. Структура файла.

3. Атрибуты файла.

4. Операции над файлами.

5. Типы файлов – имена и расширения.

6. Методы доступа к файлам.

7. Директории.

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

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

10. Монтирование файловых систем.

11. Общий доступ к файлам.

12. Защита файлов.

13. Реализация файловых систем.

14. Структура файловой системы.

15. Системные структуры в памяти для управления файловой системой

Понятие файла

Файл (file) –это смежная область логического адресного пространства. Как правило, файлы хранятся во внешней памяти.

Немного о терминологии. Слово файл уженесколько десятков лет используется как русское – один из многочисленных примеров программистских неологизмов. Первоначально, когда около 50 лет назад появился данный английский термин, в русскоязычной литературе специалисты пытались ввести другую терминологию – слово fileпереводили как фонди даже тека(в смысле хранилище ). Однако исторически сложилось иное решение – слово файлстало русским. В английском языке слово fileимеет много других значений: например, подшитый в папку бумажный документи даже стадо(например, слонов) – в последнем случае, как можно предположить, размер файла может быть очень велик. У всех в памяти название легендарного сериалаX files(в вольном русском переводе – Секретные материалы).

Фирма IBM в документации по своей системе IBM 360 в 1960-х гг. использовала иной термин – набор данных (data set) –для обозначения этого же понятия, однако он не пережил операционную систему, в которой использовался.

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

Структура файла

В различных системах приняты различные точки зрения на структуру файлов. В ряде систем структура файла привязывалась к типу устройства, на котором он находится. В некоторых других системах структура файла была искусственно усложнена. Однако наиболее простую и унифицированную точку зрения из них предложили авторы системы UNIX: файл – это последовательность слов или байтов. Казалось бы, это очевидно, но преимущество данного подхода к файлам в том, что базовое представление файла и базовые операции над ним (read, write) не зависят от типа устройства. В свое время для программистов нашего поколения такой подход к файлам был откровением, после сложностей системы файлов IBM 360, а затем – Эльбруса. Можно сказать, что файлы в своем развитии прошли путь, аналогичный развитию архитектур компьютеров – сначала в сторону значительных усложнений, затем – упрощения и унификации.

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

Файлы простойструктуры состоят из последовательности записей (records) –элементарных единиц, в терминах которых выполняются операции обмена с файлом. Записи могут быть:

  • строками, если это текстовый файл ;
  • двоичными данными фиксированной длины ;
  • двоичными данными переменной длины.

Файлы сложной структурымогут быть самого разного вида, например:

  • отформатированным документомMicrosoft Office (такой файл, кроме собственно текста, содержит управляющие символы переключения шрифтов, цветов и т.д.);
  • загрузочным модулемреального или виртуального двоичного кода, например, portable executable (PE)-файлом для платформы .NET; class-файлом для платформы Java; подобные файлы состоят из нескольких секций, содержат внутренние ссылки и таблицы и т.д.

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

Файлы интерпретируются операционной системой или программами их обработки.

Атрибуты файла

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

Различаются следующие основные атрибуты файла:

Имя (Name)– название файла в символьной форме, воспринимаемое пользователем.

Тип (Type)– тип хранимой в файле информации. Отдельный атрибут типнеобходим для систем, которые поддерживают различные типы файлов. Например, в системе Эльбрус значением атрибута тип файлаявляется число, кодирующее тип: 0 – данные, 2 – код, 3 – текст и т.д. Однако более общепринятым подходом является подход, принятый в системах MS DOS, Windows, UNIX: тип файла кодируется расширением имени, например, book.txt– текстовый файл (.txt), содержащий текст книги.

Размещение (Location)– указатель на размещение файла на устройстве.

Размер (Size)– текущий размер файла.

Защита (Protection)– управляющая информация, задающая полномочия чтения, изменения и исполнения файла.

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

В ОС UNIX дату модификации файла можно изменить командой touch f, где f – имя файла. Touch дословно означает потрогать. Кроме изменения времени модификации, больше никаких действий над файлом не производится.

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

Информация о файлах хранится в структуре директорий ( или справочников- directories),иногда, например, в системе Windows, называемых также папками (folders)– структурами во внешней памяти, содержащими символьные имена файлов и ссылки на них. Важнейшая концепция директории подробно рассматривается далее в данной лекции.

Операции над файлами

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

  • Созданиефайла ( Create ). Создается заголовок файла; первоначально его содержимое (память) пусто.
  • Записьв файл ( Write ). Как правило, происходит записями (records)или блоками– более крупными логическими единицами информации, объединяющими несколько записей, с целью оптимизации операций ввода-вывода.
  • Чтениеиз файла ( Read ). Обычно также выполняется записями или блоками.
  • Поиск позиции внутри файла (позиционирование)( Seek ). Позиция задается номером записи или блока, либо специальными именами, обозначающими начало файла (позиция перед первой записью) иликонец файла (позиция после последней записи).
  • Удалениефайла ( Delete ). В зависимости от реализации системы файлов, ошибочное удаление файла может быть фатальным (UNIX) или исправимым (MS DOS).
  • Сокращениефайла ( Truncate ).
  • Открытиефайла ( Open ) – поиск файла в структуре директорий по его символьному имени (пути) и считывание его заголовка и одного или нескольких смежных блоков в буферав основной памяти.
  • Закрытиефайла ( Close ) – запись содержимого буферов в блоки файла; обновление файла во внешней памяти в соответствии с его текущим состоянием; освобождение всех структур в основной памяти, связанных с файлом.

Для выполнения операций обмена с файлом ( read, write ), как правило, файл необходимо открыть. Закрытие файла является обязанностью пользовательского процесса; однако, если он по какой-либо причине этого не выполняет, то закрывает все файлы, открытые процессом, операционная система после завершения или прекращения процесса.

Типы файлов – имена и расширения

В таблица 1 приведены некоторые наиболее употребительные типы файлов и соответствующие им расширения имен.

Таблица 1. Типы файлов – имена и расширения
тип файла расширение имени функциональность
исполняемый код (загрузочный модуль) exe, com, bin или отсутствует готовая к выполнению программа в бинарном машинном коде
обьектный модуль obj, о откомпилированная программа в бинарном коде, но не слинкованная
исходный код на языке программирования с, сс, Java, pas, asm, а исходный код на различных языках (Си, Паскаль и др.)
командный файл bat, sh файл с командами для командного интерпретатора
текст txt, doc текстовые данные, документы
документ для текстового процессора wp, tex, rtf, doc документ в формате какого-либо текстового процессора
библиотека lib, a, so, dll, mpeg, mov, rm библиотеки модулей для программирования
файл для печати или визуализации arc, zip, tar ASCII или бинарный файл в формате для печати или визуализации
архив arc, zip, tar несколько файлов, сгруппированных в один файл, для архивации или хранения
мультимедиа mpeg, mov, rm бинарный файл, содержащий аудио- или видео информацию

Смысл их ясен из приведенной таблицы. Следует заметить, что унифицированных расширений имен, принятых в различных ОС, очень мало – по-видимому, только .txt(текст) и расширения для исходных кодов на языках программирования, например, .c –Си, .pили . pas –Паскаль и др. Объектные модули называются по-разному (в Windows – .obj, в UNIX — .o ), библиотеки – тоже: статически линкуемые в Windows — .lib, в UNIX- .a ; динамически линкуемые в Windows — .dll, в UNIX – .so.Интересно отметить, что для исполняемого кода в Windows есть стандартное расширение — .exe,а в UNIX – нет, зато есть весьма экзотическое полное стандартное имя: a.out (assembler output).Унифицированы расширения имен для различных текстовых процессоров: . doc- Microsoft Word, .pdf– Adobe Acrobat и др.

Методы доступа к файлам

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

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

По-видимому, последовательный доступ используется чаще: именно так происходит ввод данных, вывод результатов на печать или на экран.

Типичные операции последовательного доступа:

read next

write next

reset – установка на начало файла для чтения

rewrite – установка на начало файла для записи.

Типичные операции прямого доступа:

read n

write n

position to n – позиционирование на запись с номером n

read next

write next

rewrite n, где n — относительный номер блока (записи).

Описанная трактовка последовательных файлов и операций над ними иллюстрируется рис. 1.

Рис. 1.Файл последовательного доступа.

При необходимости можно смоделировать операции последовательного доступа для файла с прямым доступом. Способ моделирования показан в таблица 2.

Таблица 2. Моделирование последовательного доступа для файла с прямым доступом
последовательный доступ реализация для файла с прямым доступом
reset cp=0;
read next read cp; cp=cp+1;
write next write cp; cp=cp+1;

Указатель на текущую позицию, характерный для последовательного доступа, для файла прямого доступа моделируется переменной cp, а операции последовательного доступа – операциями прямого доступа с указанием cpв качестве номера блока.

Для ускорения доступа к файлу большого объема может использоваться индексный файл, содержащий ссылки на записи основного ( относительного ) файла. рис.2 изображен пример основного файла, содержащего упорядоченные по фамилиям анкетные данные людей. Индексный файл для данного основного файла содержит ссылки на первые логические записи анкет с заданной фамилией, например, Smith.

Рис. 2.Индексный файл и основной файл.

Директории

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

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

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

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

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

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

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

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

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

Рис. 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 docdoc_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 и выводит на консоль полный путь доступа к каждому найденному файлу с таким именем.

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

Статьи к прочтению:

Расширения и форматы файлов


Похожие статьи: