Рефераты

Курсовая: Работа с дисками

  • Поиск

00 00 11 11
00 00 0HDS DS1DS0

Первые несколько команд имеют одинаковый формат параметров и одинаковые байты

результата.

Приведем байты параметров, которые должны следовать за командами и байты

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

КомандаБайты параметровБайты результата

Чтение данных

Чтение удаленных данных

Запись данных

Запись удаленных данных

Чтение данных с дорожки

Сканирование до "равно"

Сканирование до "меньше" или "равно"

Сканирование до "больше" или "равно"

C, H, R, N, EOT,EOT, GPL, DTLST0, ST1, ST2,C, H, R, N
Форматирование дорожкиN, SC, GPL, D ST0, ST1, ST2,C, H, R, N
Чтение индексных данныхОтсутствуют ST0, ST1, ST2,C, H, R, N
ИнициализацияОтсутствуют Отсутствуют
Чтение состояния прерыванияОтсутствуют ST0, PCN
Определить параметры

1 байт:

мл. тетрада - HUT

ст. тетрада - SRT

2 байт:

бит 0 - ND

биты 1-7 - HLT

Отсутствуют
Чтение состояния накопителяОтсутствуют ST3
ПоискCОтсутствуют

После выполнения команды центральный процессор должен получить от контроллера

байты результата. Среди них - содержимое внутренних регистров состояния

контроллера ST0, ST1, ST2, ST3. Опишем назначение отдельных бит этих

регистров.

Формат регистра ST0:

БитыНазваниеНазначение
1, 0US1, US2Код НГМД
2HDНомер головки
3NCУстанавливается, если НГМД не готов выполнить команду чтения или записи
4ECСбой оборудования
5SEЗавершена команда "Поиск"
7, 6I, C

Код прерывания:

00 - нормальное завершение;

01 - аварийное завершение;

10 - неправильная команда;

11 - нет готовности НГМД

Формат регистра ST1:

БитыНазваниеНазначение
0MAПропуск адресной метки. Этот бит устанавливается в 1, если контроллер не может найти адресную метку
1NNЗащита записи. Устанавливается, если при выполнении операции контроллер получает от НГМД сигнал защиты записи
2NDСектор не найден
3-Зарезервировано
4ORПереполнение. Процессор не успевает выполнять обмен данными с контроллером
5DEОшибка в данных при проверке контрольной суммы
6-Зарезервировано
7ENНесуществующий сектор, устанавливается, когда контроллер пытается прочесть сектор со слишком большим адресом

Формат регистра ST2:

БитыНазваниеНазначение
0MDПропущен адресный маркер в поле данных
1BCДорожка не читается
2SNОшибка сканирования. Устанавливается, если при выполнении команды сканирования контроллер не может найти требуемую дорожку
3SHСканирование выполнено, дорожка найдена
4WCОшибка адреса дорожки
5DDОшибка в поле данных
6CMВо время операции чтения или сканирования не обнаружен сектор с маркером удаленных данных
7-Зарезервировано

Формат регистра ST3:

БитыНазваниеНазначение
1, 0US1, US2Код выбранного НГМД
2HDНомер выбранной головки
3TSИспользуется режим двухсторонней записи
4T0Головка установлена на дорожку 0
5RDYНГМД готов к работе
6WPЗащита записи на диске
7FTНеисправность НГМД

Дополнительно перед выполнением операции и после ее завершения надо

проанализировать содержимое описанного выше регистра основного состояния

контроллера RS.

Команда "Определить параметры" задает времена задержки для трех внутренних

таймеров контроллера. Первый байт параметров состоит из двух полей - SRT и

HUT. Поле SRT задает временной интервал между шаговыми импульсами двигателя

перемещения головки. Это поле имеет ширину 4 бита. Поле HUT определяет время

разгрузки головки и тоже имеет ширину 4 бита.

Второй байт параметров состоит из полей HLT и ND. Поле HLT имеет ширину 7 бит

и определяет время загрузки головки. Бит ND предназначен для использования

