OSDev Wiki
Регистрация
Advertisement

История и общие сведения[]

Название этого способа адресации данных на дисках образовано из первых букв названий компонентов, входящих в состав дискового адреса, заданного этим способом: Cylinder, Head, Sector, то есть «цилиндр», «головка», «сектор». Эта система широко применялась в вычислительных машинах 1970-х годов (в частности, в мини-ЭВМ фирмы DEC), откуда и перекочевала на ПК. Приводимые ниже сведения относятся главным образом к жёстким дискам, однако в целом применимы и к гибким дискам (об их особенностях говорится в конце).

Диск цилиндры, головки, дорожки

Схематическое представление первых жестких дисков их цилиндры, головки, дорожки.

Информация записывается на магнитный диск и считывается с него с помощью магнитной головки, причём головка может перемещаться, останавливаясь на разном расстоянии от центра диска в определённых позициях. Чтение и запись информации возможны только при неподвижной головке, поэтому информация располагается на диске в виде ряда окружностей — так называемых дорожек (track).

«magnitnyie-buri»-vinchestera

Информацию можно хранить на обеих сторонах диска. Более того, возможно объединение в один пакет нескольких дисков («блинов»), вращающихся на общем шпинделе; такие диски, называемые пакетными, были широко распространены в 1960-80-х годах, пока не были вытеснены привычными нам «винчестерами» (которые, впрочем, тоже могут состоять из нескольких дисков). Для чтения и записи информации с разных сторон используются отдельные головки, перемещаемые, однако, как единое целое. Совокупность всех дорожек, доступных при неподвижных головках, называется цилиндром (cylinder). Номера цилиндра и головки являются двумя первыми компонентами дискового адреса в формате CHS.

Информация на дорожках хранится блоками или секторами фиксированного размера; стандартом де-факто является размер 512 байт. Номер сектора на дорожке является последним компонентом адреса в формате CHS. Заметим, что фиксированный размер технически не является обязательным; так, в мэйнфреймах IBM использовалась иная система, с переменной длиной блока, что позволяло эффективнее использовать дисковое пространство, но усложняло выполнение операций ввода-вывода; такая система сокращённо обозначалась CKD (Count, Key, Data) — по первым буквам названий разных областей, входящих в состав одного блока.

Нумерация цилиндров и головок на ПК ведётся с нуля, нумерация секторов — с единицы. Вероятно, такая нелогичная система была унаследована от системы CKD, в которой нулевой сектор был предназначен для хранения служебной информации о дорожке, а собственно информационные секторы начинались с первого.

При создании IBM PC разработчики BIOS весьма жёстко ограничили разрядность перечисленных выше компонентов дискового адреса: номер цилиндра должен был умещаться в 10 бит, номер головки — в восемь, номер сектора — в шесть. Таким образом, суммарная длина дискового адреса в формате CHS составляет 24 бита, что при размере сектора в 512 байт ограничивает ёмкость диска величиной 7,875 Гбайт (до 8 Гбайт ёмкость не дотягивает из-за начала нумерации секторов с 1, из-за чего на каждой дорожке может находиться не более 63 секторов; заметим, что обычно приводимая цифра в 8,4 Гбайта выражена в «десятичных гигабайтах», то есть в миллиардах байт, мы же пользуемся более правильными с точки зрения компьютера «двоичными» единицами измерения ёмкости). Дисковый интерфейс IDE, получивший широкое распространение с появлением компьютеров IBM PC/AT и вытеснивший существовавшие до него интерфейсы, отводил под те же компоненты адреса иное количество разрядов: 16 бит под номер цилиндра, 4 бита под номер головки и 8 бит под номер сектора (в сумме 28 бит), что в сумме давало объём до 126 Гбайт (137 «десятичных гигабайт»).

Первые жёсткие диски и BIOS требовали, чтобы номера цилиндра, головки и сектора, передаваемые программой функциям традиционного дискового сервиса BIOS, совпадали с физическими номерами этих сущностей на диске. Из-за этого ёмкость дисков неоправданно ограничивалась. Например, разместить в небольшом корпусе «винчестера» восемь «блинов», позволяющих использовать 16 головок, допускаемых размером поля номера головки дискового адреса для интерфейса IDE, физически невозможно. В то же время прогресс технологии магнитной записи очень быстро позволил записывать на одной дорожке более 63 секторов — но это было бессмысленно, поскольку BIOS ограничивал размер поля номера сектора величиной 6 бит. Совокупные ограничения BIOS и контроллера IDE приводили к тому, что максимальная ёмкость диска даже в теории не могла превышать 504 Мбайта (размер адреса 20 бит; часто приводимая величина 528 Мбайт выражена в «десятичных мегабайтах»), ну а на практике в силу указанных физических ограничений была ещё меньше.

