Disk Operation System

5.2. Принципы построения и функционирования DOS

В этом подразделе рассматривается организация DOS, ее возможности и порядок работы. Излагаемый материал ориентирован на специалиста, знакомого с основами построения ОС ЭВМ. Обсуждение ведется на понятийном уровне: читатель получит ответы на вопросы «ЧТО DOS делает?», «КАК в принципе она это делает?», но не «КАК ЗАСТАВИТЬ ее что-то сделать?». Для ответа на третий вопрос, касающийся программного интерфейса системы, следует обратиться к справочнику программиста по DOS. Чтобы получить ответ на третий вопрос применительно к пользовательскому интерфейсу DOS, прочитайте подразделы 5.5 — 5.10.

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

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

5.2.1. Структура DOS

В состав DOS входят следующие структурные компоненты:

1) базовая система ввода-вывода (BIOS);

2) системный загрузчик (SB System Bootstrap);

3) модуль расширения (MP) BIOS;

4) внешние (устанавливаемые) драйверы устройств;

5) базовый модуль (БМ) DOS;

6) командный процессор (КП), или интерпретатор команд;

7) утилиты DOS.

Не надо пугаться сокращений на разных языках. Мы понимаем, что это не очень хорошо, но тем не менее устоявшиеся сокращения целесообразнее приводить на языке оригинала. BIOS хранится в ПЗУ и поэтому выполняет троякую роль:

1) является частью ПЭВМ;

2) является компонентом DOS;

3) является компонентом любой ОС, запускаемой на данной ПЭВМ.

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

Для того чтобы на ПЭВМ можно было работать, необходимо предварительно выполнить загрузку DOS с системного диска в ОЗУ и передать на нее управление. Эта процедура описывается в п. 5.2.4.

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

BIOS, «скрывая» архитектурные особенности конкретной модели ПЭВМ, реализует наиболее простые и универсальные услуги DOS по управлению основными (стандартными) ПУ, в частности, по организации ввода-вывода. Поэтому BIOS освобождает обращающиеся к ней программы и другие компоненты DOS от «знания» и учета особенностей оборудования, а также деталей управления тем или иным ПУ, что обеспечивает независимость ПО от ПУ. Отметим, что BIOS выполняет и другие функции, не связанные с ее основным назначением.

BIOS содержит: ;

1) драйверы стандартных ПУ;

2) тестовые программы для контроля работоспособности оборудования;

3) программу начальной загрузки;

4) интерпретатор BASIC'a.

Драйверы как раз и решают основную задачу BIOS. Драйвером называется программа, обслу­живающая те или иные ПУ. Драйвер выполняет следующие функции:

— принимает запросы на обращение к ПУ;

— преобразует запросы в команды управления устройством с учетом всех деталей его кон­струкции и особенностей работы в реальном времени;

— обрабатывает прерывания от обслуживаемого ПУ.

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

Программа начальной загрузки не привязана к конкретной ОС и обеспечивает загрузку в ОЗУ, а также запуск SB из определённой области системного диска По этой причине она называется первичным загрузчиком.

Доступ к средствам BIOS осуществляется, главным образом, через аппарат прерываний. Она совместно с MP BIOS обрабатывает прерывания ООН — 1FH, являющиеся прерываниями нижнего уровня (потому что услуги BIOS считаются низкоуровневыми). Среди этих прерываний есть как программные, так и аппаратные.

SB является вторичным загрузчиком, участвующим в загрузке DOS. Он зависит от той ОС, которую должен загружать. Двухуровневая организация загрузки придает гибкость системе, упрощая ее модификацию. Более того, иная организация загрузки просто невозможна, так как первичный загрузчик прошит в ПЗУ и не в состоянии учесть особенности загрузки всех суще­ствующих, а тем более еще не созданных ОС.

MP BIOS является надстройкой над BIOS. В его задачи входят:

1) организация интерфейса с BIOS;

2) логическая замена драйверов, хранящихся в BIOS;

3) подключение (если требуется) новых драйверов.

Необходимость замены существующих и подключения к системе новых драйверов возникает при изменении состава ПУ и при потребности в использовании имеющихся ПУ нестандартным образом. Это делается при помощи механизма подмены адресов обработчиков прерываний в векторах прерываний. Кроме того, драйверы связываются в цепочку (список), которая при поиске драйвера просматривается с той стороны, с которой драйверы добавляются, строго последовательно, чем имитируется стек. Использованию подлежит первый встретившийся из драйверов для данного ПУ. Очевидно, описанного механизма достаточно как для замены существующих, так и подключения новых драйверов.

Драйверы могут находиться как внутри MP BIOS, так и вне его, т.е. храниться в отдельных файлах. В первом случае они называются внутренними (основными), а во втором — внешними (устанавливаемыми). Указания на подключение внешних драйверов должны содержаться в файле конфигурации CONFIG.SYS. В этом же файле специальными командами указываются параметры системы, используемые при загрузке для ее конфигурирования (настройки).

Способность подключения внешних драйверов существенно облегчает расширение возмож­ностей ОС по управлению ПУ, так как при этом не требуется модифицировать основные ее компоненты. С другой стороны, некоторые драйверы нежелательно помещать в BIOS или в его расширение по той причине, что они используются не на каждой модели ПЭВМ и не каждым Пользователем. В этом случае драйверы оформляются как внешние и подключаются только при необходимости, что повышает эффективность DOS.

MP BIOS содержит внутренние драйверы, код инициализации (который выполняется при загрузке), а также ряд управляющих блоков и таблиц.

Доступ программ к средствам MP BIOS осуществляется через аппарат прерываний, причем за ним и самой BIOS, как уже указывалось, закрепляются прерывания ООН — 1FH.

Вообще BIOS, MP BIOS и подключенные внешние драйверы составляют единую подсистему, которую мы назовем системой ввода-вывода. Такое название полностью соответствует/ выпол­няемым ею функциям, так как основной задачей этой системы является организация обмена информацией с ПУ.

Система ввода-вывода в общем случае содержит следующие драйверы, часть из которых является обязательной, а другая — факультативной:

— драйверы накопителей на гибких и жестких дисках;

— драйверы (обычный и расширенный) дисплея и клавиатуры;

— драйвер принтера;

— драйверы адаптеров интерфейсов;

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

— драйвер часов;

— драйвер виртуального диска;

— драйвер манипулятора «мышь»;

— драйвер отображаемой памяти;

— драйвер расширенной памяти;

— драйверы верхней памяти. j Система ввода-вывода является машинозависимой частью DOS.

БМ DOS — это центральный ее компонент, реализующий основные функции по управлению всеми ресурсами ПЭВМ и выполняемыми программами. Управление ПУ осуществляется на более высоком, чем посредством драйверов, уровне путем организации обращения к последним. Именно здесь обеспечивается функционирование файловой системы.

БМ DOS включает код инициализации, выполняемый при загрузке системы, и совокупность обработчиков прерываний верхнего уровня. Доступ к средствам БМ DOS осуществляется по прерываниям 20Н — 3FH, за исключением 22Н — 24Н. Особую роль играет прерывание 21Н, по которому доступны 57Н сервисных функций DOS. Именно прерывания верхнего уровня выдает большинство программ, работающих под управлением DOS. Обработчики этих прерываний, в свою очередь, могут выдавать прерывания нижнего уровня, причем неоднократно.

Система ввода-вывода и БМ DOS в процессе работы системы находятся в ОЗУ резидентно (постоянно).

В то время как BIOS, MP BIOS и БМ DOS управляют ресурсами ПЭВМ, КП отвечает за поддержку пользовательского интерфейса DOS. Он решает следующие задачи:

— воспринимает команды DOS, вводимые пользователем с клавиатуры;

— выполняет часть из них, называемых внутренними;

— обрабатывает командные файлы;

— загружает программы в ОЗУ для выполнения;

— обрабатывает прерывания 22Н (завершение задачи), 23Н (реакция на одновременное нажатие клавиш Ctrl и Break) и 24Н (реакция на критическую ошибку), дополняя БМ DOS.

Если на системном диске имеется командный файл AUTOEXEC.BAT, называемый файлом автозапуска, то при загрузке DOS КП организует его интерпретацию. В данный файл включают команды DOS, которые пользователю нужно регулярно выдавать после запуска системы (например, для установки даты и времени), чтобы освободить его от выполнения рутинных операций. Этот файл может включать и команды на запуск резидентных программ, подменяющих ряд обработчиков прерываний и выполняющих функции драйверов. По этой причине их часто называют драйверами, хотя они организуются и подключаются к системе несколько иначе.

Очевидно, что КП выполняет в основном роль оболочки. DOS предоставляет возможность замены КП при своей загрузке на любую другую оболочку, что ведет к экономии оперативной памяти. Действительно, если Вы пользуетесь какой-то оболочкой, то Вам КП может и не потребоваться. Тогда ему незачем занимать и память. Однако такая организация системы используется редко.

КП состоит из следующих модулей:

1) резидентного модуля, постоянно хранящегося после запуска DOS в ОЗУ и включающего обработчики прерываний 22Н — 24Н, а также код подзагрузки транзитной части КП;

2) модуля инициализации, выполняемого при загрузке DOS и затем затираемого выполняемыми программами;

3) транзитного (нерезидентного) модуля, который в ОЗУ может перекрываться выполняемыми программами, а затем восстанавливаться путем считывания с диска; этот модуль содержит интерпретатор (исполнитель) внутренних команд DOS и загрузчик программу ОЗУ для выполнения.

В качестве внутренних выбраны наиболее употребимые команды DOS, чтобы быть резиден­тными и тем самым быстрее выполняться.

Доступ к КП осуществляется по прерываниям от клавиатуры и по прерываниям 22Н — 24Н.

Утилиты DOS обеспечивают выполнение внешних команд DOS. Они названы внешними потому, что реализуются отдельными программами, а не КП. Внешние команды дополняют пользова­тельский интерфейс DOS.

БМ DOS, КП и утилиты DOS составляют ее машинонезависимую часть.

Наряду с рассмотренными, есть и еще одна возможность управления ПУ. Она состоит в непосредственном обращении из программ к ПВВ (через так называемый программный интерфейс ПЭВМ). В этом случае средства ОС не используются, управление ПУ существенно усложняется, программа получается немобильной, но зато появляется возможность задействовать абсолютно все специфические возможности ПУ, причем наиболее эффективным способом.

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

Рис.  5.1.  Структура  DOS

 

5.2.2. Файловая система DOS

Рассматриваемый в этом пункте материал затрагивает вопросы работы с внешней памятью.

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

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

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

Файловая система выполняет следующие функции:

1) задает возможные способы организации файлов;

2) реализует методы доступа к содержимому файлов;

3) определяет способы организации файловой структуры;

4) предоставляет средства манипулирования файловой структурой, в том числе файлами.

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

Методом доступа называют алгоритм запоминания и поиска записей (компонентов) в файле. Известны последовательный, индексно-последовательный, библиотечный и прямой методы доступа. Метод доступа определяет требования к организации файлов, чтобы он был применим. Так, последовательный метод доступа может быть применен к файлам с любой организацией, а прямой — только к файлам прямого доступа, имеющим специфическую логическую структуру с целью обеспечения адресации каждой записи. ВЗУ налагают свои ограничения на возможные методы доступа к хранимой на них информации. НМД может обеспечить любой метод доступа в связи с возможностью позиционирования головок непосредственно на заданный участок диска. НМЛ же поддерживают только последовательный метод доступа.

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

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

Файловые системы, как правило, имеют только программный интерфейс. Однако это не означает, что их услугами невозможно воспользоваться через пользовательский интерфейс ОС. Последняя может транслировать команды, вводимые пользователем, в программные запросы к файловой Системе.

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

Файловая система DOS является наиболее развитой ее частью. Другие функциональные компоненты DOS (например, средства управления задачами и памятью) достаточно примитивны, что объясняется однозадачностью данной системы. Понятие о файловой системе и особенно файловой структуре DOS необходимо иметь даже пользователям, не интересующимся принципами построения и функционирования этой ОС, так как через ее пользовательский интерфейс доступны многие средства файловой системы. Любому пользователю придется создавать и обслуживать файлы на дисках самостоятельно.

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

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

Устройства

DOS различает два типа устройств: посимвольные и поблочные.

Обмен информацией между ОЗУ и посимвольными устройствами осуществляется побайтно и строго последовательно (байт за байтом). К устройствам этого типа относятся все УВВ и некоторые другие ПУ ПЭВМ.

В DOS зарезервированы следующие имена посимвольных устройств:

LPT1, или PRN    — первый адаптер параллельного интерфейса, а точнее — то ПУ, которое к нему подключено (обычно принтер);

LPT2 — второй адаптер параллельного интерфейса;

LPT3 — третий адаптер параллельного интерфейса;

СОМ1, или AUX — первый адаптер последовательного интерфейса (дополнительная консоль, модем, принтер и т.п.);

COM2 — второй адаптер последовательного интерфейса;

COM3 — третий адаптер последовательного интерфейса;

COM4 — четвертый адаптер последовательного интерфейса;

NUL — фиктивное устройство;

CON — консоль (стандартно клавиатура при вводе и дисплей при выводе);

CLOCKS — часы (для ПЭВМ класса AT и старше).

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

Для каждого из перечисленных устройств в DOS имеются соответствующие драйверы. Путем подключения внешних драйверов можно расширить список обслуживаемых посимвольных устройств.

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

Отметим, что строчные и прописные буквы DOS не различаются практически во всех контекстах. Поэтому вместо, например, CON можно указать Con, con и coN. Дело в том, что КП обычно автоматически переводит все строчные буквы из своего ввода в прописные.

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

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

Обмен информацией между ОЗУ и поблочными устройствами на физическом уровне осуществляется секторами (блоками) по 512 Кбайт, которые можно считать физическими записями. Однако файловой системой может создаваться иллюзия обмена логическими записями меньшего или большего размера. К поблочным устройствам относятся ВЗУ как с прямым доступом (НМД, НОД), так и с последовательным доступом (в частности, НМЛ).

Поблочные устройства, каковыми обычно являются НМД, именуются буквами латинского алфавита (А, В, ...), а если их не хватает, то могут использоваться и другие символы, например, «<» и «/». Жесткое закрепление имен за НМД отсутствует. Имена назначаются в зависимости от порядка помещения драйверов в цепочку (список) во время загрузки DOS, т.е. от порядка их подключения, в частности, порядка указания внешних драйверов в файле CONFIG.SYS. Именование начинается с А и продолжается в порядке английского алфавита. Если подключается драйвер НМД, для которого драйвер в цепочке уже имеется, то формируется новое имя устройства, а не подменяется старое. Поэтому в цепочке оказываются доступными по имени (под различными именами) все драйверы для данного НМД, что эквивалентно наличию нескольких логических устройств на одном физическом. Это удобно, в частности, для работы в одном дисководе с разными форматами дискет. Есть и другие достоинства рассмотренного механизма. Один драйвер может управлять несколькими поблочными устройствами одновременно.

Например, если ALPHA — первый драйвер в списке, и он определяет два поблочных устройства то им будут присвоены имена А и В. Если за ALPHA подключается и помещается в список другой драйвер BETA для этих же устройств, то им будут назначены имена С и D соответственно. В этом случае один НМД доступен под именами А и С, а другой — под В и D.

Ограничения на количество логических НМД очень слабые: общее их число может достигать 63.

DOS организует свою работу таким образом, что физически первый НГМД получает имя А, а второй — имя В. Физические номера накопителей отмечаются на корпусе ПЭВМ, например, соответствующим числом точек. Если ПЭВМ имеет только один НГМД, то для него назначается два имени — А и В, благодаря чему создаются два логических привода. Это позволяет, в частности, копировать содержимое дискет без промежуточного его переноса на жесткий диск. DOS всегда «помнит», какой из двух логических дисководов в настоящее время активен (это не одно и то же, что текущий дисковод). В случае, когда активен дисковод А, при обращении к приводу В DOS предложит установить дискету в последний, что пользователь должен и осуществить. Для этого следует изъять из дисковода дискету, установить новую и нажать любую клавишу. Система теперь будут работать с приводом В, считая его активным, а потом снова может запросить дисковод А и т.д. НЖМД всегда получает имя С, а возможно, и ряд других имен.

При загрузке DOS на ЕС1840 обычно подключают внешний драйвер, позволяющий рассматривать не только каждый дисковод как два логических устройства, но и один диск как два логических диска емкостью по 360 Кбайт каждый. Дело в том, что в ПЗУ ЕС1840 прошит драйвер для 360-Кбайт НГМД, а реально (если читатель помнит) установлены приводы на 720 Кбайт. Для наиболее полного использования их возможностей и осуществляется подключение внешнего драйвера. Дополнительно можно подключить и внешний драйвер, обеспечивающий работу с одним диском емкостью 720 Кбайт. Это, конечно, более удобно. Но отказываться полностью от предыдущего драйвера нецелесообразно, так как загрузка DOS с 720-Кбайт дискеты не идет, а пренебрегать 360-Кбайт памятью на системном диске крайне нежелательно. Разбиение одного диска на два логических осуществляется в результате того, что первому логическому диску отводится 40 цилиндров (из 80-ти) Через цилиндр, а второму — оставшиеся 40 цилиндров. Информация, записанная на первом логическом диске, может быть прочитана в 360-Кбайт НГМД и наоборот, информацию, записанную на 360-Кбайт приводе, можно прочитать в НГМД ЕС1840, если считать, что эта информация находится на первом логическом диске (А или В в зависимости от того, в какой привод дискета установлена).

В командах DOS за именем Привода всегда ставится двоеточие, например: А, b:.

Файловая система DOS в отличие от UNIX не позволяет на уровне пользовательского интерфейса рассматривать содержимое диска как единый файл и осуществлять доступ к нему путем указания имени привода. Однако в ней, аналогично UNIX'y, обеспечивается возможность создания на диске иерархической файловой структуры. Иными словами, файловой системой DOS поддерживается размещение на, диске иерархически организованной совокупности файлов и доступ к любому файлу (но не к содержимому всего диска как к файлу). Тем не менее, можно обратиться к любому заданному сектору диска (так называемое прямое чтение и прямая запись) без привязки к файловой структуре, но, конечно, не через пользовательский интерфейс DOS.

Таким образом, файловая система DOS поддерживает две разновидности доступа к содержи­мому дисков:

1) прямое чтением прямая запись, что позволяет с определенными допущениями рассматривать содержимое диска как единственный файл, но только на уровне программного интерфейса;

2) доступ к файлам (как на уровне программного, так и пользовательского интерфейса).

В DOS всегда имеется один текущий дисковод. Первоначально (при загрузке DOS) текущим является привод, на котором установлен системный диск (обычно А или С). Затем он может быть изменен предназначенной для этого командой DOS. Смысл текущего дисковода в тjм, что при обращении к нему явное указание в командах DOS его имени не требуется. Следовательно, работа пользователя упрощается. Диск, установленный в текущий дисковод, также будем называть текущим.

В дальнейшем под диском будем понимать как жесткий диск (точнее — логический диск на нем), так и дискету. Аналогично, если речь будет вестись простого дисководе, приводе или накопителе, то будет иметься в виду как НГМД, так и НЖМД. При необходимости разновидность диска (привода) будет конкретизироваться.

B подразделе 5.6 нам понадобится еще одно не введенное пока понятие, а именно, «том». Вообще под томом понимают съемный носитель информации, но в рамках DOS этот термин считается синонимом диска.

Файлы

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

На логическом уровне дисковая память рассматривается как непрерывная последовательность секторов, каждый из которых имеет свой номер. Память создаваемому файлу выделяется динамически (по мере необходимости) в начале свободной области логического дискового пространства, причем не секторами, а кластерами (обычно 2 или более смежных сектора). Дискретность в терминах кластеров, а не секторов, объясняется необходимостью минимизации объема системной информации. На основе этой информации обеспечивается возможность работы с фрагментированными (занимающими несмежные области логического дискового пространства) файлами, что весьма важно для используемого механизма динамического выделения памяти. Фрагментация файлов возникает при их интенсивном создании, удалении и пополнении. Допустим например, что сначала был создан файл X и в него записана определенная информация, а затем — файл Y. Если теперь понадобится дописать данные в файл X, то они будут размещены в кластерах за файлом Y. Эта ситуация иллюстрируется на рис. 5.2.

X X ... X Y Y ... Y X X ... X ...

Рис.  5.2.  Фрагментация файла X

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

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

Более подробно порядок размещения информации на дисках мы рассмотрим позже, в подразделе 5.12.

Полностью статическое выделение дисковой памяти для файла с указанием требуемого размера при его создании неприемлемо, так как:

1) даже приблизительный размер файла заранее неизвестен, а задание максимально возможной длины приводит к неэффективному использованию внешней памяти;

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

3) неэффективно используется дисковая память, так как под файл приходится выделять, как правило, большую область, чем ему реально требуется.

В некоторых ОС принята смешанная схема выделения Памяти под файлы: первоначально статически выделяется заданная область, а при ее заполнении — распределяется дополнительная область определенной длины и т.д. Это в некоторой степени уменьшает фрагментацию.

Несмотря на последовательную организацию файлов и возможность их фрагментации, файловая система DOS поддерживает не только последовательный, но и прямой методы доступа к их содержимому.

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

При прямом доступе обеспечивается непосредственное обращение к записи по ее номеру в файле.

В связи с поддержкой прямого доступа есть возможность реализовать любые другие методы доступа. Эта возможность может быть использована создателями систем программирования или разработчиками программного обеспечения. Например, логически организовав файл определенным образом и разработав соответствующие подпрограммы, можно предоставить возможность применения библиотечного метода доступа. Как мы уже знаем, свои методы доступа к данным предлагают СУБД. Возможно также использование и других систем управления данными.,

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

Рис. 5.3. Иерархия средств управления данными

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

Двоичный файл — это файл общего вида, на содержимое которого не накладывается никаких ограничений. Считается, что он состоит из последовательности байтов, возможно, сгруппированных в логические записи фиксированное длины. Последняя запись может быть неполной. В двоичных файлах хранятся исполняемые программы и «снимки» основной памяти, т.е. какие-либо данные во внутреннем представлении. Несмотря на то, что ограничения на содержимое двоичных файлов отсутствуют, файлы с исполняемыми программами при их запуске на выполнение должны иметь определенную структуру, что DOS обязательно анализирует. В других же случаях (при записи в двоичный файл или чтении из такого файла) его содержимое абсолютно никакой роли не играет и ни на что не влияет.

Текстовым (ASCII-) файлом называется файл, содержимое которого без преобразования может быть выдано на экран дисплея или принтер и непосредственно воспринято человеком. Такой файл состоит из последовательности строк переменной длины, которые можно считать логическими записями, так как файловая система DOS обеспечивает ввод-вывод строк. Каждая строка содержит только текстовые символы (символы пишущей машинки) и завершается маркером конца строки (EOL End Of line). Роль маркера EOL играет символ возврата каретки (CR), за которым, возможно, следует символ перевода строки (LF). В качестве исключения внутри строк текстового файла допустим символ горизонтальной табуляции (НТ), заменяющий несколько расположенных подряд пробелов и обеспечивающий сдвиг остатка строки вправо, к очередной позиции табуляции, при выдаче файла на устройство вывода Текстовый файл обычно завершается маркером конца файла (EOF End Of File), роль которого играет символ подстановки (SUB). Однако иногда маркер EOF может отсутствовать. Часто между некоторыми строками текстового файла размещают еще один управляющий символ — символ перевода формата (FF), обеспечивающий прогон бумаги на принтере до начала следующей страницы. На экране же дисплея он отображается как таковой и ни к каким действиям не приводит. Чтобы узнать коды упомянутых здесь символов, следует обратиться к подразделу 5.3. В текстовых файлах хранят различные текстовые документы, в том числе исходные программы, данные к ним, а также окончательные результаты их выполнения. Конечно, для хранения данных экономнее использовать двоичные файлы, однако такие файлы не могут быть проинтерпретированы человеком. Поэтому данные записывают одной программой в двоичный файл только тогда, когда они в последующем понадобятся другой или этой же программе.

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

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

Важно подчеркнуть, что УВВ в DOS трактуются именно как текстовые файлы. Однако текстовый файл на диске, в отличие от файла-УВВ, может быть проинтерпретирован и как последовательность записей определенной (в частности, единичной) длины При Копировании текстового файла на экран дисплея или принтер маркер конца строки реально приводит к продолжению вывода последующих символов с новой строки. Конечно, можно скопировать на устройство вывода и любой другой файл, но проинтерпретировать его содержимое человеком будет практически невозможно (произвольные 8-разрядные коды переводятся в символы-«иероглифы», звуковые сигналы и т.п. или вообще не воспринимаются, если данный код не имеет графического представления и никак на устройство не действует).

Дополнительно к сказанному, Вы должны уяснить, что при вводе с клавиатуры DOS моделирует. чтение из текстового файла. Строка при этом завершается нажатием клавиши Enter, а весь файл — нажатием комбинации клавиш Ctrl-Z.

С каждым файлом в DOS связываются:

1) составное имя файла;

2) атрибуты файла;

3) дата создания файла;

4) время создания файла;

5) длина файла.

Составное (полное) имя файла представляет собой совокупность имени файла и расширения имени файла.

Имя файла — это последовательность из не более восьми символов, в качестве которых допускается использовать буквы латинского алфавита от А (а) до Z (z), цифры от 0 до 9, а также символы !, @, #, $, %, &, (, ), -, _, ~, , , ^, { и }. Можно также использовать буквы национального алфавита, поддерживаемого активизированной кодовой страницей. Никаких ограничений на порядок следования символов в имени файла не налагается, а одноименные строчные и прописные буквы (как и практически везде в DOS) не различаются. Возможно, легче запомнить недопустимые в имени файла символы, а именно: символ пробела, /, запятая, ;, +, [, ], ", =, *, ?, :, ., \, |, < и >. В качестве имен файлов по вполне понятным причинам нельзя использовать имена посимвольных устройств.

Например, последовательности символов PROG, 123, PROG_l, $IOBUF и fileinfo являются допустимыми именами файлов, a MASJ5], 24/11/90, #invoices и con не являются таковыми.

Имя файла — это обязательный элемент и поэтому при доступе к файлу оно должно указываться всегда.

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

Например, расширение PAS обычно обозначает исходную программу на языке Pascal.

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

В командах DOS и программах на языках программирования составное имя файла записывается как имя файла, за которым следует расширение, отделенное от имени точкой.

Например, PROG1.PAS может именовать файл, содержащий исходную программу под номером 1 на языке Pascal. Однако con.bas будет интерпретироваться как устройство CON, так как в случае использования в качестве имени файла имени посимвольного устройства расширение отбрасывается.

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

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

Таким образом, расширение имени файла не указывается в двух случаях:

1) когда оно отсутствует,

2) когда оно подразумевается по умолчанию и правила умолчания не противоречат тому, что требуется выполнить.

Если в данном контексте умолчания имеются, а Вам нужно указать файл без расширения, то за именем файла должна следовать точка.

С учетом сказанного пользователь может в остальном использовать произвольные расширения, но желательно, чтобы они, как и имена файлов, несли какую-либо смысловую нагрузку.

DOS при запуске программ в случае указания только имени существующего файла предполагает одно из следующих расширений: СОМ, ЕХЕ или ВАТ.

Расширение СОМ (от COMmand) зарезервировано для файлов, содержащих готовые к выпол­нению машинные программы, не требующие перемещения при загрузке их в ОЗУ для выполнения независимо от адреса загрузки. Иными словами, программа инвариантна к адресу загрузки. Она может быть загружена в ОЗУ и выполнена без настройки содержащихся в ней адресов по месту загрузки. Размер такой программы не может превышать одного сегмента (64 Кбайт). СОМ-программу назовем позиционно независимой.

Расширение ЕХЕ (от EXEcutable) зарезервировано для файлов, содержащих готовые* к выпол­нению машинные программы, которые при загрузке на выполнение в ОЗУ требуют настройки адресов, что увеличивает общее время выполнения программ. Такой программе предшествует заголовок, содержащий необходимую для перемещения информацию, а ее размер может быть больше 64 Кбайт. ЕХЕ-программу назовем позиционно зависимой.