канала прямого доступа ПДП - если этот бит установлен в 0, то ПДП

используется, иначе обмен данными идет через центральный процессор.

Параметры для команды "Определить параметры" лучше всего взять из таблицы

параметров дискеты, которая заполняется базовой системой ввода/вывода BIOS во

время инициализации системы. Конечно, если вам нужны нестандартные параметры,

вы можете использовать свои, ориентируясь на оригинальные значения из таблицы

параметров дискеты.

Команда "Инициализация" может выполняться одновременно для всех накопителей.

По этой команде головки перемещаются на нулевую дорожку.

Команда "Поиск" используется для установки головки на нужную дорожку. Поиск

может выполняться одновременно для нескольких накопителей.

Команда "Чтение состояния прерывания" может вырабатываться после завершения

других команд для выяснения состояния контроллера после прерывания. Эту

команду удобно использовать после команд "Поиск" или "Инициализация".

После поступления команды "Чтение данных" загружается головка, контроллер

считывает метки адреса идентификатора ID и поля ID. Контроллер

последовательно считывает номера секторов, и как только считанный номер

совпадет с запрошенным, контроллер байт за байтом считывает данные,

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

каналу прямого доступа к памяти. При передаче данных контроллер должен

обслуживаться каждые 27 мкс в режиме одинарной плотности и 13 мкс в режиме

двойной плотности, иначе в регистре состояния ST3 устанавливается флаг

переполнения OR.

Если контроллер не может найти нужный сектор, то в регистре ST1

устанавливается флаг отсутствия данных ND. При ошибке чтения данных,

обнаруженной схемами избыточного циклического контроля CRC , устанавливается

флаг ошибки данных DE.

При считывании адресной метки удаленных данных в регистре ST2 и сброшенном в

0 бите SK команды флаг CM устанавливается в 1, читаются все данные из этого

сектора, затем выполнение команды прекращается.

Поле команды MT позволяет задать выполнение многодорожечной операции, при

которой контроллер считывает данные с обеих сторон дискеты. Поле MFM

определяет плотность обрабатываемой информации: значение 0 соответствует

одинарной плотности, 1 - двойной.

Если поле команды N содержит 0, то поле DTL определяет объем передаваемых

данных. Если поле N содержит отличное от нуля значение, поле DTL игнорируется

и должно содержать значение 0FFh.

Выполнение команды "Запись" аналогично. В режиме записи обмен данными

процессора с контроллером должен происходить каждые 31 мкс в режиме одинарной

плотности и каждые 15 мкс в режиме двойной плотности.

По команде "Запись удаленных данных" в начале поля данных записывается

адресная метка удаленных данных вместо обычной адресной метки данных.

По команде "Чтение данных дорожки" считываются все поля данных с каждого

сектора дорожки как непрерывные блоки данных. С помощью этой команды можно

выполнять многодорожечные операции и пропуски.

Команда "Чтение индексных данных" позволяет определить положение головки.

Команда "Форматирование дорожки" форматирует всю дорожку - на нее

записываются интервалы, адресные метки, поля индексных данных и поля данных.

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

при форматировании контроллер запрашивает параметры C, H, R и N.

Группа команд "Сканирование" позволяет сравнивать данные, поступающие от

контроллера и от центрального процессора. Контроллер выполняет побайтное

сравнение и ищет сектор, удовлетворяющий заданному условию. При выполнении

условия сканирования в регистре состояния ST2 устанавливается флаг SH, в

противном случае - флаг SN.

4.3 Использование команд контроллера НГМД.

Выполнив сброс контроллера, вам надо его проинициализировать, указав все

рабочие параметры. Затем можно выдавать контроллеру команды, каждый раз

проверяя регистр основного состояния ST и анализируя байты результата

ST0...ST3. Можно предложить следующую последовательность действий:

• сброс контроллера выдачей в порт 3F2h байта с битом 2,

установленным в 0;

• разрешение работы контроллера выдачей в этот же порт байта с битом

2, установленным в 1;

