MS-DOS для программиста

Форматирование дорожки




На входе: AH 05h
AL Количество секторов, которые нужно создать на дорожке, или фактор чередования для НМД IBM PC/XT
CH Номер дорожки
CL Номер сектора
DH Номер головки
DL Адрес устройства НГМД или НМД (0, 1, ..., 80h, 81h, ...)
ES:BX Адрес буфера формата, используется для НГМД и НМД, установленных в IBM PC/XT
На выходе: AH Состояние устройства после завершения последней операции
CF 1, если произошла ошибка,

0, если ошибки нет

Примечание: PC, XT, AT, PS/2

Функция форматирования предназначена для начального формирования структуры дорожки диска. Эта функция разрушает все данные, записанные на дорожке. С помощью функции 05h вы можете за один раз отформатировать только одну дорожку с указанным в регистре CH номером.

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

Что такое фактор чередования ?

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

Фактор 1 предполагает последовательное расположение секторов на дорожке в порядке их номеров, т. е. чередование отсутствует. Фактор 2 задает расположение секторов через один, 3 - через два и т. д. На рис. 1.3 показано использование фактора чередования при форматировании дорожки.

Рис. 1.3. Использование фактора чередования

Некоторые программы, предназначенные для подготовки НМД к работе, требуют указания величины фактора чередования при выполнении низкоуровневого форматирования.

Для чего может понадобиться несмежное расположение секторов с последовательными номерами на дорожке диска?

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

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


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

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

Заметим, что современные контроллеры НМД обеспечивают достаточную большую скорость передачи данных (5-10 Мбайт/с), поэтому при форматировании можно указать фактор чередования , равный 1.

Займемся теперь буфером формата . Перед вызовом функции форматирования в регистры ES:BX следует записать полный адрес буфера формата.

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

Код Размер сектора в байтах
0 128
1 256
2 512
3 1024
Количество элементов в массиве должно быть равно количеству секторов, создаваемых на дорожке. То есть для каждого сектора буфер формата должен содержать один четырехбайтовый элемент.

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

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

Приведем пример подготовленного буфера формата для форматирования дорожки на 17 секторов с фактором чередования, равным 2:

db 00h,01h,00h,0ah,00h,02h,00h,0bh,00h,03h,00h,0ch db 00h,04h,00h,0dh,00h,05h,00h,0eh,00h,06h,00h,0fh db 00h,07h,00h,10h,00h,08h,00h,11h,00h,09h

Отметим, что буфер формата используется только для IBM PC/AT. В IBM PC/XT при форматировании НМД буфер формата не используется. Вместо этого значение фактора чередования указывается в регистре AL при вызове функции форматирования.

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


Содержание раздела