Как позиционно независимые, так и позиционно зависимые программы являются перемещаемыми в том смысле, что могут быть размещены для выполнения в любом месте ОЗУ. В отличие от перемещаемой абсолютная программа должна загружаться в память по вполне определенному адресу. Выполнение абсолютных программ DOS непосредственно не поддерживает.

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

Расширение ВАТ (от ВАТch) зарезервировано для командных файлов, т.е. текстовых файлов, содержащих программы на командном языке DOS.

Файлы с расширениями СОМ, ЕХЕ и ВАТ (если их содержимое соответствует тому, что описано выше) называются исполняемыми. Исполняемыми являются также файлы и с другими расширениями, если они содержат готовые к выполнению машинные программы или программы на командном языке. Однако такие файлы не всегда могут быть выполнены без предварительного явного изменения расширения в соответствии с их содержимым.

DOS распознает формат СОМ- и ЕХЕ-файлов (но только их) по содержимому. а не по расширению. Поэтому файлы с перемещаемыми программами могут иметь любое расширение, но тогда при запуске такого файла на выполнение расширение придется указать явно. Изменение расширений программных файлов можно иногда применять для защиты от компьютерных вирусов. Вместе с тем командный файл обязательно должен иметь расширение ВАТ, чтобы его можно было выполнить.

Далеко не полный перечень умолчаний расширений имен файлов, используемых существу­ющими программными продуктами, а также часто используемых расширений, ставших в опре­деленном смысле стандартными, в алфавитном порядке приведен в табл. 5.1. Этот список поможет пользователю уяснить назначение и содержимое неизвестных файлов.

Таблица  5.1

Соглашения  по расширениям  имен  файлов

Расширение

Назначение

ARC

Архив

ARJ

Архив

ASM

Программа на языке Ассемблера

BAK

Предыдущая (резервная) версия файла

BAS

Программа на языке Basic

BAT

Командный файл DOC

BIN

Двоичный файл, в том числе машинная программа или драйвер

C

Программа на языке C

CFG

Файл, описывающий конфигурацию (параметры) программы

CHI

Документ текстового редактора Chi Writer

COB

Программа на языке Cobo1

COM

Позиционно-независимая машинная программа

CPI

Файл кодовых страниц ПУ

DAT

Файл данных

DB

База данных

DBF

Файл данных с развитой организацией, в том числе база данных

DOC

Документ, подготовленный одним из текстовых редакторов, в частности. Microsoft Word

DRU

Драйвер

EXE

Позиционно-зависимая машинная программа

EXT

Файл расширений

FNT

Файл со шрифтами для принтера

FOR

Программа на языке Fortran

HLP

Файл, содержащий экранный интерактивный справочник

ICE

Архив

INI

Файл, описывающий конфигурацию (параметры) программы

LET

Письмо

LIB

Библиотека подпрограмм

LSP

Программа на языке LISP

LST

Листинг программы

LZH

Архив

MAC

Макрокоманда на языке Ассемблера

MAP

Листинг компоновщика

MNU

Файл меню

MSG

Файл сообщений программы

OBL

Объектная программа

OVG

Оверлейный файл

OVL

Оверлейный файл

OVR

Оверлейный файл

PAK

Архив

PAS

Программа на языке Pasca1

PCX

Иллюстрация графического редактора PC Paintbrush

PIC

Иллюстрация

PIF

Оверлейный файл

PRN

Файл, подготовленный для вывода на принтер

PRO

Программа на языке Prolog

REF

Таблица перекрестных ссылок

SEQ

Программа на языке Forth

SIS

Драйвер, если имя файла отлично от IO, MSDOS и  CONFIG

TMP

Временный файл

TPL

Библиотека объектных модулей Turbo Pascal

TPU

Объектный модуль Turbo Pascal

TXT

Текстовый файл

SSS

Временной файл

ZIP

Архив

ZOO

Архив

 

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

R (Read-only)

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

A (Archive)

- архивный файл (лучше говорить «неархивированный»); этот атрибут приписывается каждому создаваемому файлу и сбрасывается средствами архивирования и резервирования файлов; может использоваться этими средствами для определения файлов, подлежащих архивации или резервированию;

H (Hidden)

- скрытый файл, который игнорируется многими командами DOS;

S (System)

- системный файл.

В существующих версиях DOS атрибуты Н и S интерпретируются одинаково, но в будущем они будут, видимо, различаться.

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

Дата создания и время создания приписываются файлу по показаниям системных часов. Если они установлены неправильно, то это отразится и на соответствующей информации, связываемой с файлом, что может спутать карты. Для установки даты и времени в ПЭВМ класса XT нужно использовать DOS-команды DATE и TIME. ПЭВМ класса AT и старше имеют встроенные  часы-календарь с автономным питанием. Поэтому установка даты и времени после загрузки DOS необязательна. Вы должны только своевременно корректировать показания системных часов по мере необходимости. При обновлении файла дата и время его создания корректируются в соответствии с текущими показаниями системных часов.

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

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

Файловая система DOS обеспечивает, наряду с другими, выполнение следующих основных операций над файлами:

1) создание и удаление файлов;

2) переименование и пересылку файла в другой каталог,

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

4) чтение, запись, а также обновление (чтение и запись) файлов;

5) поиск файлов;

6) считывание и смену атрибутов файлов;

7) считывание и изменение даты и времени создания, а также длины файлов;

8) перенаправление стандартного ввода-вывода.

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

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

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

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

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

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

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

DOS использует символы-заменители ? и *.

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

Примеры шаблонов с заменителем ?:

MEMO?R.EXE подходит к любому файлу с расширением ЕХЕ, имя которого начинается с MEMO, завершается символом R, а между  ними находится ровно один произ­вольный символ;

