62048 (694767), страница 2
Текст из файла (страница 2)
^^&верстия и зависит только от скорости вращения дисковода в
^^&момент форматирования.
Поля GAP1..GAP4 служат прежде всего для организации задержки
при выдачи порций данных с дискеты, а также для компенсации раз-
бросов физической длины различных полей, возникающих из-за несо-
вершенства механизма дисковода ( конкретнее, из-за нестабильнос-
ти вращения ). Маркеры служат для выделения определенных облас-
тей на диске: идентификатора дорожки, заголовка сектора или об-
ласти данных. Для того что бы маркеры можно было отличить от дан-
нных, их записывают со специально нарушенным кодом синхронизации.
Четвертый байт маркера обозначает тип выделяемой им области. Кон-
кретно в маркере области данных значение fb соответствует обыч-
ным данным, а f8 - удаленным.
Целостность информации в областях данных контролируется с по-
мощью циклического контрольного кода, контрольные числа которого
записываются после определенных областей. При считывании с диске-
ты контроллер самостоятельно высчитывает контрольную сумму, а за-
тем сравнивает ее со считанной с диска. Эта контрольная сумма,
называемая кодом циклического контороля ( CRC - Cyrcle Redundency
Contol ), подсчитывается с помощью полинома следующего вида :
X16 + X12 + X5 + X + 1
В случае несовпадении этих двух чисел выставляется флаг ошибки.
@ Интерфейс адаптера НГМД
Функции сигналов адаптера НГМД следующие:
┌─────────────┬─────────────────────────────────────────────────┐
│Наименование │ Выполняемая функция │
├─────────────┼─────────────────────────────────────────────────┤
│High/Normal │ Используется для переключения схем записи/чтения│
│ │ для работы с нормальной и высокой плотностью │
│Index │ Перепад напряжения с высокого уровня на низкий │
│ │ при обнаружение индексного отверстия │
│Select │ Выбор накопителя ( присутствует постоянно ) │
│Mot │ Включение мотора дисковода │
│Direction │ Направление перемешения головок при сигнале Step│
│ │ низкий уровень - к центру дискеты; │
│ │ высокий уровень - к краю дискеты; │
│Step │ Перемещеие головок на одну дорожку │
│Write data │ Запись информации, каждый импульс вызывает │
│ │ изменение магнитного потока на обратный │
│Write gate │ Разрешение записи информации │
│Track 0 │ Перемещене головок к началу дискеты │
│Write │ Запрет записи на дискеты ( сигнал появляется при│
│ protected │ присутствии дискеты с защитной наклейкой ) │
│Read data │ Перепад напряжения с высокого уровня на низкий │
│ │ соответствуют обнаружению на дискете перехода │
│ │ намагниченности. │
│Select head │ Выбор головки для чтения/записи │
│ │ низкий уровень - головка 1; │
│ │ высокий уровень - головка 0; │
│Ready │ Дискета готова к работе │
│Disk change │ Вставлена новая дискета │
└─────────────┴─────────────────────────────────────────────────┘
Полярность всех сигналов интерфейса (кроме тех, где указано иное)
отрицательная. Сигналы Disk change и High/Normal в IBM PC/XT не
используются.
@ Логическая организация диска
Первая операция, которую необходимо выполнить перед тем, как
дискета будет готова к использованию - это форматирование. Этот
процесс позволяет придать диску его окончательную структуру. В
ходе форматирования определяется количество дорожек и число сек-
торов на дорожке.
MS-DOS предусматривает четыре логических области дискеты:
- загрузочный сектор ( boot record )
- таблица размещения файлов ( file allocation table )
- корневой каталог
- область данных
"Загрузочный сектор
Содержит короткую ( менее 512 байт ) программу начальной загруз-
ки ОС в память компьютера. Независимо от типа ОС и способа форма-
тирования дискеты, эта программа всегда занимает самый первый
сектор на самом первой дорожке диска. Следует различать Boot
record и Master Boot record. Первый находится на дискеты в слу-
чае если эта дискета не системная. Второй же находится исключи-
тельно на системных дисках. Также этот сектор содержит всю важ-
ную информацию о характеристиках диска. Структура этой информации
следующая :
┌────────┬─────────────────┬────┬─────────────────────────────────┐
│Cмещение│ Название │байт│ Описание │
├────────┼─────────────────┼────┼─────────────────────────────────┤
│ 00 │ Команда JMP │ 3 │ Длинный или короткий переход │
│ │ │ │ на программу загрузчика │
│ 03 │ Идентификатор │ 8 │ Идентификатор версии DOS, │
│ │ │ │ с помощью которой отформа- │
│ │ │ │ тирован диск │
│ 0B │ Байт/Сектор │ 2 │ Размер сектора в байтах │
│ 0D │ Сектор/Кластер │ 1 │ Число секторов в кластере │
│ 0E (*)│ Резерв │ 2 │ Количество резервных секторов │
│ 10 │ Число FAT │ 1 │ Число копий FAT на диске │
│ 11 │ Число корневых │ 2 │ Max количество записей в │
│ │ записей │ │ корневом каталоге диска │
│ 13(**)│ Всего секторов │ 2 │ Общее число секторов на диске │
│ 15 │ Носитель │ 1 │ Тип магнитного носителя │
│ 16 │ Сектор/FAT │ 2 │ Число секторов в каждой из FAT │
│ 18 │ Сектор/дорожка │ 2 │ Число секторов на одну дорожку │
│ 1A │ Число головок │ 2 │ Число головок на диске │
│ 1С │ Скрытых секторов│ 4 │ Число скрытых секторов на диске│
│ 20 │ Боьших секторов │ 4 │ Общее число секторов │
│ 22 │ Номер накопителя│ 1 │ Номер накопителя по BIOS'у │
│ 23 │ │ 1 │ Резерв │
│ 24 │ Сигнатура │ 1 │ Содержит число 29 │
│ 25 │ ID тома │ 4 │ Идентификатор тома диска │
│ 29 │ Метка тома │ 11 │ Копия метки тома │
│ 34 │ ID типа FAT │ 8 │ FAT12 или FAT16 -байт │
└────────┴─────────────────┴────┴─────────────────────────────────┘
(*) - ^^&для формата IBM PC длина зарезервированной области всегда
составляет 1 сектор ( сектор загрузчика )
(**)- ^^&если более 65535 то 0
"Таблица размещения файлов ( FAT )
Содержит информацию о месторасположении записанных на дискету
файлов. Системa MS-DOS выделяет для хранения файла, в зависимос-
ти от его длины, один или более кластеров ( кластер - единица
хранения данных на диске, обычно один кластер равен нескольким
секторам ), однако MS-DOS не заботится, чтобы запись файла проис-
ходила последовательно ( скорее наоборот : логика работы MS-DOS
такова, что она всячески способствует фрагментации файлов ), поэ-
тому необходимо хранить информацию, по каким именно кластерам
раскидан данный файл. В силу особой важности этой информации FAT
существует на диске в двух копиях. FAT дискеты состоит из 12-би-
товых элементов. Структура таблицы размещения файлов - следующая:
┌─────────────┬───────────────────────────────────────────┐
│ Элемент FAT │ Выполняемая функция │
├─────────────┼───────────────────────────────────────────┤
│ 0 │ Идентификатор формата │
│ 1 │ Зарезервирован ( должен быть FFF ) │
│ 2 │ Статус кластера 2 │
│ 3 │ Статус кластера 3 │
│ ... │ ... │
└─────────────┴───────────────────────────────────────────┘
Идентификатор формата может принимать
следующие значения :
F0 - 3'5/2/18 ( дискета 3'5, 2 стороны, 18 секторов )
F8 - жесткий диск
F9 - 5'25/2/15 или 3'5/2/9
FC - 5'25/1/9
FD - 5'25/2/9
FE - 5'25/1/8
FF - 5'25/2/8
Статус кластера может быть следующим :
000 - кластер свободен
FF0..FF6 - зарезервирован
FF7 - испорчен
FF8...FFF - последний кластер
иначе - номер следующего кластера файла
Интересно заметить, что, по-видимому, значение статуса 001 яв-
ляется запрещенной комбинацей.
"Корневой каталог
Следует непосредственно за FAT. Содержит информацию об основ-
ных параметрах файлов ( длине, дате создания,...). Каждая запись
в каталоге, соответствуeт тому или иному файлу ( кроме, разумеет-
ся, метки диска ), включает номер первого кластера, назначенного
MS-DOS этому файлу, который используется как точка входа в FAT.
Начиная с этой точки, каждая запись в FAT содержит номер следую-
щего кластера, распеределенного под этот файл, или метку послед-
него кластера. Структура записи в корневом каталоге следующая :
┌─────────┬───────────┬───────────────────────────────────┐
│Cмещение │ Название │ Описание │
├─────────┼───────────┼───────────────────────────────────┤
│ 00 │ Имя │ Имя файла │
│ │ │ 0 если запись свободна │
│ │ │ E5 если файл удален │
│ │ │ 2E запись родительского каталога │
│ 08 │ Расширение│ │
│ 0B │ Атрибуты │ Системный атрибут файла │
│ 0C │ │ Резерв │
│ 16 │ Время │ Время последней перезаписи файла │
│ 18 │ Дата │ Дата последней перезаписи файла │
│ 1A │ Кластер │ Номер первого отведенного кластера│
│ 1C │ Размер │ Размер файла ( 4 байта ) │
└─────────┴───────────┴───────────────────────────────────┘
"Область данных
Именно то место, ради которого и используется дискета - здесь
храниться информация пользователя. MS-DOS рассматривает эту об-
ласть как совокупность кластеров, каждый из которых содержит один
или несколько секторов. Из-за того что первые два поля FAT заре-
зервированы, первому кластеру в области данных присвоен номер 2.
Все каталоги, кроме корневого, также раасматриваются MS-DOS как
файлы особого вида, и поэтому помещаются в область данных.
@Работа BIOS с НГМД
Програмное управление дискетой ( точнее говоря, адаптером НГМД)
осуществляется с помощью драйвера BIOS, вызов которого осущес-
твляется через прерывание int 13. Методика вызова конкретных фун-
кций стандартна, то есть номер функции загружается в ah, ос-
тальные параметры в другие регистры общего назначения, для адре-
совки буферов так же используется регистровая пара es:bx.
Всего стандартный драйвер поддерживает 6 функций работы с НГМД
с номерами от 0 до 5. Перечислим их в порядке возрастания :
0 - Сброс системы НГМД 3 - Записать сектор
1 - Прочитать состояние 4 - Проверить сектор
2 - Прочитать сектор 5 - Разметка дорожки
Все функции выполняются, согласовываясь с базовой дисковой
таблицей, на которую указывает вектор 1e. Разумеется пользова-
тель может модифицировать этот вектор и создать свою таблицу. При
загрузке ОС BIOS инициализирует ее, а DOS модифицирует, чтобы
улучшить производительность дискет. Структура этой таблицы сле-
дующая ( везде, где не сказано иное, время указывается в квантах
системного таймера ).
┌────┬───────────────────────────────────────────────────────────┐
│Смещ│ Содержимое │
├────┼───────────────────────────────────────────────────────────┤
│ 0 │ биты 4-7: время перехода с дорожки на дорожку ( в млс ) │
│ │ биты 0-3: время под'ема головки после чтения/записи │
│ 1 │ бит 0: 1= исп.DMA , 0= DMA не используется │
│ │ биты 2-7: время опускания головок │
│ 2 │ время не остановки двигателя после окончания чтения/записи│
│ 3 │ размер сектора (0=128, 1=256, 2=512, 3=1024) │
│ 4 │ номер последнего сектора на дорожке │
│ 5 │ длина межсекторного промежутка для операций чтения/записи │
│ 6 │ Максимальная длина передаваемых данных │
│ 7 │ длина межсекторного промежутка для операции форматирования│
│ 8 │ символ-заполнитель для форматирования ( обычно f6 ) │
│ 9 │ время позиционирования головок │
│ a │ время разгона мотора (в 1/8-секундных интервалах) │
└────┴───────────────────────────────────────────────────────────┘
Также в BIOS Data Segment содержатся следующие параметры НГМД:
0:043e требуется рекалибрация флоппи-дисковода
(бит 0=A, бит 1=B, etc.)
0:043f мотор дискеты включен (бит 0=drive A, бит 1=B, etc.)
0:0440 время до выкл. мотора. Если 0, то мотор выключается
0:0441 код ошибки дискеты (то же, что возвращается по int 13 )
0:0442 область информации состояния контроллера дискет (7байт)
@ Некоторые форматы дисков, принятые в MS-DOS
Начиная с MS-DOS v2.0 возможна запись/чтение практически лю-
бых физических форматов дискет. Эта возможность осуществляется
использованием механизмом загружаемых драйверов устройств. Появ-
ление в последнее время расширенных версий BIOS'a практически уп-
разнило понятие "стандартный формат", теперь стандартным можно
считать практически любой формат, который сответствует специфика-
ции MS-DOS.
Вообще, появление новых форматов тесно связано с историей раз-
вития DOS. Первоначальная версия MS-DOS v1.0 поддерживала только
формат, обозначенный ниже как (1.0) следующая версия 1.1 добави-
ла (1.1), а версия 2.0 - (2.0). Короче говоря, почти каждая вер-
сия DOS приносила что-то новое. Все, что из этого вышло, пред-
ставлено ниже.
Возможные варианты форматов в зависимости от типа дисковода:
360 Кб дисковод
(1) 160 Kb 40 дорожек 8 секторов 1 сторона
180 Kb 40 дорожек 9 секторов 1 сторона
200 Kb 40 дорожек 10 секторов 1 сторона
(1.1) 320 Kb 40 дорожек 8 секторов