Работа с физическими и логическими секторами
В современных ЖД используются приводы с обратной связью. В них контроллер постоянно получает информацию о местоположении головок путем постоянного чтения определенных участков диска (меток). Эти метки создаются специальными программами низкого форматирования ЖД (Partition Magic Pro и тп). При этом каждая дорожка размечается и проверяется. Для доступа к конкретному сектору на диске используют трехмерные координаты (номер дорожки, головки, сектора). При низком форматировании записывается информация, определяющая разметку цилиндров диска на сектора и их нумерацию. Структура формата включает в себя байты синхронизации, указывающие на начало каждого сектора, идентификационные заголовки, номера головки, сектора и цилиндра. Идет маркировка дефектных секторов – если в процессе считывания возникает ошибка, то сектор маркируется как дефектный.
Существуют 2 системы нумерации секторов на диске: абсолютная (физическая) и относительная (логическая).
Абсолютная относится к физическому диску в целом, независимо от того разбит он но логические диски или нет. Абсолютное местоположение сектора требует указания номеров стороны головок, цилиндра (дорожки) и сектора. Нумерацию секторов принято начинать с 1. В больших дисках из-за несоответствия физической и BIOS нумерации секторов используют сквозную нумерацию всех физических секторов ЖД (абсолютная адресация LBA)
Относительная нумерация секторов ЖД ведется в пределах логического диска (C:, D:, E: и тп).
Логическая последовательность секторов связана с абсолютной, согласно алгоритму (см. таблицу).
Таблица 4.1. Логическая последовательность секторов
Сектор | Головка | Цилиндр | Номер логического сектора |
1… 17 | 0-16 | ||
1… 17 | 17-33 | ||
1… 17 | 34-50 | ||
1… 17 | 51-67 | ||
1… 17 | 68-84 | ||
1… 17 | 85-101 | ||
И т.д. |
Параметры используемых системой ЖД записываются в CMOS-память. ОС через BIOS при своей работе с ЖД использует эту информацию.
Формирование физической структуры диска состоит в создании на диске концентрических дорожек, которые, в свою очередь, делятся на секторы. Для этого в процессе форматирования магнитная головка дисковода расставляет в определенных местах диска метки дорожек и секторов.
Логическая структура магнитного диска представляет собой совокупность секторов (емкостью 512 байтов), каждый из которых имеет свой порядковый номер. Сектора нумеруются в линейной последовательности от первого сектора нулевой дорожки до последнего сектора последней дорожки. Минимальным адресуемым элементом является сектор. При записи файла на диск будет занято всегда целое количество секторов, соответственно минимальный размер файла - это размер одного сектора, а максимальный соответствует общему количеству секторов на диске.
Файл записывается в произвольные свободные сектора, которые могут находиться на различных дорожках.
Для того чтобы можно было найти файл по его имени, на диске имеется каталог, представляющий собой базу данных. Запись о файле содержит имя файла, адрес первого сектора, с которого начинается файл, объем файла, а также дату и время его создания
Чтение или запись определенных секторов диска в основном используется при доступе к каталогам диска или его таблице размещения файлов, сектора для которых всегда расположены в одном и том же месте. DOS и BIOS предоставляют функции для чтения и записи определенных секторов. Однако они указывают сектора по-разному. Процедура BIOS требует информации о номере стороны, номере дорожки и номере сектора (физически). Функции DOS указывают сектор одним номером, который называется логическим номером сектора. Начиная с наружного обода диска, секторам присваиваются последовательно возрастающие номера. Этот метод может быть использован для дисков произвольного размера и типа. Отсчет логических секторов начинается со стороны 0 дорожки 0 сектора 1 и продолжается на стороне 1 с дорожки 0, после чего переходит на сторону 0 дорожку 1 и т.д.
BIOS поддерживает следующие режимы работы с ЖД:
NORMAL MODE – нормальный режим, при котором ни BIOS, ни контроллер ЖД не производят никаких преобразований при доступе к ЖД.
LARGE MODE – режим доступа к дискам большого размера. BIOS отображает меньшее количество цилиндров, уменьшив их в 2^n раз, тогда количество головок уменьшается в такое же количество раз.
LBA MODE (Logical Block Adressing) – режим логической адресации блоков. Количество цилиндров, головок и секторов, указанное в конфигурации BIOS, может не соответствовать количествам, физически находящимся на ЖД. Во время доступа контроллер преобразует логические адреса, описанные секторами, головками и цилиндрами в реальные физические адреса внутри ЖД непосредственно. (скорее всего наоборот, физические преобразует в логические!)
В режиме LBA параметры стандартных вызовов транслируются в линейный адрес, который вычисляется однозначно в «естественном» порядке счета секторов.
LBA = (C*HM+H)*SM+S-1, где HM, SM – общее количество головок и секторов; C, H, S – текущий физические цилиндр, головка и сектор.