PROG.??M сопоставляется со всеми файлами, имеющими имя PROG и трехсимвольное расширение, если последним символом в расширении является М;

GL???.DAT подходит ко всем файлам с расширением DAT, имеющим имя, начинающееся с символов GL, за которыми следует не более трех символов.

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

Примеры шаблонов с заменителем *:

■ *.BAS сопоставляется со всеми файлами с расширением BAS;

P*.PAS подходит ко всем файлам с расширением PAS, имя которых начинается с символа P;

■ *.* сопоставляется со всеми файлами, в том числе без расширений;

■ *.*S — то же, что в предыдущем примере;

■ *. подходит ко всем файлам, не имеющим расширения;

■ * — то же, но только на уровне интерфейса DOS;

DIR*1.MEM сопоставляется со всеми файлами с расширением MEM и именем, начинающимся с DIR, независимо от наличия символа 1 в конце имени файла.

Сделаем два замечания:

1) к примеру, шаблоны * и *.* не эквивалентны, так как заменитель не может замещать разделитель имени файла и расширения (.);

2) при использовании заменителей ограничения на длину имени файла и расширения в образце не снимаются.

Полезность шаблонов состоит не только в возможности задать множество файлов, но и в возможности упростить задание составного имени единственного файла. Например, вместо существующего файла PROGRAM.PAS часто достаточно указать P*.*, если при этом не возникает неоднозначности.

 

Каталоги

 Файловая система DOS позволяет объединять файлы в каталоги. Каталогом называется специальный файл, в котором регистрируются другие файлы. Если файл зарегистрирован в каталоге, то говорят, что файл входит в каталог или содержится в каталоге, Вхождение файла в каталог означает, что в последнем содержится вся характеризующая файл информация и сведения о том, в каком месте диска файл расположен. Сам же файл хранится как последова­тельность байтов без каких-либо дополнительных справочных сведений. Каталог, в свою очередь, может входить в другой каталог, благодаря чему на диске может быть организована разветвленная файловая структура.

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

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

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

Каждый диск хранит свою файловую структуру, которая формируется по следующим правилам:

1) каталог или файл может входить только в один каталог;

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

3) на порядок следования файлов и каталогов в каталоге никаких ограничений (за исключением корневого каталога системного диска) не накладывается;

4) глубина вложенности каталогов не ограничивается.

Следовательно, файловая система DOS обеспечивает формирование иерархической многоуров­невой, а короче — древовидной файловой структуры, в корне которой находится корневой каталог, а листьями являются файлы и, возможно, пустые каталоги.

Пример файловой структуры приведен на рис. 5.4. Эта файловая структура состоит из каталогов \ (корневой каталог), IVANOV, PETROV, ЕХЕ, двух каталогов PROGS и двух каталогов DATA. В частности, каталог IVANOV содержит два каталога — PROGS и DATA. Различные файлы prog1.pas входят в различные каталоги PROGS, которые содержатся в каталогах IVANOV и PETROV, зарегистрированных в корневом каталоге диска.

  

Рис. 5.4. Пример файловой структуры

 Если один каталог входит в другой, то первый называется дочерним каталогом (подкаталогом) второго, а второй — родительским каталогом (надкаталогом) первого. Если в дереве файловой структуры существует путь от одного каталога к другому, направленный от корневого каталога к листьям, то второй каталог является подчиненным каталогом первого. Например (см. рис. 5.4) каталоги PROGS и DATA одновременно выступают в роли дочерних и подчиненных каталогов IVANOV, а также в роли только подчиненных каталогов корневого каталога; каталог IVANOV является родительским каталогом каталогов PROGS и DATA.

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

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

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

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

Достоинства организации древовидной файловой структуры в DOS (т.е. структуризации мно­жества файлов) состоят в следующем:

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

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

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

4) в возможности манипулирования группой файлов, входящих в один каталог (содержимым каталога), как единым целым;

5) в ограничении множества выбираемых по шаблону файлов заданным каталогом;

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

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

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

Полным маршрутом (путем) к файлу называется последовательность каталогов, ведущая от корневого каталога к этому файлу. Полный маршрут представляется перечислением имен ката­логов, разделенных символом \, причем корневой каталог от его дочернего каталога символом \ не отделяется. Совпадение разделителя каталогов в маршруте с именем корневого каталога ни к каким неприятностям не приводит.

Примеры полных маршрутов (см. рис. 5.4):

■ строка \IVANOV\PROGS является полным маршрутом к файлам prog1.pas, prog2.pas и prog3.pas;

■ символ \ является полным маршрутом к файлу fin.com.

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

Во-первых, DOS хранит информацию о текущем каталоге для каждого дисковода ПЭВМ. Первоначально после загрузки системы текущими каталогами для каждого привода являются корневые каталоги дисков. Затем их можно изменить одной из команд DOS. Текущим называется такой каталог, которым заканчивается полный маршрут к файлу в случае, когда маршрут явно не задан. Например (см. рис. 5.4), если текущим является каталог ЕХЕ, то для доступа к файлу progl.exe или создания в этом каталоге новых файлов никакой маршрут указывать не нужно. Текущий каталог может быть использован и для доступа к содержимому всех подчиненных ему каталогов. Для этого маршрут нужно задать без корневого каталога и указать в нем путь по подчиненным каталогам. Так (см. тот же рисунок), если текущим является каталог IVANOV, то для доступа к файлам prog1.dat или prog3.dat, а также для создания в каталоге DATA новых файлов достаточно задать маршрут DATA вместо \IVANOV\DATA.

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

Прежде чем ее описать, для удобства дальнейшего рассмотрения определим рабочий каталог как текущий каталог текущего диска.