• выдача контроллеру команды "Инициализация";

• выдача контроллеру команды "Определить параметры";

• включение двигателя и ожидание в течение примерно 0,5 с (время

разгона двигателя);

• установка головки в нужное положение командой "Поиск";

• проверка результатов установки командой "Чтение состояния

прерывания";

• для IBM PC/AT установка нужной скорости передачи данных выдачей в

порт 3F7h байт с соответствующим значением: 0 для дискет с высокой плотностью

записи (HD), 1 для двойной плотности (DD) и 2 для одинарной (SD);

• если установка головок выполнена правильно, можно выдавать команды

чтения или записи данных (перед этим надо правильно запрограммировать

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

ПДП).

4.4 Немного о контроллере прямого доступа к памяти.

Приведем основные сведения, необходимые для того чтобы разобраться в

программе, демонстрирующей использование команд контроллера НГМД.

Контроллер прямого доступа к памяти (ПДП) имеет несколько каналов и для IBM

PC/AT состоит из двух микросхем Intel 8237A (или аналогичных). Контроллер

НГМД использует канал с номером 2.

Перед началом инициализации контроллера ПДП программа должна послать в порты

0Bh и 0Ch код операции, которая будет выполняться - 46h для операции чтения и

4Ah для операции записи.

В процессе инициализации программа должна сообщить контроллеру ПДП адрес

буфера, куда ему следует поместить данные или откуда надо взять данные, и

длину передаваемых данных в байтах.

Адрес необходимо представить в виде номера страницы и смещения. Для

контроллера ПДП компьютера IBM PC/AT используется 8-битовый номер страницы и

16-битовое смещение. Например, для адреса 23456h номер страницы будет равен

2h, а смещение - 3456h.

Для программирования канала 2 контроллера ПДП программа должна сначала

вывести младший байт смещения в порт с адресом 04h, затем вывести в этот же

порт старший байт смещения и, наконец, вывести байт номера страницы в порт с

адресом 81h.

Длина передаваемых данных выводится аналогичным образом в порт с адресом 05h

- сначала младший байт длины, затем старший.

После определения режима работы канала, адреса буфера и длины передаваемых

данных, программа должна разрешить работу контроллера ПДП, выдав в порт с

адресом 0Ch байт 2. Теперь канал прямого доступа готов к работе и будет ждать

данные от контроллера НГМД.

Глава 5. Функции BIOS для работы с дисками.

Наилучший и самый безопасный способ работы с дисками на физическом уровне в

среде MS-DOS - использование функций базовой системы ввода/вывода BIOS. Эти

функции учитывают все особенности аппаратуры и предоставляют достаточно

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

Вся дисковая подсистема обслуживается прерыванием INT 13h . Это прерывание

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

занести ее код в регистр AH. При этом в другие регистры следует записать

параметры - номер НМД или НГМД, номер цилиндра, головки, адрес таблиц

параметров НМД или НГМД и т. д.

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

детальным описанием этих функций. В примечании к описанию функций мы будем

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

Номер функцииОписание
00hСброс дисковой системы
01hОпределение состояния дисковой системы
02hЧтение сектора
03hЗапись сектора
04hПроверка сектора
05hФорматирование дорожки
06hФорматирование дорожки НМД
07hФорматирование НМД
08hПолучить текущие параметры НГМД или НМД
09hИнициализация таблиц параметров НМД
0AhЧтение длинное (только для НМД)
0BhЗапись длинная (только для НМД)
0ChПоиск цилиндра (только для НМД)
0DhАльтернативный сброс НМД
0EhЧтение буфера сектора (только для НМД)
0FhЗапись буфера сектора (только для НМД)
10hПроверка готовности НМД
11hРекалибровка НМД
12hПроверка памяти контроллера НМД
13hПроверка НМД
14hПроверка контроллера НМД
15hПолучить тип НМД или НГМД
16hПроверка замены диска
17hУстановка типа дискеты
18hУстановка среды носителя данных для форматирования
19hПарковка головок (только для НМД)
1AhФорматирование НМД с интерфейсом ESDI