Первым шагом для преодоления этого ограничения стал отказ от требования точного соответствия номеров, используемых в программах (логических дисковых адресов), физическим номерам цилиндров, головок и секторов. Этого добились, возложив на контроллер диска (микросхему или набор микросхем, располагающихся на самом дисководе; не следует путать контроллер диска с контроллером IDE — последний является лишь посредником между системной шиной компьютера с одной стороны и контроллером диска с другой) задачу перекодировки логических адресов в физические. Однако совместные ограничения на число бит, отводимых под каждый компонент адреса, остались (10 бит под номер цилиндра, 4 бита под номер головки и 6 бит под номер сектора, всего 20 бит), из-за чего реально доступную программам ёмкость дисков удалось поднять только до 504 Мбайт.

Вскоре, однако, инженеры осознали, что дисковый адрес можно «искривлять». Напомним, что номер головки с точки зрения BIOS имеет размер 8 бит, а с точки зрения контроллера IDE — только четыре, зато контроллер поддерживает большую разрядность номеров сектора и цилиндра, чем BIOS (8 и 16 бит против 6 и 10 соответственно). Известный разработчик BIOS фирма Phoenix Technologies предложила использовать два младших бита номера головки, используемого функциями традиционного дискового сервиса BIOS, в качестве двух старших разрядов номера сектора, передаваемого контроллеру IDE, а два старших бита номера головки — в качестве двух младших битов номера цилиндра. Этот нехитрый трюк позволил использовать диски ёмкостью до 7,875 Гбайт — предельной величины, поддерживаемой дисковыми функциями BIOS, использующими адресацию CHS.

На этом совершенствование адресации CHS прекратилось, и дальнейший рост объёма дисков был обеспечен переходом на новые функции, использующие другой способ адресации — LBA. Что же касается CHS, то использующие этот способ адресации функции BIOS до сих пор применяются для доступа к гибким дискам (где альтернативы им нет) и могут использоваться при обращении к другим типам дисков (жёстким, оптическим, флэш-накопителям), но с указанным выше ограничением на максимальный доступный объём носителя информации.

Формат дискового адреса CHS[]

Как уже говорилось, суммарная длина дискового адреса BIOS составляет 24 бита, что позволяет полностью разместить его в трёх восьмиразрядных регистрах общего назначения:

  • CH — младшие разряды номера цилиндра;
  • CL — номер сектора в шести младших разрядах; старшие два бита номера цилиндра в старших двух разрядах;
  • DH — номер головки.


Структура цилиндры сектора




Такой формат дискового адреса используется всеми традиционными функциями дискового сервиса BIOS (прерывание INT 13h, функции 00h — 20h).

Особенности гибких дисков[]

Из-за незначительной ёмкости гибких дисков для них не стали отказываться от соответствия логических номеров цилиндров, головок и секторов физическим номерам, а тем более вводить «перекос» разрядов дискового адреса. Поэтому для доступа к информации на гибких дисках по-прежнему используются физические адреса в формате CHS. В зависимости от типа дискеты встречаются следующие комбинации числа цилиндров, головок и секторов:

Диаметр Ёмкость Цилиндры Головки Секторы
5,25 160 Кбайт 40 1 8
5,25 180 Кбайт 40 1 9
5,25 320 Кбайт 40 2 8
5,25 360 Кбайт 40 2 9
5,25 1,2 Мбайт 80 2 15
3,5 720 Кбайт 80 2 9
3,5 1,44 Мбайт 80 2 18

В отличие от жёстких дисков, «геометрия» дискет не является фиксированной, поэтому в разумных пределах возможны самые разные сочетания количества цилиндров и секторов, а также использование одной или двух головок. Более того, на разных дорожках может быть разное число секторов, а контроллер гибких дисков поддерживает не только обычные секторы, но и так называемые скрытые (hidden). Подобная гибкость в своё время весьма широко использовалась при попытках защитить программы, размещённые на дискетах, от копирования.

Перечисленные в таблице выше форматы являются стандартными, поддерживаемыми всеми операционными системами Microsoft, а также многими альтернативными системами. Сведения о том, какой формат используется на конкретной дискете, находятся в её загрузочном секторе (физическом секторе 1 цилиндра 0 головки 0). Подробнее структура хранения информации на гибких дисках и параметры дискет обсуждаются при описании файловой системы FAT.

Advertisement