Во-вторых, каждый каталог, за исключением корневого, наряду с элементами, описывающими содержащиеся в нем файлы и дочерние каталоги, имеет два специальных элемента, обозначаемых через . и .. . Элемент . (точка) является ссылкой каталога на самого себя, т.е. интерпретируется как «этот каталог». Элемент .. (две точки) указывает на родительский каталог, т.е. интерпретируется как «родительский, каталог данного каталога». Первый элемент используется для указания в командах DOS рабочего каталога, если задание каталога обязательно. Применение второго элемента позволяет подняться по файловой структуре вверх и тем самым облегчить задание маршрутов к содержимому вышестоящих каталогов текущего каталога, а также к содержимому подчиненных им каталогов. Например (см. рис. 5.4), если текущим является каталог ЕХЕ, то маршрут ..\PROGS позволит обратиться к файлу prog1.pas, а маршрут  ..\..  — к файлу fin.com.

 Таким образом, маршрут к файлу может быть задан абсолютно или относительно. Абсолютным является полный маршрут. Для указания относительного маршрута, т.е. маршрута относительно текущего каталога, используется первый из описанных способов, возможно, дополненный вторым способом (..). Относительное задание маршрута зачастую оказывается более простым и повышает гибкость програм­мных продуктов, так как появляется возможность настраивать последние путем смены текущего каталога

В-третьих, DOS хранит определенный пользователем список полных маршрутов, которые используются при поиске существующего файла, если окажется, что он по заданному маршруту не обнаружен или этот маршрут не указан (при отсутствии маршрута подразумевается текущий каталог, так что оба случая эквивалентны). Более детально речь об этом пойдет в п. 5.6.5. Последовательность каталогов, ведущую к файлу, и не начинающуюся корневым каталогом, будем называть неполным маршрутом к файлу. Понятия полного и неполного маршрута объединим общим термином «маршрут». Каталог, указанный последним в маршруте, или текущий каталог, если маршрут не определен, назовем выделенным каталогом. В нем будет осуществляться первоначальный поиск существующего или создание нового файла.

Файловая система, DOS реализует операции создания и удаления каталога, которые доступны и через командный язык DOS.

Завершив рассмотрение организации DOS, выделим следующие принципы, положенные в ее основу:

1) модульность и многослойность структуры, что облегчает ее развитие и адаптацию к новому оборудованию;

2) открытость архитектуры, допускающей наращивание возможностей DOS, в частности, подключение новых драйверов и нового командного процессора;

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

4) взаимодействие компонентов DOS между собой и с другими программами через механизм прерываний;

5) простоту как самой системы, так и ее интерфейсов.

При совместной записи маршрута и составного имени файла первый элемент, если он не состоит из единственного корневого каталога, отделяется от второго элемента символом \. Пример: \IVANOV\PROGS\prog2.pas.

 

Спецификации файла и каталога

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

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

1) имя привода, на котором установлен диск, содержащий искомый файл или предназначенный для размещения нового файла;

2) маршрут к файлу по файловой структуре этого диска;

3) составное имя файла (имя файла и расширение имени файла).

Данные сведения указываются в спецификации файла, которая имеет следующий синтаксис (представление, форму, структуру):

[привод:][маршрут\]имя_файла.[расширение]

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

1) если привод не задан, то выбирается текущий привод;

2) если маршрут начинается с символа \ (указан полный маршрут), то поиск каталога, где должен содержаться файл, осуществляется, начиная с корневого каталога диска на выбранном дисководе;

3) если условие в п. 2 не выполняется, то поиск каталога, где должен содержаться файл, осуществляется, начиная с текущего каталога диска на выбранном дисководе;

4) если маршрут не задан, то считается, что файл содержится в текущем каталоге диска на выбранном дисководе;

5) если расширение не задано, то считается, что его нет.

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

На длину спецификации файла накладывается ограничение: она, не включая имя привода и завершающее его двоеточие, не должна превышать 63 символов (вместе — 65 символов).  

Примеры:

■ спецификация C:\IVANOV\PROGS\prog3.pas полностью определяет местонахождение файла в файловой структуре диска, установленного в привод С;

■ спецификация \prog.exe задает файл prog.exe в корневом каталоге текущего диска;

■ спецификация prog.exe задает файл в рабочем каталоге;

■ спецификация C:DIRl\prog.exe задает файл в дочернем каталоге DIR1 текущего каталога диска в приводе С;

■ спецификация C:prog.exe задает файл в текущем каталоге диска в приводе С.

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

Например (см. рис 5.4), спецификация шаблона файла \IVANOV\PROGS\p*.* задает три файла prog 1.pas, proglpas и prog3.pas, т.е. в данном случае — полностью содержимое каталога PROGS.

Можно утверждать, что спецификация файла является частным случаем спецификации шаблона файла.

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

Нам понадобится в дальнейшем понятие спецификации каталога, которая имеет следующий синтаксис:

[привод:][маршрут]

Она однозначно определяет каталог, указанный последним в маршруте (или текущий каталог) и полностью согласуется с правилами умолчания для спецификаций файлов, описанными выше. Отличие состоит только в том, что не задается файл и предшествующий его имени разделитель \.

Если в спецификации (любой) указаны все допустимые для нее элементы и полный маршрут, то будем называть ее полной, в противном случае — неполной.

Выполнение запросов к файловой системе

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

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

Драйвер обеспечивает непосредственное управление адаптером устройства по выполнению требуемой операции через ПВВ, выдавая последовательность команд, а также принимая и анализируя результаты их выполнения. После завершения операции драйвер возвращает управ­ление и результаты своей работы ядру файловой системы, которое, возможно, после предвари­тельной их обработки передает результаты программе, выдавшей запрос на операцию, через регистры МП и/или область ОЗУ. Затем выполнение программы продолжается.

Отметим, что файловая система DOS реализует операции ввода-вывода только синхронно, т.е. выполнение программы приостанавливается до завершения операции.