Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


HDD. Методы адресации CHS и LBA.

HDD. Методы адресации CHS и LBA.

Существует два основных метода, используемых для адресации (или нумерации) секторов накопителей. Первый из них называется CHS (Cylinder Head Sector). Это название образовано по трем соответствующим координатам, которые используются для адресации каждого сектора дисковода. Во втором методе, который носит название LBA (Logical Block Address), для адресации секторов накопителя используется только одно значение. В основе метода CHS лежит физическая структура накопителей (а также способ организации его внутренней работы).

Метод LBA, в свою очередь, представляет собой более простой и логический способ нумерации секторов, не зависящий от внутренней физической архитектуры накопителей.

При последовательном считывании данных с накопителя в режиме CHS процесс чтения начинается с цилиндра 0, головки 0 и сектора 1 (который является первым сектором на данном диске), после чего считываются все остальные секторы первой дорожки. Затем выбирается следующая головка и читаются все секторы, находящиеся на этой дорожке. Это продолжается до тех пор, пока не будут считаны данные со всех головок первого цилиндра. Затем выбирается следующий цилиндр, и процесс чтения продолжается в такой же последовательности.

При последовательном считывании данных с накопителя в режиме LBA процесс чтения начинается с сектора 0, после чего читается сектор 1, сектор 2 и т.д. В режиме CHS первым сектором жесткого диска является 0,0,1. В режиме LBA этот же сектор будет сектором 0.

В качестве примера представьте себе накопитель, содержащий один жесткий диск, две головки (используются обе стороны жесткого диска), две дорожки на каждом жестком диске (цилиндры) и два сектора на каждой дорожке. В этом случае можно сказать, что накопитель содержит два цилиндра (две дорожки на каждой стороне), две головки (по одной на сторону), а также два сектора на каждой дорожке. В общей сложности емкость накопителя равна восьми (2×2×2) секторам. Обратите внимание: нумерация цилиндров и головок начинается с числа 0, а нумерация физических секторов, находящихся на дорожке, — с числа 1. При использовании адресации CHS расположение первого сектора накопителя определяется выражением “цилиндр 0, головка 0, сектор 1 (0,0,1)”; адресом второго сектора является 0,0,2; третьего — 0,1,1; четвертого — 0,1,2 и т.д., пока мы не дойдем до последнего сектора, адрес которого 1,1,2.

Представьте теперь, что вы взяли восемь секторов и, не обращаясь непосредственно к физическим цилиндрам, головкам и секторам, пронумеровали их от 0 до 7. Таким образом, если необходимо обратиться к четвертому сектору накопителя, можно сослаться на него как на сектор 0,1,2 в режиме CHS или как на сектор 3 в режиме LBA. Соотношение между номерами секторов воображаемого восьмисекторного накопителя в режимах CHS и LBA приведено в табл. 1.

 

Таблица 1. Нумерация секторов в режимах CHS и LBA для воображаемого накопителя, содержащего два цилиндра, две головки и по два сектора на каждой дорожке (в общей сложности восемь секторов).

Как видно из приведенного примера, использование нумерации LBA заметно облегчает и упрощает процесс обработки данных. Несмотря на это, при создании первых ПК вся адресация BIOS и накопителей АТА была выполнена методом CHS.

Преобразования CHS/LBA и LBA/CHS

Адресация секторов может выполняться как в режиме CHS, так и в режиме LBA. Для данного накопителя существует определенное соответствие между адресациями CHS и LBA, которое, в частности, позволяет преобразовывать адреса CHS в адреса LBA и наоборот. Существует довольно простая формула, с помощью которой можно преобразовывать параметры CHS в LBA:

LBA = (((C × HPC) + H) × SPT) + S – 1.

Реверсирование этой формулы позволяет выполнить обратное преобразование, т.е. преобразовать параметры LBA в адрес CHS:

C = int (LBA/SPT/HPC),

H = int ((LBA/SPT) mod HPC),

S = (LBA mod SPT) + 1.

В этих формулах использованы следующие выражения:

- LBA — logical block address;

- C — цилиндр (cylinder);

