Логическое строение диска

Давайте теперь разберемся с логической структурой диска. Естественно предположить, что минимальная единица записываемой информации - не бит, а гораздо более крупный блок данных. Действительно, если бы каждый бит записывался бы независимо, то необходимо было бы адресоваться к каждому биту на диске в отдельности. Так как бит на современном диске - сотни миллиардов, то пришлось бы адресоваться к огромному числу блоков данных на диске. А это - крайне не эффективно. Поэтому диск разбивают на гораздо более крупные логические части, нежели куски по одному биту.

Каким образом производят подобное разбиение? Каждый диск разбивается на дорожки (Track), концентрические кольца. Кроме того, диск разбивают на секторы, области пересечения секторов и дорожек называют блоками (block), в блоке хранится 512 байт полезной информации. Тогда количество блоков на одной пластине равно произведению количества секторов на количество дорожек. Как учесть тот факт, что диск состоит из некоторого количества пластин? На первый взгляд нужно умножить количество блоков на одной пластине на количество пластин. Однако, если подумать, то правильнее будет сказать, что количество блоков на одной пластине (точнее, на одной стороне!) нужно умножить на количество используемых сторон, а если вспомнить, что количество используемых сторон равно количеству магнитных головок (head) на диске, то получаем итоговую формулу для расчета количества блоков на диске: количество дорожек * количество секторов * количество головок. А емкость диска равна количеству блоков умноженному на объем одного блока, т.е. на 512 байт. Единственное замечание: так как магнитные головки жестко скреплены друг с другом, то запись производится на все дорожки всех сторон одновременно. Следовательно, вместо понятия "дорожка" следует ввести понятие, описывающее все равноудаленные от центра дорожки на всех сторонах всех пластин: совокупность таких дорожек по понятным соображениям называется цилиндром (cylinder).

Итого емкость диска = cylinder * sector * head * 512 byte.

Обращение к каждому блоку на диске (адресация блока) совершенно необходимое для работы с устройством осуществляется посредством задания номера цилиндра, сектора и головки для каждого блока. Т.е. по сути на диске вводится цилиндрическая система координат и каждый блок на диске имеет в этой системе координат свой собственный уникальный адрес, по которому контроллер жесткого диска находит необходимый блок. Такая адресация называется CHS (Cyl, Sect, Hd) или Normal.

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

Первая причина состоит в том, что идеальное разбиение диска на сектора приводит к тому, что блоки на внутренних цилиндрах будут иметь меньшую площадь, нежели блоки, расположенные на внешних цилиндрах. А так как объем информации в КАЖДОМ блоке одинаковый, то можно заметить, что полезная площадь диска используется неэффективно: внешние блоки занимают слишком большую площадь. Для того, чтобы избежать такого расточительного расходования дискового пространства, применяют зонное деление на сектора. Т.е. на внутренних цилиндрах сектора шире, а на внешних - более узкие, так, чтобы сделать более эффективным использование площади поверхности диска. Однако про такой диск уже нельзя сказать, что он имеет некоторое количество секторов - количество секторов зависит от цилиндра.

Следовательно, рассмотренная нами выше схема адресации уже не может соответствовать реальной геометрии жесткого диска. Для того, чтобы по-прежнему пользоваться введенной системой координат, нужен какой-то механизм ТРАНСЛЯЦИИИ, который смог бы преобразовать реальную геометрию жесткого диска в некоторую идеальную, в которой он имеет фиксированное количество секторов. В таком случае трансляция должна поддерживаться самим диском.

Обращения к диску в рамках описанной системы координат выполняет BIOS контроллера жесткого диска. В силу некоторых причин при написании первых BIOS для РС было зарезервировано явно недостаточное количество бит для хранения информации о цилиндрах, секторах и головках. Первые BIOS поддерживали обращение лишь к 1024 цилиндров, 64 секторам и 16 головкам. Простейший расчет показывает, что в таком случае BIOS может обращаться только к 512 Мбайт жесткого диска! Вот она цена непродуманности. Впрочем такой непродуманности в РС достаточно много, вспомним хотя бы проблему 2000-го года: пожалели зарезервировать лишние 2 байта для хранения информации о годе.

Разумеется, сегодня совершенно никуда не годится поддержка дисков емкостью только 512 Мбайт. Для того, чтобы решить эту проблему следует добавить еще некоторое количество бит для хранения информации о цилиндрах и секторах. Однако это не так просто: необходимые области памяти зарезервированы под другие нужды. Выход тем не менее удалось найти: оказалось возможным добавить некоторое количество бит под хранение информации о головках: BIOS получил возможность обращаться к 256 головкам. Но, естественно, такого количества головок у реального диска быть не может:). Однако, если геометрия жесткого диска и так не соответствует реальной, то какая уже разница, как производить трансляцию - лишь бы она позволяла обратиться к большему количеству блоков на диске. Для того, чтобы использовать большее поддерживаемое количество головок, был разработан метод трансляции, названный LBA - логическая блочная адресация. При такой адресации реальная геометрия диска с большим количеством цилиндров и секторов, заменяется виртуальной, при которой полагается, что у диска меньше цилиндров, но больше головок. Естественно, такая адресация не соответствует реальной геометрии, впрочем в этом и нет острой необходимости, главное, что теперь можно в рамках рассмотренной системы координат обратится к большему количеству блоков. Фактически необходим способ перенумеровать блоки для того, чтобы к ним обращаться, и трансляция LBA призвана решить эту проблему. Для того, чтобы трансляция LBA работала, и диск и BIOS контроллера должны ее поддерживать. Так как количество поддерживаемых головок увеличилось в 16 раз, то и максимальный объем диска, поддерживаемый новой трансляцией стал в 16 раз больше: примерно 8,3 Гбайт. С одной стороны это большой шаг вперед относительно CSH, с другой сторон и такого объема сегодня мало. Но дальнейшее увеличение количества цилиндров, головок и секторов невозможно: дальнейшее обращение к жесткому диску в режиме LBA уже не поддерживает сам BIOS. Но тем не менее выход есть: обращение к цилиндрам, старше 1024 обеспечивают средствами самих операционных систем.

Основной вывод: сегодня применяется только трансляция LBA, а когда объем диска выход за рамки допустимых 8,3 Гбайт, то обращение к остальным цилиндрам производится самой операционной системой. Когда Вы встретитесь с некоторыми диагностическими утилитами для работы с жесткими дисками, Вы обнаружите, что те утилиты, которые работают через BIOS "видят" только 8,3 Гбайт Вашего жесткого диска, а те утилиты, которые работают напрямую с оборудованием, нормально обращаются ко всему объему жесткого диска.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: