| Методические указания по Организации ЭВМ и систем
Привалко Катерина, гр.22-6, 21.12.2000
Лабораторная работа №4
Диски - это запоминающие устройства, основу которых составляет вращающаяся
пластина с намагниченной поверхностью, на которой сохраняется цифровая
информация. Для считывания и записи данных в дисководе диска имеются головки
считывания-записи. Диски называются также устройствами с произвольным
доступом, поскольку головка считывания-записи может быть независимо
позиционирована в любое место на диске.
Существуют два основных вида дисков: гибкий диск (дискета) и жесткий диск
(диск).
Жесткий диск состоит из нескольких жестких круглых пластинок, покрытых
магнитным материалом. Пластинки вращаются с огромной скоростью (порядка
3600 - 7000 об/мин) (в наше время гораздо больше) в геометрическом корпусе.
Пластинки смонтированы на оси, вращаемой небольшим мотором. Около каждой
стороны пластинки располагается по одной магнитной головке, но эти головки
не соприкасаются с диском, а плавают на воздушной подушке в непосредственной
близости от его поверхности. Головки считывания-записи смонтированы на
позиционерах, перемещаемых вместе и управляемых с помощью другого мотора.
Подавая команды дисковому контроллеру, программа может перемещать блок
головок вдоль радиуса диска, переходя, таким образом, от одного цилиндра к
другому.
Перемещаясь вдоль окружности дорожки, магнитная головка может записывать или
считывать информацию примерно так, как это происходит в бытовом магнитофоне.
Запись выполняется по битам, при этом добавляется различная служебная
информация и информация для контроля данных.
Контроллер диска, соединенный с каждым дисководом проводами либо представляет
собой плату, вставляемую в слот компьютера, либо вмонтированную в материнскую
плату, которая с помощью электрических сигналов управляет диском и головками.
Данные записываются не сплошным потоком, а блоками определенного размера -
секторами. Сектор представляет собой наименьший объем данных, который
записывается или прочитывается контроллером.
Для каждого сектора выполняется контроль записи или чтения. При записи
сектора вычисляется контрольная сумма всех байтов, находящихся в секторе и
эта контрольная сумма записывается на диск в служебную область, расположенную
после сектора. При чтении эта контрольная сумма вычисляется заново и
сравнивается с контрольной суммой, считанной из служебной области. При
несовпадении контроллер сообщает программе об ошибке.
Дорожки нумеруются, начиная от нулевой, головки тоже начиная от нулевой, а
сектора - начиная с первого. Для правильной работы с дисками на физическом
уровне программе недостаточно знать номер нужной головки или дорожки.
Например, она должна знать, сколько головок и сколько дорожек имеет то или
иное дисковое устройство, сколько байт содержится в одном секторе, и многое
другое. Эти характеристики можно определить из таблиц параметров НМД,
заполняемых BIOS в процессе инициализации системы.
Анализируя содержимое CMOS-памяти или установку перемычек на плате в
компьютере, BIOS в процессе инициализации создает таблицу параметров дискеты
DPT (Diskette Parameter Table). Если имеется специальная "дисковая"" система
ввода/вывода, то она сама создает таблицы HDPT.
Адреса таблиц параметров жестких дисков HDPT расположены по адресам,
соответствующим векторам прерываний INT 41h (для первого физического диска)
и INT 46h (для второго физического диска). Наиболее полезная информация,
которую можно извлечь из таблицы параметров диска - это код размера сектора.
Также таблица содержит такие важнейшие значения, как максимальное количество
дорожек и максимальное количество головок.
Программирование контроллера.
Большинство дисковых операций можно выполнить на уровне BIOS. Это самый
простой и надежный способ работы с диском на физическом уровне. Однако в
отдельных случаях вам может потребоваться непосредственный доступ к
контроллеру (например, если вы разрабатываете систему защиты данных от
несанкционированного копирования).
Формат дорожки диска:
| FF | |
| 00 | Прединдексный синхронизирующий промежуток |
| IAM | Индексная адресная метка |
| | Промежуток |
| | Сектор 1 |
| | Промежуток |
| | Сектор 2 |
| | Промежуток |
| ... | |
| | Промежуток |
| | Сектор N |
| | Промежуток |
| | Конечный промежуток |
Каждый сектор на дорожке состоит из областей индекса и данных. Секторы
разделены промежутками. В конце дорожки располагается конечный промежуток,
его размер зависит от скорости вращения диска, длин секторов и других
промежутков. Область индекса содержит информацию о номере дорожки, головки,
сектора, код длины сектора. Область данных, очевидно, содержит данные,
которые хранятся на диске.
Формат сектора.
| IDAM | Адресная метка индекса |
| | Номер дорожки |
| | Номер головки |
| | Номер сектора |
| | Код длины сектора |
| | 2 байта циклического контроля |
| FF | |
| 00 | Промежуток |
| | Адресная метка данных |
| | Адресна |
| | 2 байта циклического контроля |
Функции BIOS для работы с дисками.
Наилучший и самый безопасный способ работы с дисками на физическом уровне -
использование функций базовой системы ввода/вывода 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 |
С помощью функций BIOS можно выполнить низкоуровневое форматирование диска,
как стандартное, так и использующее нестандартный формат дорожки. В любом
случае при записи информации в секторы следует внимательно анализировать
работу программы - ошибки могут привести к разрушению логической структуры.
В результате этого могут появиться потерянные каталоги и файлы. Все опасные
эксперименты лучше проводить на дискетах, и только когда вы уверены
безошибочной работе программы, можно "допустить" ее к жесткому диску.
PS Главный недостаток этой работы - отсутствие конкретной информации по собственному
винчестеру, главное достоинство - много информации общего характера, хотя и не
так полно, как во многих книгах. Разумеется, повторять книги и не требуется,
т.е. объем скорее избыточен, чем достаточен. Работа защищена на оценку отлично.
|