- H — головка (head);

- S — сектор (sector);

- HPC — количество головок в каждом цилиндре (общее количество головок);

- SPT — количество секторов на каждой дорожке;

- int X — целочисленная часть X;

- X mod Y — модуль (остаток) от X/Y.

С помощью этих формул можно вычислить параметры LBA практически для любого адреса CHS и наоборот. Данный накопитель содержит 16 383 цилиндра, 16 головок и 63 сектора на каждой дорожке. Соотношение адресов CHS и LBA показано в табл. 2.

 

Таблица 2. Параметры CHS и соответствующая им нумерация секторов LBA для накопителя, содержащего 16 383 цилиндра, 16 головок и 63 сектора на каждой дорожке (общее количество секторов 16 514 064).

Программы BIOS (когда объем HDD был очень скромным) использовали адресацию CHS, например:

 INT 13h, функция 02h. Чтение сектора.

Читает один или группу секторов с физического (не логического!) диска в память. Для начального сектора указываются абсолютные координаты (цилиндр, сектор, головка). Секторы физического диска нумеруются на каждой дорожке от 1, цилиндры нумеруются от 0, головки нумеруются от 0. Сначала идут секторы 1...n цилиндра 0, головки (поверхности) 0, затем секторы 1...n цилиндра 0, головки (поверхности) 1, далее секторы 1...п цилиндра 1, головки 0 и т.д. Таким образом, на HDD сектор 1 цилиндра 0 головки 0 относится к главной загрузочной записи (Master boot).

При вызове:

AH=02h

AL=число читаемых секторов

СН=цилиндр

CL=начальный сектор

DH=головка

DL=дисковод

00h...7Fh - гибкий диск , 80h...FFh - жесткий диск

ЕS:ВХ=адрес буфера

При возврате:

CF=0

АН=0

АL=число переданных секторов

При ошибке:

CF=1

АН=состояние.

Но для работы с HDD-дисками большого объема возможности адресации CHS стали «тормозом»и не позволяли работать с полным объемом дисков. Поэтому для обеспечения поддержки новых возможностей HDD в набор функций Int 13h фирмой Phoenix Technologies были введены дополнительные функции (BIOS Extensions). Дополнительные функции имеют номера 41h - 49h и 4Eh. Порядок работы с этими функциями существенно отличается от принятого для стандартных функций прерывания Int 13h.:

- вся адресная информация передается через буфер в оперативной памяти, а не через регистры;

- соглашения об использовании регистров изменены (для обеспечения передачи новых структур данных);

- для определения дополнительных возможностей аппаратуры (параметров) используются флаги.

Пакет дискового адреса.

Фундаментальной структурой данных для дополнительных функций прерывания Int I3h является так называемый «Пакет дискового адреса» (Disk Address Packet). Получив пакет дискового адреса, прерывание Int 13h преобразует содержащиеся в нем данные в физические параметры, соответствующие используемому носителю информации. Формат пакета дискового адреса описан в табл. 3.

 

Таблица 3. Формат пакета дискового адреса.

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

При вызове прерывания дополнительным функциям BIOS передаются через регистры процессора следующие данные:

- в АН — номер вызываемой функции;

- в DL — номер диска;

- в DS: SI — адрес буфера, содержащего пакет дискового адреса.

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

Дополнительные функции BIOS предназначены только для жестких дисков и дисководов сменных дисков большой емкости, причем функции рассчитаны на использование не более четырех устройств. Передаваемый функции номер диска, таким образом, должен находиться в диапазоне 80h-83h.

После выполнения функции в регистре АН выдается код состояния (статус возврата). Кроме принятого для классических функций BIOS стандартного набора кодов возврата, для дополнительных функций введено еще несколько кодов.

Прерывание Int 13h, функция 42h: расширенное чтение (рис. 1).

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

- в АН — значение 42h;

- в DL — номер дисковода;

- в DS: SI — адрес пакета дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно прочитаны (прочитаны до того, как произошла ошибка).

Рис. 1. Пример программы «Чтение BOOT-сектора (LBA = 3F)».


Лицензия