КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Информация на гибком магнитном диске размещается следующим образом. Первый сектор любой форматируемой дискеты содержит программу-загрузчик, которая используется для запуска ОС. Затем идут секторы, содержащие таблицу размещения файлов (ТРФ). После основной ТРФ следует копия ТРФ (поскольку соответствующая информация имеет важное значение). Далее следует файл с корневым директорием. Все остальные секторы используются для хранения данных. Корневой директорий включает список всех файлов на дискете. Его элементы содержат всю информацию о файле за исключением сведений о размещении файла, которые хранятся в ТРФ. Любой элемент имеет длину 32 байта и включает 8 полей (они выравниваются по левой границе; пустые байты заполняются пробелами): 1). Имя файла – 8 байт. Если первый байт имеет значение 2Е16, то этот элемент указывает на директорий нижнего уровня. 2). Расширение имени файла – 3 байта. 3). Атрибут – 1 байт. Используется для установления признака «только чтение» (нулевой бит), скрытого файла (первый бит), системного файла (второй бит), признака метки тома (третий бит), признака архивного файла (пятый бит). Шестой и седьмой биты данного байта являются резервными. Если задан признак метки тома, то этот элемент содержит не ссылку на файл, а имя диска, которое занимает первые 11 байт. Архивный бит используется утилитами BACKUP и RESTORE. 4). Зарезервированное поле для возможного использования в будущем – 10 байт. 5) Время – 2 байта. Здесь хранится время создания или последней модификации файла. Первые 5 бит занимают часы, вторые 6 – минуты, третьи пять – секунды. В последнем поле каждая единица соответствует двум секундам. 6). Дата – 2 байта. Здесь хранится дата создания или последней модификации файла. Первые 7 бит занимают годы, вторые 4 – месяцы и третьи 5 – дни; 7). Номер начального кластера – 2 байта. Начальный кластер является первой частью пространства данных в файле на дискете. 8). Объем файла – 4 байта. Наличие таких сведений вызвано тем, что файл обычно частично занимает последний отведенный ему кластер, а здесь указывается его точная длина. Существуют два типа директориев: корневые и нижнего уровня (поддиректории). Директорий нижнего уровня является дополнительным к корневому и может храниться как обычный файл в любом месте на дискете. Форматы его полей такие же, как и для корневого директория. Разница состоит только в том, что размер директория нижнего уровня не ограничен. Процедура распределения пространства памяти на дискете между файлами реализуется с помощью ТРФ. Каждый элемент ТРФ размером в 12 бит (MS-DOS поддерживает также размер 16 бит) соответствует одному кластеру, или фрагменту дискового пространства, выделяемого файлу. В нем указываются признаки занятости кластера, перехода между кластерами, окончания файла. Свободным кластерам соответствуют нулевые значения (00016) элементов таблицы. Участки пространства на дискете, принадлежащие файлу, соединены в цепочку. Элемент директория файла (поле «Номер начального кластера») содержит номер элемента в ТРФ, который соответствует первому кластеру в цепочке. Этот элемент в ТРФ содержит номер следующего кластера в цепочке и т.д. до тех пор пока не будет достигнут конец файла (признаком конца является одна из цифр FF16 – FFF16). Для дефектных кластеров задаются значения FF716, а для резервных – от FF016 до FF716. Первый кластер данных имеет номер 2 – это означает, что первые два элемента ТРФ не используются для хранения информации о размещении файла. В них указываются сведения о формате дискеты (байт 1), которые далее используются управляющими программами (см. табл. 15). Кластерам 2 и 3 соответствуют байты 3–5 (один элемент занимает 1, 5 байта) и т.п. При записи файла на дискету для него по одному выделяются свободные кластеры (выбирается первый свободный кластер с наименьшим номером). При этом вся информация файла не будет храниться в одной непрерывной области диска. Файл оказывается как бы «размазанным» по дискете. Когда файлы копируются на новую дискету, их расположение становится экономичным. Если же удаляются или создаются какие-либо данные, размещение информации на дискете становится запутанным. Контроллер может выполнять до 15 операций: поиск дорожки, чтение и запись одного сектора, форматирование дорожки, калибровку диска, определение статуса накопителя и т.п. Чтение файла включает его поиск в каталоге, определение его места на диске (с помощью ТРФ) и выполнение операций чтения каждого его сектора. Для этого необходимо включить электродвигатель привода и подождать, пока он наберет требуемую скорость вращения; найти нужную дорожку и ждать сигнала завершения этой операции (он вырабатывается и направляется на вход IRQ6 контроллера прерываний); выполнить инициализацию контроллера прямого доступа к памяти (ПДП) для пересылки данных в ОЗУ; передать контроллеру дискет команду для чтения и ожидать поступления сигнала IRQ6, указывающего, что пересылка данных завершена; получить сведения о статусе контроллера дискет; выключить электродвигатель привода. Основными портами первого контроллера НГМД являются: 3F2h – регистр цифрового вывода, работающий только на запись (биты 1–0: выбор накопителя – 00 – А, 01 – В, 10 –, 11 – C, для модели АТ бит 1 не используется; бит 2: 1 – разрешение работы контроллера, 0 – сброс контроллера; бит 3: 1 – разрешение работы устройства ПДП и выработки прерывания; биты 7–4: включение электродвигателя – 0001 – А, 0010 – В, 0100 – С, 1000 – D, для модели АТ биты 6, 7 не используются); 3F4h – регистр статуса, работающий только на чтение (биты 3–0: накопитель занят – 0001 – А, 0010 – В, 0100 – С, 1000 – D, для модели АТ биты 2, 3 не используются; бит 4: 1 – контроллер занят операцией чтения или записи; бит 5: 0 – режим ПДП установлен, 1 – режим ПДП сброшен; бит 6: 1 – готовность к приему данных, 0 – готовность к передаче данных; бит 7: 1 – контроллер готов к приему/передаче команд или данных); 3F5h – регистр команд/данных, работающий и на чтение и на запись. В качестве кодов команд используются: 0Fh – поиск дорожки; 66h – чтение данных; 45h – запись данных; 4Dh – форматирование; 07h – калибровка; 04h – определение статуса накопителя.
|