Разделы с файловыми системами не должны пересекаться. Это связано с тем, что две разные файловые системы имеют каждая свое представление о размещении файлов, но когда это размещение приходится на одно и то же физическое место на диске, между файловыми системами возникает конфликт. Этот конфликт возникает не сразу, а лишь по мере того, как файлы начинают размещаться в том месте диска, где разделы пересекаются. Поэтому следует внимательно относиться к разделению диска на разделы.

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

Разделы диска могут быть двух типов - primary (первичный, основной) и extended (расширенный). Максимальное число primary-разделов равно четырем. Наличие на диске хотя бы одного primary-раздела является обязательным. Extended-раздел может быть разделен на большое количество подразделов - логических дисков. Таблица разделов располагается в конце MBR, для описания раздела в таблице отводится 16 байт.

Таблица 2. Структура записи элемента таблицы разделов

Смещение

Размер поля, байт

Содержание

0x00

1

Признак активности (0 - раздел не активный,

0x80 - раздел активный)

0x01

1

Номер головки диска с которой начинается раздел

0x02

2

Номер цилиндра и номер сектора с которых начинается раздел

0x04

1

Код типа раздела System ID

0x05

1

Номер головки диска на которой заканчивается раздел

0x06

2

Номер цилиндра и номер сектора, которыми заканчивается раздел

0x08

4

Абсолютный (логический) номер начального раздела

0x0C

4

Размер раздела (число секторов)

Первым байтом в элементе раздела идет флаг активности раздела (0 - неактивен, 0x80 - активен). Он служит для определения, является ли раздел системным загрузочным и есть ли необходимость производить загрузку операционной системы с него при старте компьютера. Активным может быть только один раздел. За флагом активности раздела следуют координаты начала раздела - три байта, означающие номер головки, номер сектора и номер цилиндра. Номера цилиндра и сектора задаются в формате прерывания Int 0x13, т. е. биты 0-5 содержат номер сектора, биты 6-7 - старшие два бита 10-разрядного номера цилиндра, биты 8-15 - младшие восемь битов номера цилиндра.

НЕ нашли? Не то? Что вы ищете?

Затем следует кодовый идентификатор System ID, указывающий на принадлежность данного раздела к той или иной операционной системе. Идентификатор занимает один байт. За системным идентификатором расположены координаты конца раздела - три байта, содержащие номера головки, сектора и цилиндра, соответственно. Следующие четыре байта - это число секторов перед разделом, и последние четыре байта - размер раздела в секторах.

Элемент первичного раздела указывает сразу на загрузочный сектор логического диска (в первичном разделе всегда имеется только один логический диск), а элемент расширенного раздела - на список логических дисков, составленный из структур, которые именуются вторичными MBR (Secondary MBR, SMBR).

Свой блок SMBR имеется у каждого диска расширенного раздела. SMBR имеет структуру, аналогичную MBR, но загрузочная запись у него отсутствует (заполнена нулями), а из четырех полей описателей разделов используются только два. Первый элемент раздела при этом указывает на логический диск, второй элемент указывает на следующую структуру SMBR в списке. Последний SMBR списка содержит во втором элементе нулевой код раздела.

- Общие понятия: блок, кластер, сектор с точки зрения хранения информации

Жесткий диск, как и всякое другое блочное устройство, хранит информацию фиксированными порциями, которые называются блоками. Блок является наименьшей порцией данных, имеющей уникальный адрес на жестком диске. Для того чтобы прочесть или записать нужную информацию в нужное место, необходимо представить адрес блока в качестве параметра команды, выдаваемой контроллеру жесткого диска. Размер блока уже довольно с давних пор является стандартным для всех жестких дисков - 512 байт.

К сожалению, достаточно часто происходит путаница между такими понятиями как "сектор", "кластер" и "блок". Фактически, между "блоком" и "сектором" разницы нет. Правда, одно понятие логическое, а второе топологическое. "Кластер" - это несколько секторов, рассматриваемых операционной системой как одно целое. Почему не отказались от простой работы с секторами? Отвечу. Переход к кластерам произошел потому, что размер таблицы FAT был ограничен, а размер диска увеличивался. В случае FAT16 для диска объемом 512 Мб кластер будет составлять 8 Кб, до 1 Гб - 16 Кб, до 2 Гб - 32 Кб и так далее.

-  Cylinder, head, sector (CHS) способ адресации, ограничение на объем диска при данном адресовании

Для того чтобы однозначно адресовать блок данных, необходимо указать все три числа (номер цилиндра, номер сектора на дорожке, номер головки). Такой способ адресации диска был широко распространен и получил впоследствии обозначение аббревиатурой CHS (cylinder, head, sector). Именно этот способ был первоначально реализован в BIOS, поэтому впоследствии возникли ограничения, связанные с ним. Дело в том, что BIOS определил разрядную сетку адресов на 63 сектора, 1024 цилиндра и 255 головок. Однако развитие жестких дисков в то время ограничилось использованием лишь 16 головок в связи со сложностью изготовления. Отсюда появилось первое ограничение на максимально допустимую для адресации емкость жесткого диска: 1024*16*63*512 = 504Mb.

