logo
1 / Lectures / Lect5_pc

Адресация информации на жестких дисках и их разделы ([5], с.553)

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

(Известны диски, имеющие несколько головок на одну поверхность диска для уменьшения времени обращения к диску. В этом случае цилиндром называют также и совокупность дорожек одного диска, имеющих одинаковую позицию в зонах, обслуживаемых различными головками чтения-записи.)

Однако физические цилиндры могут не совпадать с логическими, как и количество головок, указанное в логическом описании диска, может отличаться от физического. (Например, диски IBM DPTA-37xxxxимеют по описанию цилиндр/головка/сектор 16 головок, тогда как физически у них может быть от 4-х до 10 головок.)

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

Номер дисковода (Drive Number) – задается в регистреDL(бит 7 = 0 – признак обращения к НГМД). В каждой группе (гибкие/жесткие) дисководы нумеруются начиная с нуля: (00h– дисководA:, 01h– дисководB:, 80h – дисководC:- первый жесткий диск; 81h– дисководD:- второй жесткий диск).

Номер цилиндра (Cylinder Number)– всего 10 бит: два старших в регистреCL[7:6], и 8 младших – в регистреCH.

Номер головки (Head Number) – 8 бит в регистреDH.

Номер начального сектора (Sector Number) – 6 бит в регистреCL[5:0], причем сектора нумеруются, начиная с нуля, в отличие от цилиндров и головок.

Количество секторов, участвующих в операции – 8 бит в регистре AL

Указатель на начало буфера в оперативной памяти для считываемых и записываемых данных – в регистрах ES:BX

Результат выполнения операции определяется по флагу переноса: CF=0– нет ошибок, CF=1 –есть ошибки. Код ошибки возвращается в регистрAH.

Этот же формат использован и в описании разделов диска в его главной загрузочной записи, о чем речь пойдет ниже.

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

Принятый формат обращения к дисковому сервису BIOSвводит ограничения на возможности обращения к дискам большого объема. Действительно, максимальный объем диска при такой схеме адресации составляет 210цилиндров по 28головок (читай - дорожек) по 26– 1 секторов, т.е. 102425663 =16515072сектора.

С учетом того, что размер сектора на жестких дисках составляет 512 байт (или 0,5 Кбайт), максимальный объем диска для функций дискового сервиса BIOSсоставит 8455716864байта или7,875 Гбайт(т.к. 1 Гбайт = 230байт = 1073741824 байта).

Однако, контроллер жестких дисков имеет только 4 бита для задания номера головки. Тогда максимальный объем диска при такой схеме адресации составит 210цилиндров лишь по 24головок по 26– 1 секторов каждая, т.е. 10241663 = 1032192 секторов. А это уже дает всего528482304 байта или504 Мбайта(т.к. 1 Мбайт = 220байт = 1048576 байт).

Для “расшивки” этого ограничения в 504 Мбайта в BIOS применяют трансляцию параметров вызова функций дискового сервисаINT 13h,преобразуя исходное задание адреса сектора в адрес, воспринимаемый контроллером диска. В тех функциях, которые сообщают параметры диска, производится обратное преобразование адреса в формате контроллера в адрес в формате вызова.

Есть два основных способа трансляции: в рамках трехмерной геометрии цилиндр – головка – сектор (CHS – Cylinder-Head-Sector)или с переходом в одномерную (сквозную) адресацию – логические адреса блоков (LBA – Logical Block Addresses). Выбор способа трансляции определяется возможностями накопителя и версиейBIOS.

Режимы трансляции в трехмерной геометрии носят названия LARGE Disk илиECHS (Extended CHS). В таком преобразовании главной задачей является установление соответствия между количеством физических цилиндров на диске (существенно превышающем 10000) и максимально возможным количеством цилиндров в формате вызова функцийBIOS, составляющем 1024 цилиндра. Задание этого соответствия возможно за счет того, что максимально возможное для контроллера количество головок у диска (16) меньше допустимого форматом вызова максимального количества – до 256 головок.

Способов такой трансляции несколько. В них определяется коэффициент пересчета номеров цилиндров что может быть сделано различными способами (например, посредством деления полного количества цилиндров на максимально допустимое в обращении к функции BIOSчисло –1024).

Этот факт служит причиной возможной несовместимости дисков, размеченных в различных версиях BIOS в режиме LARGE (ECHS).

В режиме LBA параметры стандартных вызовов транслируются в линейный адрес сектора, вычисляемый в последовательном порядке от нулевого адреса, которому соответствует первый сектор нулевой головки нулевого цилиндра. Формула вычисления адреса при этом следующая:

LBA = (CYL  HDS + HD)  SPT + SEC – 1,

где CYL, HD и SEC – номера цилиндра, головки и сектора в пространстве CHS, HDS – количество головок, SPT – количество секторов на дорожку.

Контроллер интерфейса ATA (IDE), с которым работают жесткие (неSCSI) в режимеLBAимеет 28-разрядный адрес сектора (логического блока), что позволяет при размере сектора в 512 байт (0,5 Кбайт) получить максимальный объем диска в 128 Гбайт.

