Форматирование дорожки
На входе: | AH = 05h |
AL = Количество секторов, которые нужно создать на дорожке, или Фактор чередования для НМД XT |
|
CH = Номер дорожки | |
CL = Номер сектора | |
DH = Номер головки | |
DL = Адрес дисковода (0, 1, ..., 80h, 81h, ...) | |
ES:BX = Адрес буфера формата, используется для НГМД и НМД машин XT | |
На выходе: | AH = Состояние дисковода после завершения последней операции |
CF = 1, если произошла ошибка, 0, если ошибки нет |
|
Примечание: | PC, XT, AT, PS/2 |
Функция форматирования предназначена для начального формирования структуры дорожки диска, она разрушает все имеющиеся на дорожке данные. С помощью функции 05 вы можете за один раз отформатировать только одну дорожку с указанным номером.
Для этой функции необходимо задать два интересных параметра, на которых мы остановимся подробнее - фактор чередования и буфер формата.
Что такое фактор чередования (Interleave)?
Этот фактор определяет последовательность расположения секторов на дорожке. Сектора могут располагаться в порядке своих номеров, через один, через два и т.д. Способ размещения секторов определяется значением фактора чередования.
Фактор 1 означает последовательное расположение секторов на дорожке в порядке их номеров, т.е. чередование отсутствует. Фактор 2 задает расположение секторов через один, 3 - через два и т.д. На рисунке показано использование фактора чередования при форматировании дорожки:
Все утилиты, предназначенные для подготовки жесткого диска к работе, требуют задания величины фактора чередования при выполнении низкоуровневого форматирования.
Для чего может понадобиться несмежное расположение секторов с последовательными номерами на дорожке диска?
При последовательном расположении секторов может получиться так, что процессор не будет успевать обрабатывать смежные сектора за один проход дорожки. Например, программа считывает последовательно второй и третий сектор. В момент времени, когда второй сектор уже считан, при быстром вращении диска к моменту начала чтения третьего сектора головки могут оказаться в середине третьего сектора и диск совершит еще один оборот, прежде чем головки окажутся в начале третьего сектора. Поэтому если программа последовательно обращается к смежным секторам, может получиться так, что при чтении каждого сектора диск будет совершать один оборот.
Если же сектора будут расположены через один или через два, количество оборотов диска, нужных для обработки последовательности смежных секторов, будет значительно меньше.
Для подбора оптимального фактора чередования можно использовать специальные программы или делать это методом проб и ошибок, задавая каждый раз новое значение фактора и проверяя быстродействие диска.
Займемся теперь буфером формата.
Перед вызовом функции форматирования регистры 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
Отметим, что буфер формата используется только для машин AT. Машины XT при форматировании НМД не используют буфер формата, вместо этого значение фактора чередования указывается при вызове функции форматирования в регистре AL.
При форматировании флоппи-дисков с помощью этой функции таблица параметров дискеты должна содержать правильное значение количества секторов на дорожке и другие параметры.