5.1 Сброс дисковой системы.

На входе:AH00h
DLАдрес устройства НМД или НГМД (0, 1, ..., 80h, 81h, ...)
На выходе:-
Примечание:PC, XT, AT, PS/2

Эта функция вызывает сброс и рекалибровку дискового контроллера (в ходе этой

процедуры головки устанавливаются на нулевую дорожку). Если в байте адреса

старший бит (бит 7) установлен в 1, выполняется сброс контроллера НМД.

Сброс рекомендуется выполнять после того, как произошла ошибка при выполнении

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

повторить операцию.

Адрес устройства, равный 0, соответствует первому НГМД (A:), 1 - второму (B:)

и т. д. Адреса 80h, 81h соответствуют первому и второму НМД, соответственно.

5.2 Определение состояния дисковой системы.

На входе:AH01
DLАдрес устройства НГМД или НМД (0, 1, ..., 80h, 81h, ...)
На выходе:ALСостояние устройства после завершения последней операции
Примечание:PC, XT, AT, PS/2

Эта функция может быть использована для анализа результата выполнения

операции и получения кода ошибки. Функция берет передаваемый в регистре AL

код ошибки из области данных BIOS (байт с адресом 0000h:0441h).

Код ошибки может принимать следующие значения:

ЗначениеОписание
00hУспешное завершение операции
01hНеправильная команда
02hНе найдена адресная метка
03hПопытка записи на диск, защищенный от записи
04hСектор не найден
05hОшибка при сбросе НМД
06hПроизошла замена дискеты
07hНеправильные параметры НМД
08hПереполнение канала прямого доступа ПДП при работе с НГМД
09hПереход за границу 64 Кбайт при работе с ПДП
0AhОбнаружен плохой сектор (только для НМД)
0BhОбнаружена плохая дорожка (только для НМД)
0ChНеправильный номер дорожки
0DhНеправильный номер сектора при форматировании (только для НМД)
0EhОбнаружена адресная метка управляющих данных (только для НМД)
0FhОшибка ПДП при работе с НМД
10hОбнаружена ошибка в контрольной сумме CRC /ECC
11hДанные скорректированы с использованием ECC (только для НМД)
20hСбой контроллера
40hСбой при поиске дорожки
80hТаймаут - программа не успевает обрабатывать данные
AAhНМД не готов
BBhНеизвестная ошибка (только для НМД)
CChСбой при записи (только для НМД)
E0hОшибка регистра состояния НМД
FFhОшибка операции чтения (только для НМД)

5.3 Чтение сектора.

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

1, если произошла ошибка,

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

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

Эта функция позволяет прочитать один или несколько секторов диска в буфер,

находящийся в оперативной памяти. Для НМД номер дорожки и номер сектора

задаются следующим образом: биты 5...0 регистра CX задают номер сектора, а

биты 15...6 - номер дорожки. Перед чтением необходимо подготовить таблицу

параметров НГМД или НМД.

5.4 Запись сектора.

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

1, если произошла ошибка,

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

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

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

перемещения данных - данные записываются из буфера в один или несколько

секторов диска. Необходимо отметить, что при работе с НГМД не для всякой BIOS

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

раскрутится до рабочей скорости. В результате программа может получить

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

контроллер НГМД функцией 00H и повторить операцию записи три раза.

5.5 Проверка сектора.

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

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

существуют и их можно прочесть. Данные проверяются по методу циклического

избыточного контроля (CRC). Адрес буфера не нужен, так как при проверке

секторов чтение данных в оперативную память не выполняется.

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

На входе:AH05h
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 номером.

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

остановимся подробнее - фактор чередования и адрес буфера формата.

Что такое фактор чередования? Этот фактор определяет последовательность

расположения секторов на дорожке. Секторы могут располагаться в порядке своих

номеров, через один, через два и т. д. Способ размещения секторов

определяется значением фактора чередования.

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

указания величины фактора чередования при выполнении низкоуровневого