Со временем, производители стали делать HDD большего размера. Соответственно число цилиндров на них превысило 1024, максимально допустимое число цилиндров (с точки зрения старых BIOS). Однако, адресуемая часть диска продолжала равняться 504 Мбайтам, при условии, что обращение к диску велось средствами BIOS. Это ограничение со временем было снято введением так называемого механизма трансляции адресов, о котором чуть ниже.

- Logical block addressing (LBA) и Large Mode способы адресации

Проблемы, возникшие с ограниченностью BIOS по части физической геометрии дисков, привели в конце концов к появлению нового способа адресации блоков на диске. Этот способ довольно прост. Блоки на диске описываются одним параметром - линейным адресом блока. Адресация диска линейно получила аббревиатуру LBA (logical block addressing). Линейный адрес блока однозначно связан с его CHS адресом:

lba = (cyl*HEADS + head)*SECTORS + (sector-1);

Введение поддержки линейной адресации в контроллеры жестких дисков дало возможность BIOS'aм заняться трансляцией адресов. Суть этого метода состоит в том, что если в приведенной выше формуле увеличить параметр HEADS, то потребуется меньше цилиндров, чтобы адресовать то же самое количество блоков диска. Но зато потребуется больше головок. Однако головок-то как раз использовалось всего 16 из 255. Поэтому BIOS'ы стали переводить избыточные цилиндры в головки, уменьшая число одних и увеличивая число других. Это позволило им использовать разрядную сетку головок целиком. Это отодвинуло границу адресуемого BIOS'ом дискового пространства до 8Gb.

Нельзя не сказать несколько слов и о Large Mode. Этот режим работы предназначен для работы жестких дисков объемом до 1 Гб. В Large Mode количество логических головок увеличивается до 32, а количество логических цилиндров уменьшается вдвое. При этом обращения к логическим головкам 0..F транслируются в четные физические цилиндры, а обращения к головкам 10..1F - в нечетные. Винчестер, размеченный в режиме LBA, несовместим с режимом Large, и наоборот.

2.  Описание интерфейса IDE и программирование ATA контроллера

-  Общие сведенья о контроллере

Итерфейс IDE (Integrated Drive Electronics - электроника, встроенная в привод), или ATA (AT Attachment - подключаемый к AT) - простой и не - дорогой интерфейс для PC AT. Все функции по управлению накопителем обеспечивает встроенный контроллер, а 40-проводной соединительный кабель является фактически упрощенным сегментом 16-разрядной магистрали AT-Bus (ISA). Адаптеры IDE обычно не содержат собственного BIOS - все функции поддержки IDE встроены в системный BIOS PC AT. Однако интеллектуальные или кэширующие контроллеры могут иметь собственный BIOS, подменяющий часть или все функции системного.

Основной режим работы устройств IDE - программный обмен (PIO) под управлением центрального процессора, однако все современные винчестеры поддерживают обмен в режиме DMA, а большинство контроллеров - режим Bus Mastering.

- Описание портов контроллера

Стандартный IDE контроллер, применяемый в PC, поддерживает 2 канала, на каждом из которых может быть 2 устройства АТА (то есть всего может быть 4 устройства). Каждый канал имеет свою собственную часть пространства ввода-вывода. Для первого канала - 1F0h-1F7h для второго - 170h-177h. На данном этапе надо ввести понятие базового порта: в общем это лучше всего пояснить на примере: адреса портов формируются следующим образом: базовый_порт+смещение. Загрузив в базовый_порт значение 1F0h или 170h можно больше не думать, о том с каким каналом ты работаешь, потому что функции портов к примеру 1F3h и 173h совпадают для разных каналов IDE.

Номер порта

CHS адресация

LBA адресация

Read

Write

1F0h (170h)

Порт данных

Порт данных

1F1h (171h)

Порт ошибок

Порт свойств

1F2h (172h)

Счетчик секторов

Счетчик секторов

1F3h (173h)

Номер сектора

Адрес 0-7

1F4h (174h)

Цилиндр [0:7]

Адрес 8-15

1F5h (175h)

Цилиндр [8:15]

Адрес 16-23

1F6h (176h)

Номер головки и устройства

Адрес 24-27, устройство

1F7h (177h)

Регистр состояния

Регистр команды

3F6h (376h)

Регистр состояния

Управление

3F7h (377h)

Не используется

Не используется

Колонка 4 и 5 показывают, что находится в регистре в зависимости от того, читаем мы или пишем, 2-я и 3-я колонки означают режим адресации.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5