SCSIдиски всегда используютLBA адресацию с 32-разрядным адресом, что позволяет с емкостью до 2 терабайт.

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

Логическая структура диска. Разделы диска

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

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

Для всех используемых в ПЭВМ операционных систем информация о логической структуре диска и (возможно) о расположении на нем операционной системы записывается на первом секторе нулевой дорожки нулевого цилиндра. Этот сектор называют загрузочным – Boot Sector.

Если на диске расположена операционная система, то в загрузочном секторе должна содержаться программа загрузки операционной системы (и/или менеджер загрузки), а диск в этом случае называется системным.

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

Жесткий диск может иметь до четырех разделов (Partition Entries). Информация о разделах, называемая таблицей разделов илиPartition Tableхранится в конце загрузочного сектора, содержимое которого также называют главной загрузочной записью –Master Boot Record(MBR). Этот сектор во время исполненияBIOSом загрузки системы (Bootstrap)загружается по адресу7C00hи вызывается на исполнение.

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

Для MBRпринята следующая структура:

байты 000h-1BDh – код определения активного раздела и загрузки егоBoot-сектора

байты 1BEh-1FDh – таблица разделов, содержащая 4 описателя разделов (Partition Entry) по 16 байт каждый (1BEh-1CDh, 1CEh-1DDh, 1DEh-1EDh, 1EEh-1FDh)

байты 1FEh-1FFh = 55AAh– специальные символы, называемые сигнатуройMBR.

Структура описателя раздела представлена в табл. 12

Таблица 12. Структура описателя раздела жесткого диска

Смещение

Длина

Назначение

00h (1BEh)*

1 байт

Флаг активности раздела – Boot Flag: 80h = активный (загружаемый раздел), 0 = нет

01h (1BFh)

1 байт

Номер начальной головки – Begin Head

02h (1C0h)

2 байта

Номер начального сектора и цилиндра – Begin SecCyl (в формате загрузки регистраCXдля прерыванияINT 13h)

04h (1C2h)

1 байт

Системный код раздела –System Code (см. след. табл.)

05h (1C3h)

1 байт

Номер конечной головки – Ending Head

06h (1C4h)

2 байта

Номер конечного сектора и цилиндра – Ending SecCyl

08h (1C6h)

4 байта

Порядковый номер начального сектора раздела – Starting Sector

0Ch (1CAh)

4 байта

Количество секторов в разделе – Num Sectors

* В скобках указан адрес для компоненты первого раздела

Первичный раздел DOS–PRI DOS (Primary DOS Partition) содержит только один логический диск(Logical Drive). Логический диск начинается с загрузчика (Boot Sector), после которого располагаются одна или несколько копий таблицы размещения файловFAT (File Allocation Table), корневой каталог(Root)и собственно область данных. Из разделовDOSактивным может быть только первичный раздел (исполняется только его загрузчик).

Обращения к дискам через функции операционной системы происходит на уровне логических дисков: первым адресуемым сектором будет загрузчик логического диска, но не MBR илиFAT (сравните обращения через утилитуDisk Editor).

Расширенный раздел DOS–EXT DOS (Extended DOS Partition)может быть разделен на произвольное количество логических дисков аналогичной структуры, но их загрузчики никогда не исполняются.

Коды и типы разделов жесткого диска

Код

Тип раздела

Размер

Тип FAT

Впервые появился

00h

Неизвестный (не форматирован)

01h

PRI DOS

0 – 15 МБ

FAT12

MS-DOS 2.0

02h

XENIX root

XENIX

03h

XENIX user

XENIX

04h

RPI DOS

16 – 32 МБ

FAT16

MS-DOS 3.0

05h

EXT DOS

0 – 2 ГБ

MS-DOS 3.3

06h

PRI DOS

32 МБ – 2 ГБ

FAT16

MS-DOS 4.0

07h

NTFS, HPFS

0 – 4 ГБ

Windows NT, OS/2

0Ah

OS/2 Boot

OS/2

0Eh

PRI DOS

32 МБ – 2 ГБ

FAT16

Windows 95

0Fh

EXT DOS

0 – 2 ГБ

Windows 95

0xh

FAT32

0 – 2 ТВ

FAT32

Windows 95 OSR2

52h

CP/M

CP/M

64h

Novell

Novell NetWare

83h

Linux

Linux

85h

Linux Extended

Linux

Разметка диска: разбивка на разделы, выбор активного раздела (только для диска 0 – первого физического диска) и создание логических дисков в расширенном DOS-разделе выполняется утилитойFDISK.

Восстановление стандартного загрузчика можно выполнить утилитой FDISKс ключом/MBR, что в некоторых случаях можно использовать для удаления загрузочных вирусов.

Форматирование верхнего уровня (в отличие от низкоуровневого форматирования, выполняемого изготовителем диска) – создание Boot-секторов, FAT,Rootи отметка вFATдефектных кластеров – выполняется дляDOS командойFORMAT.

Для работы с таблицей разделов диска можно использовать также специальные утилиты, например, Partition Magic фирмыPower Quest.