Предыдущий раздел СИСТЕМНЫЕ ПРОГРАММЫ Следующий раздел

9.2. Файлы

Вся информация, обрабатываемая ВС, содержится в ней на устройствах: ОП, ВП, устройства ввода-вывода. При этом на любом из устройств информация хранится в виде длинной битовой строки, т.е. в виде последовательности нулей и единиц. Длина одной такой битовой строки может составлять многие сотни Гбит (1Г =  (1024)3). Так как работать с такой длинной строкой чрезвычайно неудобно, то она разделяется на поименованные части разной длины, называемые файлами. Более точное определение: файл – часть пространства носителя ВП (разрывная или непрерывная), которой присвоено имя, уникальное для данной ЭВМ.

Информация на носителе делится на части-файлы по смысловому принципу. Например, один файл может содержать текст исходной программы, второй – ее объектный модуль, а третий – загрузочный модуль. Кроме того, в большинстве современных ОС каждое устройство ввода-вывода также считается файлом. Что касается ОП, то информация на ней делится не на файлы, а на сегменты.

Применительно к файлу существуют три пользовательских имени. Наиболее короткое из них – простое имя файла. Это имя дает файлу пользователь при его создании. Ограничения на выбор простого имени файла определяются типом используемой ОС. В достаточно старых операционных системах используется короткое простое имя файла. Например, в DOS (за исключением новых версий) длина простого имени не может превышать 12 символов по схеме «8.3». При этом до восьми символов имеет собственно имя файла, до трех символов – расширение имени файла, один символ – разделительная точка. Применение расширений позволяет давать “родственным” файлам “родственные” имена, что весьма удобно для пользователя. Обычно расширение указывает на тип файла и учитывается многими системными программами. Например, если текст ассемблерной  программы записывается текстовым редактором в файл Abc.asm, то объектный модуль помещается транслятором в файл Abc.obj, а загрузочный модуль записывается редактором связей в файл Abc.com или Abc.exe. В новых версиях DOS и в различных WINDOWS длина простого имени файла может достигать 255 символов.

Что касается символов, которые можно использовать для записи имен файлов, то к их составу старые версии DOS также предъявляют гораздо более жесткие требования. В соответствии с этими требованиями в состав символов могут входить строчные и прописные латинские буквы, цифры, а также некоторые служебные символы: - ; _ ; $ ; # ; & ; @ ; ! ; % ; ~ ; ^ ; ( ; ) ; { ; }. Придерживаясь далее этих требований, мы обеспечим выполнимость своих программ в среде любой DOS. Попутно заметим, что если в состав имени входят строчные (малые) буквы, то DOS (как и WINDOWS) всегда воспринимает их как прописные (большие).

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

В реальной ВС одновременно существуют сотни или, даже, тысячи файлов. Для того чтобы ориентироваться в этом “море”, и ОС, и ее пользователь прибегают к помощи файловой структуры системы. На верхнем уровне этой структуры находятся логические диски. Логический диск – магнитный или оптический диск целиком или его часть, имеющий имя, уникальное для данной ЭВМ. Имя логического диска – буква с двоеточием, например a: или c: . Каждый логический диск имеет отдельную файловую структуру логического диска в виде дерева, пример которой приведен на рис.36.

 

 

Рис. 37. Пример файловой структуры логического диска

 

Для построения древовидной структуры применяются специальные файлы, называемые каталогами(в WINDOWS каталоги называются папками). Каталог – служебный файл, содержащий сведения о других файлах (в том числе, возможно, и о других каталогах). Файл-каталог состоит из 32-байтовых записей, каждая из которых содержит информацию об одном файле. Поля записи содержат сведения о файле: имя, размер, начальный адрес, атрибуты, дату и время последней модификации. При этом поле начального адреса в такой записи играет роль указателя на соответствующий файл (каталог). Две записи каталога всегда используются особо. В одной из них содержится адрес размещения на диске самого каталога, а во второй – адрес “родительского” каталога.

Так как в каталоге могут быть «зарегистрированы» не только файлы данных, но и каталоги, то появляется возможность связать все файлы системы в единую иерархическую (древовидную) структуру. При этом корнем дерева является корневой каталог. На следующем уровне дерева находятся те файлы и каталоги, сведения о которых содержатся в корневом каталоге. Аналогично, каталоги первого уровня дерева «порождают» файлы и каталоги второго уровня и так далее. Корневой каталог расположен в фиксированной области диска и состоит из 32-байтовых записей, структура которых аналогична структуре записей обычного каталога. Корневой каталог имеет имя “\” (обратный слеш). Простое имя любого другого каталога отличается от имени обычного файла данных тем, что оно не может иметь расширения имени.

Большим достоинством любой древовидной файловой структуры является то, что она позволяет пользователю не заботиться об уникальности простых имен файлов. Это объясняется тем, что ОС работает не с этими пользовательскими именами файлов, а с путями. Единственное ограничение: все файлы, связанные с одним каталогом, должны иметь разные простые имена. Имя-путь файла, называемое также абсолютным именем файла, представляет собой последовательность всех имен, начиная с корневого каталога и кончая простым именем файла. При этом имя каждого промежуточного каталога в имени-пути завершается символом «\». Например, на рис.36 три файла имеют одинаковое простое имя a.txt, но абсолютные имена у них разные:  \user1\a.txt , \user2\a.txt, \user3\a.txt.

Так как ЭВМ имеет в общем случае несколько логических дисков, то имя каждого такого диска может рассматриваться в качестве переменной S (см. п.7.2), позволяющей ОС однозначно выбрать среди нескольких древовидных файловых структур требуемую. Один из логических дисков ОС считает текущим логическим диском. Смена текущего диска выполняется командой пользователя для ОС (в DOS для этого достаточно набрать имя требуемого логического диска). Если пользователь хочет задать имя файла, расположенного на логическом диске, отличном от текущего, то он добавляет имя логического диска к имени-пути файла. Пример: b:\USER2\abc.asm .

Следует отметить, что ОС “помнит” не только текущий логический диск, но и текущий каталог на этом диске. Поэтому если искомый файл «зарегистрирован» в текущем каталоге, то его можно задать для ОС не с помощью имени-пути, а используя его простое имя. ОС сама получит имя-путь файла, соединив имя-путь каталога с простым именем файла. С помощью команды ОС пользователь может сменить текущий каталог.

Если адресуемый файл является «потомком» текущего каталога, то в качестве имени этого файла можно использовать «смещение» относительно текущего каталога. Такое пользовательское имя файла называется относительным именем. Например, если текущим каталогом является \, то записанное выше имя-путь файла \user1\a.txt может быть заменено чуть более коротким именем user1\a.txt. Обратите внимание на отсутствие в начале этого имени символа «\». Его наличие всегда говорит о том, что записано полное имя-путь.

Принято использовать для обозначения текущего каталога символ «.», а для обозначения родительского каталога (по отношению к текущему каталогу) – «..». Например, если текущим каталогом является \user1, то для задания файла \user3\time пользователь может использовать относительное имя ..\user3\time . Так как это относительное имя оказалось даже длиннее имени-пути файла на целых два символа, то никакого практического смысла в его использовании нет. Подобный смысл появляется лишь при использовании многоуровневых файловых структур.

 


Предыдущий раздел В начало Следующий раздел