форматирования.

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

последовательными номерами на дорожке диска? При последовательном

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

обрабатывать смежные секторы за один проход дорожки.

Например, программа считывает последовательно второй и третий сектор. В

момент времени, когда второй сектор уже считан, при быстром вращении диска к

моменту начала чтения третьего сектора головки могут оказаться в середине

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

головки окажутся в начале третьего сектора. Поэтому если программа

последовательно обращается к смежным секторам, может получиться так, что для

чтения каждого сектора потребуется один оборот. Если же секторы будут

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

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

подбора оптимального фактора чередования при форматировании НМД можно

использовать специальные программы или делать это методом проб и ошибок,

задавая каждый раз новое значение фактора и проверяя быстродействие диска.

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

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

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

массив четырехбайтовых элементов - номер дорожки, головки, сектора и код

размера сектора. Код размера сектора может иметь следующие значения:

КодРазмер сектора в байтах
0128
1256
2512
31024

Количество элементов в массиве должно быть равно количеству секторов,

создаваемых на дорожке. То есть для каждого сектора буфер формата должен

содержать один четырехбайтовый элемент. Для НМД буфер формата должен

представлять из себя массив размером 512 байт. В начале этого массива для

каждого сектора необходимо подготовить двухбайтовые элементы. Первый байт

содержит признак - хороший это сектор (00) или плохой (80h), второй байт -

номер сектора. Задавая последовательность номеров в буфере формата

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

5.7 Форматирование дорожки НМД.

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

1, если произошла ошибка,

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

Примечание:PC, XT

Функция форматирования дорожки с кодом 6 предназначена только для НМД. При

необходимости она устанавливает флаг плохого сектора. Буфер формата

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

5.8 Определение текущих параметров НГМД или НМД.

На входе:AH08h
DLАдрес НГМД или НМД (0, 1, ..., 80h, 81h, ...)
На выходе:AHСостояние устройства после завершения последней операции
CF

1, если произошла ошибка,

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

BLТип устройства (только для IBM PC/AT и PS/2)
DLКол-во устройств, подключенных к первому контроллеру диска
DHМаксимальный номер головки
CLМаксимальный номер сектора
CHМаксимальный номер цилиндра
ES:DIАдрес таблицы параметров НГМД
Примечание: PC, XT, AT, PS/2

С помощью этой функции программа может определить тип НГМД или НМД,

количество устройств, подключенных к первому контроллеру НМД и другие

параметры, которые нужны программе для организации доступа к диску на

физическом уровне.

5.9 Инициализация контроллера НМД.

На входе:AH09h
DLАдрес НМД (80h, 81h, ...)
На выходе:AHСостояние устройства после завершения последней операции
CF

1, если произошла ошибка,

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

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

Функцию инициализации контроллера НМД применяют после изменения таблиц

параметров жесткого диска. Функции BIOS "узнают" о внесенных в таблицы

изменениях и инициализируют соответствующим образом контроллер НМД.

5.10 Чтение секторов длинное (НМД).

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

1, если произошла ошибка,

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

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

Функция "Чтение секторов длинное" отличается от обычной функции чтения (с

кодом 02h) тем, что она дополнительно считывает в буфер данных 4 байта кода

коррекции ошибки (ECC).

5.11 Поиск дорожки (НМД).

На входе:AH0Ch
CHНомер дорожки
CLНомер сектора
DHНомер головки
DLАдрес НМД (80h, 81h, ...)
На выходе:AHСостояние устройства после завершения последней операции
CF

1, если произошла ошибка,

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

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

С помощью функции 0Ch программа может подвести головки к дорожке с заданным

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

дорожки, они выполняют поиск самостоятельно.

5.12 Альтернативный сброс НМД.

На входе:AH0Dh
DLАдрес НМД (80h, 81h, ...)
На выходе:AHСостояние устройства после завершения последней операции
CF

1, если произошла ошибка,

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

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

Страницы: 1, 2, 3


© 2010 Собрание рефератов