Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Богода отчеты / floppy_chast_2.docx
Скачиваний:
19
Добавлен:
09.06.2015
Размер:
797.62 Кб
Скачать

Часть 2. Исследование особенностей работы дисковой подсистемы

2.2. Изучение влияния параметра sk в командах "Чтение данных" и "Чтение

удаленных данных":

А) Выполнить команду "Запись данных" для сектора 3 дорожки 1.

Командная фаза:

MT MFM

КОП1: 0 1 000101

HDS DS0 DS1

КОП2: 00000 0 0 0

(HDS=0 – номер головки; DS1=0 и DS0=0 – номер дисковода)

С: 00000001 – Номер дорожки (1)

Н: 00000000 – Номер головки (0)

R: 00000011 – Номер сектора (3)

N: 00000010 – Код размера сектора (02h = 512 байт - стандартно)

EOT: 00010010 – Количество секторов на дорожке (12h=18d - стандартно)

GPL: 00011011 – Длина межсекторного промежутка для операций «Чтение» и «Запись» (из таблицы параметров дискеты = 1Вh)

DTL: 11111111 – Максимальная длина передаваемых данных (используется, если не задана длина сектора, иначе – берется из таблицы параметров дискеты = FFh)

Байты результата:

ST0 = 00000000 - регистр состояния КГД

ST1 = 00000000 - регистр состояния КГД

ST2 = 00000000 - регистр состояния КГД

//нулевые значения этих регистров говорят о том, что операция записи завершена успешно

C = 00000001 – номер дорожки (1)

H = 00000000 – номер головки (0)

R = 00000100 – номер сектора (4)

//мы записали данные в 3 и автоматически головка переместилась на следующий сектор (4)

N = 00000010 – код размера сектора (02 – 512 байт - стандартно)

б) Выполнить команду "Чтение данных" при SK=0 и SK=1.

1) SK = 0

Командная фаза:

MT MFM SK

КОП1: 0 1 0 00110

// SK – SKIP – пропуск данных, не соответствующих типу команды чтения.

В данном случае мы производим чтение данных и SK=0, что означает, что мы будем читать любые данные: и обычные, и удаленные.

HDS DS0 DS1

КОП2: 00000 0 0 0

(HDS=0 – номер головки; DS1=0 и DS0=0 – номер дисковода)

С: 00000001 – Номер дорожки (1)

Н: 00000000 – Номер головки (0)

R: 00000011 – Номер сектора (3)

N: 00000010 – Код размера сектора (02h = 512 байт - стандартно)

EOT: 00010010 – Количество секторов на дорожке (12h=18d - стандартно)

GPL: 00011011 – Длина межсекторного промежутка для операций «Чтение» и «Запись» (из таблицы параметров дискеты = 1Вh)

DTL: 11111111 – Максимальная длина передаваемых данных (используется, если не задана длина сектора, иначе – берется из таблицы параметров дискеты = FFh)

Байты результата:

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

2) SK = 1

Командная фаза:

MT MFM SK

КОП1: 0 1 1 00110

// SK – SKIP – пропуск данных, не соответствующих типу команды чтения.

В данном случае мы производим чтение данных и SK=1, что означает, что мы будем читать обычные данные и пропускать удаленные.

HDS DS0 DS1

КОП2: 00000 0 0 0

(HDS=0 – номер головки; DS1=0 и DS0=0 – номер дисковода)

С: 00000111 – Номер дорожки (7)

Н: 00000000 – Номер головки (0)

R: 00000111 – Номер сектора (7)

N: 00000010 – Код размера сектора (02h = 512 байт - стандартно)

EOT: 00010010 – Количество секторов на дорожке (12h=18d - стандартно)

GPL: 00011011 – Длина межсекторного промежутка для операций «Чтение» и «Запись» (из таблицы параметров дискеты = 1Вh)

DTL: 11111111 – Максимальная длина передаваемых данных (используется, если не задана длина сектора, иначе – берется из таблицы параметров дискеты = FFh)

Байты результата:

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

в) Выполнить команду "Чтение удаленных данных" при SK=0 и SK=1.

1) SK = 0

Командная фаза:

MT MFM SK

КОП1: 0 1 0 01100

// SK – SKIP – пропуск данных, не соответствующих типу команды чтения.

В данном случае мы производим чтение удаленных данных, а данные на самом деле обычные, но т.к. SK=0, то мы будем читать любые данные: и обычные, и удаленные.

HDS DS0 DS1

КОП2: 00000 0 0 0

(HDS=0 – номер головки; DS1=0 и DS0=0 – номер дисковода)

С: 00000001 – Номер дорожки (1)

Н: 00000000 – Номер головки (0)

R: 00000011 – Номер сектора (3)

N: 00000010 – Код размера сектора (02h = 512 байт - стандартно)

EOT: 00010010 – Количество секторов на дорожке (12h=18d - стандартно)

GPL: 00011011 – Длина межсекторного промежутка для операций «Чтение» и «Запись» (из таблицы параметров дискеты = 1Вh)

DTL: 11111111 – Максимальная длина передаваемых данных (используется, если не задана длина сектора, иначе – берется из таблицы параметров дискеты = FFh)

Байты результата:

ST0 = 00000000 - регистр состояния КГД

ST1 = 00000000 - регистр состояния КГД

ST2 = 01000000 - регистр состояния КГД

Бит СМ (ST2.6) имеет единичное значение, что означает, что во время операции чтения обнаружен сектор с маркером удаленных данных.

C = 00000001 – номер дорожки (1)

H = 00000000 – номер головки (0)

R = 00000011 – номер сектора (3)

N = 00000010 – код размера сектора (02 – 512 байт - стандартно)

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

2) SK = 1

Командная фаза:

MT MFM SK

КОП1: 0 1 1 01100

// SK – SKIP – пропуск данных, не соответствующих типу команды чтения.

В данном случае мы производим чтение удаленных данных, а данные на самом деле обычные и т.к. SK=1, то мы должны пропускать обычные данные и читать удаленные, каковых не имеем в секторе 5 на дорожке 21.

HDS DS0 DS1

КОП2: 00000 0 0 0

(HDS=0 – номер головки; DS1=0 и DS0=0 – номер дисковода)

С: 00000001 – Номер дорожки (1)

Н: 00000000 – Номер головки (0)

R: 00000011 – Номер сектора (3)

N: 00000010 – Код размера сектора (02h = 512 байт - стандартно)

EOT: 00010010 – Количество секторов на дорожке (12h=18d - стандартно)

GPL: 00011011 – Длина межсекторного промежутка для операций «Чтение» и «Запись» (из таблицы параметров дискеты = 1Вh)

DTL: 11111111 – Максимальная длина передаваемых данных (используется, если не задана длина сектора, иначе – берется из таблицы параметров дискеты = FFh)

Фаза результата:

ST0 = 01000000 - регистр состояния КГД

ST1 = 10000000 - регистр состояния КГД

ST2 = 01000000 - регистр состояния КГД

C = 00000001 – номер дорожки (1)

H = 00000000– номер головки (0)

R = 00010010 – номер сектора (12h=18d) – прочитана вся дорожка

N = 00000010 – код размера сектора (02 – 512 байт - стандартно)

Имеем аварийное завершение операции (биты 7 и 6 регистра ST0 равны 0 и 1 соответственно); бит 7 регистра ST1 равен 1 (несуществующий номер сектора), что говорит о том, что контроллер пытался прочесть сектор с адресом, большим существующего; бит СМ (ST2.6) имеет единичное значение, что означает, что во время операции чтения обнаружен сектор с маркером удаленных данных.

г) Выполнить команду "Запись удаленных данных" и повторить пункты б) и в).

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

Командная фаза:

MT MFM

КОП1: 0 1 001001

HDS DS0 DS1

КОП2: 00000 0 0 0

(HDS=0– номер головки; DS1=0 и DS0=0 – номер дисковода)

С: 00000001 – Номер дорожки (1)

Н: 00000000 – Номер головки (0)

R: 00000011 – Номер сектора (3)

N: 00000010 – Код размера сектора (02h = 512 байт - стандартно)

EOT: 00010010 – Количество секторов на дорожке (12h=18d - стандартно)

GPL: 00011011 – Длина межсекторного промежутка для операций «Чтение» и «Запись» (из таблицы параметров дискеты = 1Вh)

DTL: 11111111 – Максимальная длина передаваемых данных (используется, если не задана длина сектора, иначе – берется из таблицы параметров дискеты = FFh)

Байты результата:

ST0 = 00000000 - регистр состояния КГД

ST1 = 00000000 - регистр состояния КГД

ST2 = 00000000 - регистр состояния КГД

//форматы регистров состояния описаны выше, нулевые значения этих регистров говорят о том, что операция записи завершена успешно

C = 00000001 – номер дорожки (1)

H = 00000000 – номер головки (0)

R = 00000100 – номер сектора (4)

//мы записали данные в сектор 3 и автоматически головка переместилась на следующий сектор 4

N = 00000010 – код размера сектора (02 – 512 байт - стандартно)

Соседние файлы в папке Богода отчеты