Nodevice.su
[AD970x90]
ГлавнаяСтатьиКомпьютерыОграничения BIOS, IDE И ОС на объём винчестеров
Поиск по сайту:
пример: "ASUS dvd"









Фильтр файлов
Производитель:
Устройство:
Архив новостей:
« 12.2024
Пн Вт Ср Чт Пт Сб Вс
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

Последние новости

Наша кнопка


Размести на своем сайте HTML код с нашей кнопкой.

Статья "Ограничения BIOS, IDE И ОС на объём винчестеров"

[AD1]

Ограничения BIOS, IDE И ОС на объём винчестеров

  В далёкие 80-е года прошлого тысячелетия, во времена уже, наверное, мало кому известного MFM и RLL, для доступа к винчестеру программам необходимо было знать и указывать его \"геометрию\". Под \"геометрией\" понимается физическое количество цилиндров (дорожек), головок и секторов на дорожку. То есть любой блок информации на стандартном ATA-винчестере характеризуется тремя переменными - C, H и S (Cylinders, Heads, Sectors), а метод доступа на адресации CHS-адресация). Необходимо отметить, что эти величины всегда были реальными.

Но все современные винчестеры имеют гораздо более высокую плотность информации. Кроме того, их реальная геометрия варьируется от модели к модели. Поэтому даже такая, на первый взгляд, \"логичная\" величина, как S (количество секторов на дорожку) даже близко не соответствует указанному на этикетке винчестера (и при детекте в BIOS) значению. В реальности количество секторов на дорожку - величина переменная и уменьшается по мере приближения к последней внутренней дорожке. Поэтому для преодоления этой неоднозначности контроллер винчестера \"сообщает\" BIOS\'у не реальные значения, а \"удобоваримые\" для него параметры. А при получении запроса на чтение или запись переводит поступившие от системы \"координаты\" в реальные. Например, винчестер может содержать две пластины и, соответственно, четыре головки, а контроллер \"скажет\" BIOS\'у о 16-ти имеющихся головках. Мало того, BIOS для \"удобоваримости\" параметров уже для операционной системы, может яростно \"утверждать\", что на винчестере вовсе не 16, а целых 255 головок. В свою очередь ОС к проблемам всех этих \"пересчётов\" будет добавлять ещё и ограничения на объём раздела из-за использования конкретной файловой системы (например, FAT16). Именно из-за такой многогранности проблемы многие люди так часто спорят, путая и смешивая различные по происхождению проблемы. Попробуем прояснить все ее аспекты.

Как система работает с диском

Чтобы разобраться с \"ограничениями\", нужно достаточно чётко представлять всю структуру работы с диском: от приложения до самих головок чтения/записи. Схематически процесс взаимодействия можно представить в следующем виде:

Рассмотрим \"форматы\" каждого из этапов.

  1. Винчестер \"физически\" состоит из одной или нескольких пластин, покрытых магнитным слоем. С обеих сторон пластины (иногда - только с одной) располагаются головки чтения/записи информации. Информация записывается на \"дорожки\", которые в случае нескольких головок образуют цилиндр. Дорожка разбита на секторы, каждый из которых и представляет тот минимум блок информации, которую можно записать на диск. Стандартный размер сектора - 512 байт. Как уже говорилось, самые первые винчестеры имели постоянное количество секторов на дорожку на всём диске. Однако это не позволяло эффективно использовать всю поверхность диска - каждая следующая внешняя дорожка длинней внутренней, соответственно, на ней может поместиться больше информации. Поэтому современные винчестеры разбиты на \"зоны\", то есть совокупности соседних дорожек с одинаковым количеством секторов на дорожку. Именно поэтому график линейного чтения винчестера (исправного) выглядит в виде нисходящих ступенек.
  2. Контроллер винчестера управляет работой головок чтения/записи. Он переводит команды \"интерфейса\" в электрические сигналы на головках. Интерфейсы бывают разные: \"доисторические\" ST506 и ESDI, современные ATA (IDE) и SCSI, \"будущие\" Serial ATA и Serial SCSI. Нас, естественно, интересует IDE-винчестеры, потому и рассмотрим интерфейс ATA.

  3. Как уже говорилось, исторически первой появилась CHS-адресация. В этом в случае:

    • для \"С\" выделено два байта (16 бит);
    • для \"S\" - один байт минус 1 сектор (8 бит - 1);
    • для \"H\" - полбайта (4 бита).
    Итого, максимальный винчестер для CHS-адресации:
    2^16x(2^8-1)x2^4 = 65536x255x16 = 267 386 880 секторов.

    В секторе 512 байт, значит:
    HDDmax(CHS) = 65536x255x16*512 = 136 902 082 560 байт = 136.9Gb (127,5ГБ)*

    * - здесь и дальше примем в качестве обозначения:
    кБ = 2^10 = 1024 байт
    МБ = 1024 кБ = 1024*1024 байт = 1 048 576 байт
    ГБ = 1024 МБ = 1024*1024*1024 байт = 1 073 741 824 байт
    Mb = 1 000 000 байт, 1МБ = 1.05Mb
    Gb = 1 000 000 000 байт, 1ГБ = 1.07Gb
    Все современные винчестеры используют LBA-адресацию. В этом случае номер каждого сектора представляет собой 28-битное число, и максимальным диском для LBA будет:
    HDDmax(LBA) = 2^28*512 = 137 438 953 472 байт = 137.4Gb (128ГБ)
  4. BIOS по вышеописанной \"иерархии\" находится между ОС и контроллером винчестера. В его функцию входит перевод команд запроса на работу с диском от ОС в команды контроллера винчестера.

  5. Большинство программного обеспечения использует CHS-адресацию. Поэтому с появлением LBA-винчестеров, чтобы не переписывать имеющееся ПО, поступили следующим образом. BIOS в случае определения LBA-винчестера переводит его параметры в CHS-версию, и ОС \"думает\", что работает с CHS-винчестером. То есть 28-битное значение LBA \"раскладывается\" следующим образом: \"цилиндрические\" 16 бит + \"секторные\" 8 бит + \"головчатые\" 4 бита (итого 16+8+4=28). Или конкретно:

       
    • биты 0-7 - сектор (+1шт., т.к. адресация CHS начинается с 1-го, а не 0-го сектора);
    • биты 8-15 - цилиндр, младший байт;
    • биты 16-23 - цилиндр, старший байт;
    • биты 24-27 - головка.
    При получении запроса на работу с диском BIOS переводит для контроллера это значение обратно в LBA:
    LBA = [(цилиндр * число головок + номер головки) * количество секторов на дорожку] + (номер сектора - 1)
  6. В далёкие, ещё DOS\'овские времена, разработчики не подозревали, что когда-то ёмкость винчестеров будет измеряться десятками и даже сотнями гигабайт. Ведь самый богатый в мире человек (и самый проклинаемый компьютерной братией в одном лице) тоже как-то рассуждал \"о бесконечности\" 640кБ оперативной памяти. В результате для адресации CHS в DOS (int 13h) была выбрана следующая \"трёхбайтовая\" система:
    1.  
    2. один байт - для младших битов значения цилиндров (0-7 биты);
    3. один байт - для двух старших бит значения цилиндров (8-9 биты) и шесть битов значения сектора;
    4. один байт - для значения головок.
    Итого получалось, что \"C\" = 0-1023, \"H\" = 0-255 и \"S\" = 1-63. Следовательно, максимальным винчестером, с которым способен работать DOS, будет:
    HDDmax(DOS) = 1024x256x63*512 = 8 455 716 864 = 8.46Gb (7,88ГБ)

    Или для LBA-адресации это получается 24-битное (3 байта) число:
    HDDmax(DOS-LBA) = 2^24*512 = 8 589 934 592 = 8.59Gb (8ГБ)

  7. Приложения используют определённую файловую систему, которая также имеет свои ограничения. Например, в случае с FAT16 объём раздела зависит от величины кластера, и максимальное количество кластеров ограничено числом 2^16. Кластер - это совокупность секторов, и его максимальный объем - 64 сектора (\"нестандартные\" 128 и больше позволяют делать лишь linux-образные утилиты), т.е. 32кБ. Максимальный раздел для FAT16 получается таким:

  8. FAT16max = 2^16*32кБ = 2 147 483 648 = 2.15Gb (2ГБ)

Барьеры емкости

Теперь, зная все моменты, попробуем восстановить хронологию возникновения проблем \"больших\" дисков.

134 Mb, год 1990-й.

Самая старая и, наверное, уже мало кому известная проблема касается времён 100Mb (не Gb!) винчестеров. Использовалась тогда FAT12, для которой максимальным был раздел:
FAT12max = 2^12*32кБ = 134 217 728 = 134Mb (128МБ)

Способ решения простой - переход на FAT16 (для этого-то он и создавался).

528 Mb, год 1993-й.

Самая первая, самая известная и самая серьёзная проблема, затронувшая CHS.

Дело в том, что все первые биосописатели не рассчитывали, что когда-то в их детища кто-нибудь попытается засунуть такие гигантские винты. Проблема была из-за того, что в BIOS\'е для CHS было выделено:

  • для С - 10 бит, итого 2^10 = 1024 максимум;
  • для H - 4 бит, итого 2^4 = 16 максимум;
  • для S - 6 бит, итого 2^6 - 1 = 63 максимум.
При таком подходе максимальный установленный винчестер мог быть:
HDDmax(oldBIOS) = 1024x16x63*512 = 528 482 304 = 528Mb (504МБ)

\"Почему так мало выделялось\", спросите вы? Всё просто: 10 + 4 + 6 и ещё 4 управляющих бита позволяли \"вписаться\" в три байта (24 бита). В то время с памятью была \"напряженка\", вот и экономили на каждом бите;)

Решение проблемы имело три пути. Первый - это форматирование \"слишком большого\" винчестера с помощью встроенной в BIOS утилиты на 528Mb. Такой способ был достаточно распространённым в своё время (из-за неопытности пользователей;). Второй - использование специального ПО - Disk Managers (типа OnTrack, EZ-Drive и др.), заменяющего подпрограммы BIOS для работы с дисками своими собственными. Как правило, для работы такие программы модифицировали MBR диска. Однако это не позволяло корректно работать с диском при загрузке с другого винчестера (или даже дискеты), а также возникали большие проблемы с установкой нескольких ОС на такой диск.

Ну, и третий - обновление BIOS. Однако флэш-память для микросхем BIOS не была тогда распространена, да и интернет не был развит, соответственно и прошивок никто не делал и не выкладывал. Поэтому из-за малой практической эффективности всех этих способов, плату нужно было просто заменить на \"поддерживающую LBA\".

2.11 Gb, год 1996-й.

Многие описатели не учли предыдущего опыта и добавили в BIOS всего 2 бита на цилиндры. Итого получалось: HDDmax(1996) = 2^12x16x63*512 = 2 113 929 216 = 2.11Gb (1.97ГБ)

Причём некоторые версии определяли только \"часть\" винчестера (например, 2.5Gb определялся как 425Mb), а некоторые просто зависали при автоопределении винчестера из-за неправильного перерасчёта головок.

Решение проблемы - обновление BIOS (либо использование disk managers).

2.15 Gb, год 1996-й.

Только появившаяся Windows95 (версия \"A\", не OSR) использовала DOS-овские FAT16 и потому наследовала все его проблемы - вышеописанное ограничение в 2.15 Gb на один раздел.

Решение проблемы - установка Windows95B (OSR2), которая позволяла использовать FAT32. У FAT32 максимальный раздел: FAT32max = 2^32*32кБ = 17 042 430 230 528 = 17042Gb (15872ГБ)

3.28 Gb, год 1996-1997-й.

В старых версиях Phoenix BIOS (v. 4.03 и 4.04) была ошибка с определением винчестеров более 3.277Mb.

Решение проблемы - обновление до версии 4.05 и позже

4.23 Gb, год 1997-й.

Не всем известное ограничение. Оно вытекает из способов решения \"проблемы 528 Mb\". Так вот, чтоб преодолеть барьер 528Mb, BIOS\'ы могли использовать один из двух способов: \"LBA Assist Translation\" и \"Bit Shift Translation (так называемый \"Large\" режим трансляции).

Метод LBA-трансляции при наличии в системе LBA-винчестера для совместимости со старым ПО (int 13h) высчитывал значение CHS по следующему алгоритму:
Общее число секторов на диске, S_lba С H S Максимальная ёмкость
1 - 1 032 192 S_lba / (63*16) 16 63 528Mb
1 032 192 - 2 064 384 S_lba / (63*32) 32 63 1.06Gb
2 064 384 - 4 128 768 S_lba / (63*64) 64 63 2.11Gb
4 128 768 - 8 257 536 S_lba / (63*128) 128 63 4.23Gb
8 257 536 - 16 450 560 S_lba / (63*255) 255 63 8.42Gb

Однако до появления LBA-трансляции на рынке было много винчестеров с ёмкостью больше 528 Mb. Для работы с такими винчестерами использовался следующий пересчёт цилиндров:
Число цилиндров на диске, С Число головок, H Преобразованное число цилиндров Преобразованное число головок Максимальная ёмкость
1 - 1 024 1-16 C=C H=H 528Mb
1 024 - 2 048 1-16 C=C/2 H=H*2 1.06Gb
2 048 - 4 096 1-16 C=C/4 H=H*4 2.11Gb
4 096 - 8 192 1-16 C=C/8 H=H*8 4.23Gb
8 192 - 16 384 1-16 C=C/16 H=H*16 8.47Gb
16 384 - 32 768 1-8 C=C/32 H=H*32 8.47Gb
32 768 - 65 536 1-4 C=C/64 H=H*64 8.47Gb

В результате BIOS\'ы, использующие такую трансляцию для винчестеров 4.23 Gb и больше с 16-ю головками, \"переводили\" количество последних в 256. Однако старое ПО (DOS, Windows95) \"понимали\" только значения 0-255, и 256 головок воспринималось как 0.

Решение проблемы - обновление BIOS.

7.93 Gb, год 1997-1998-й.

В тех же \"некоторых\" BIOS\'ах, только более продвинутых, описанная выше проблема обходилась приравниванием числа головок к 15. В результате получалось не 256, а 240 дорожек и максимальный диск: HDDmax(Large-15) = 1024x240x63*512 = 7 927 234 560 = 7.93Gb (7.38ГБ)

Решение проблемы - обновление BIOS.

8.46 Gb, год 1998-й.

Вышеописанное ограничение Int 13h. Правда, конфигурации с 256-ю головками не встречались, потому реальное ограничение: HDDmax(Int13h/DOS) = 1024x255x63*512 = 8 422 686 720 = 8.42Gb (7.84ГБ)

Решение - обновление BIOS.

33.8Gb, год 1999-й, лето.

Самая актуальная нынче проблема. После исправления в BIOS\'е \"проблемы Int 13h\", ограничивающей объем диска восемью гигабайтами, схема адресации стала аналогичной внутреннему формату ATA-интерфейса:
  • С - два байта (16 бит), максимум 2^16 = 65536;
  • H - один байт (4 бит), максимум 2^4 = 16;
  • S - один байт (8 бит), максимум 2^8 = 255;
  • или в режиме LBA - 16+4+8=28 бит.
То есть теоретически можно было работать с самыми большими дисками объемом до 137.4 Gb. Однако опять биосописатели ошиблись. Они не учли, что при пересчёте цилиндров по старой схеме им просто \"не хватит\" даже 16 разрядов на цилиндры. Например, диск на 41.2 Gb с конфигурацией 19710/16/255, получал от винчестера LBA-значение количества секторов 80 416 800, то при пересчёте по стандартному алгоритму с 16-ю головками и 63-мя секторами получалось: 80416800 / (16*63) = 79778 цилиндра. 79778 > 65536 (2^16), число не помещается целиком в 16 бит, использующийся алгоритм с 16-битным делением просто зависает из-за ошибки переполнения. Для решения проблемы нужно было заменить все инструкции 16-битного деления на 32-битные и добавить условие: если LBA-значение количества секторов диска превышает 65536x16x63 = 66 060 288, то количество секторов приравнивается к 255. Это и было сделано в версиях Award BIOS после июня 1999-года.

Остановимся на решении этой проблемы подробнее, так как она всё ещё актуальна из-за большого количества обладателей \"старых\" плат Socket7 (и первых Pentium-II), желающих увеличить объём своего диска без \"глобального\" апгрейда всего компьютера. Просто цены на винчестеры 40-60 Gb сейчас так упали, что диски меньшего объёма покупать совершенно невыгодно (и часто даже не из-за копеечной разницы по сравнению с 10-20 Gb винчестерами, а просто из-за отсутствия моделей с меньшей ёмкостью).

Итак, главное и самое простое решение проблемы - обновить BIOS. Однако для подавляющего большинства Socket7-плат (кроме \"последних\" на чипсетах VIA MVP3/MVP4, ALI V, SiS 530/540) производители не выложили новых версий BIOS с поддержкой \"больших\" винчестеров. Поэтому если вы счастливый обладатель какой-нибудь i430VX/TX или VIA VPX, не мучайтесь с поисками в интернете \"нового\" BIOS\'а для вашего не определяющегося свежекупленного винчестера. Ведь даже самый признанный \"биосописатель\", ASUS, не выложил новых версий для своей линейки плат на чипсете i430TX. Исправить, как вы уже видели, нужно было совсем немного, поэтому причина \"забывчивости\" всех производителей одна - маркетинг: мол, покупайте наши новые платы, там всё без проблем.

Вот что можно посоветовать, если вы уже купили такой \"большой\" диск:

  1. На некоторых винчестерах есть перемычки для конфигурирования винчестера на 33.8 Gb. Вы получите полностью работоспособную систему, но, к сожалению, с меньшим объёмом.
  2. Windows (98 и выше) применяет свои подпрограммы для определения винчестера, у которых нет проблем для работы с винчестерами больше 33.8 Gb. Поэтому если вы хотите использовать \"большой\" диск просто в качестве \"второго\" (т.е. будете грузиться не с него, а с другого, меньшего, чем 33.8 Gb), то можно просто выключить в BIOS\'е автоопределение \"большого\" винчестера (т.е. поставить Disabled). Тогда компьютер не повиснет в BIOS, а Windows при загрузке сама вполне корректно определит \"невидимый BIOS\'у\" диск, и можно будет совершенно корректно использовать весь его объём. Однако, во-первых, вы не сможете пользоваться \"большим\" диском из-под DOS (его разделы будут просто там отсутствовать), а во-вторых, очень вероятно, что скорость работы с таким \"невидимым в BIOS\" диском будет существенно более низкой из-за \"неинициализации\" его контроллера (т.е. он может работать только по протоколу PIO-4, скорость которого ограничена 16 Мб/с).
  3. В некоторых редких BIOS\'ах \"проблему 32 ГБ\" удаётся обойти установкой параметров \"большого\" диска вручную (как для старых винчестеров).
  4. Ну, и, наконец, старые, знакомые и такие неудобные disc managers.
От себя лично, правда, могу добавить, что на моём сайте www.ROM.by я постепенно выкладываю \"коллекцию\" BIOS под старые платы с поддержкой \"больших\" винчестеров. Например, если у вас плата Asus, можете смело заходить - там есть все их модели под Socket7 (и Socket8). Вскоре собираюсь выложить исправленные BIOS\'ы под все самые распространённые в наших широтах платы (Socket7 и первые P-II) - от MSI и Gigabyte до Акорпа и Зиды.

65 Gb, год 2000-й, зима.

В некоторых BIOS\'ах была (да и есть) ошибка с определением винчестеров больших, чем 65 Gb.

Решение - обновление BIOS.

137.4 Gb, год 2002-й.

Современные диски достигли предела стандарта ATA. Для его преодоления уже нужно будет менять сам интерфейс. Что, например, и предложил тот же Maxtor: разработанная этой фирмой технология BigDrive была предложена одновременно со спецификацией протокола UltraDMA/133. Она предполагает применение не 28-, а 48-битной адресации секторов.

Решение проблемы аналогичное - замена BIOS. Правда, для подавляющего большинства все же это совсем не проблема.



Автор статьи: Роман Севко
Обсудить статью на форуме Версия для печати

Комментарии к статье:

К данной статье комментарии пока что отсутствуют.
Добавить комментарий
Ваше имя:
Ваш e-mail:
Введите код:
Ваше сообщение:
После модерации Ваш комментарий в течение двух дней будет добавлен на сайт

Статьи категории Компьютеры

Cтраницы: Следущая 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Следущая Последняя
Новые драйвера Топ DLL-файлов Топ мануалов Популярные запросы
Драйвер Intex IT-305WC Windows XP, 2000, 98, ME DLL-файл binkw32.dll Panasonic KX-TC 1481, 1484, 1486 a68hm-k
Драйвер Lapara LA-1300k-x5 Windows 7 DLL-файл xinput1_3.dll Pioneer DEH-P3600MP cmd-v4
Драйвер Lexmark X1290 Windows XP, 2000, 2003 DLL-файл Mss32.dll Becker AUDIO 10 ECE TYP 6021 Creative SB 0610
Драйвер HP ENVY m4 series Intel Management Engine Interface (MEI) Windows 8 64-bit DLL-файл OpenAL32.dll SONY XR-3750 Creative SB 0610
Драйвер HP ENVY m4 series IDT High-Definition (HD) Audio Driver Windows 8 64-bit DLL-файл MSCOMCTL.OCX Panasonic KX-TC 1401, 1405 10891
Драйвер HP ENVY m4 series IDT High-Definition (HD) Audio Driver Windows 8 64-bit DLL-файл KERNEL32.DLL Panasonic KX-TC 1503 toshiba l750
Драйвер HP ENVY dv7 series 3D DriveGuard Windows 8 64-bit DLL-файл msvcr71.dll Pioneer DEH-P4650MP PCI\VEN_14E4&DEV_16B5&SUBSYS_05041025&REV_10
Драйвер HP ENVY dv7 series Intel Rapid Storage Technology Driver Windows 8 64-bit DLL-файл COMDLG32.OCX Dialon F10 \Device\NTPNP_PCI0013
Драйвер HP ENVY dv7 series Realtek Card Reader Driver Windows 8 64-bit DLL-файл binkw32.dll Pioneer DEH-P3630MP \Device\NTPNP_PCI0013
Драйвер HP ENVY dv7 series Ralink Bluetooth Software Driver Windows 8 64-bit DLL-файл d3dx9_30.dll APC BACK-UPS - 600 ms2264
Драйвер HP ENVY dv7 series Realtek Local Area Network (LAN) Driver Windows 8 64-bit DLL-файл storm.dll Sony DCR-DVD105E toshiba l10
Драйвер HP ENVY dv7 series Intel Bluetooth Driver Windows 8 64-bit DLL-файл openal32.dll SONY CDX-F5500X CA03
Драйвер HP ENVY dv7 series Qualcomm Atheros AR9000 Series Wireless LAN Driver Windows 8 64-bit DLL-файл msvcp71.dll APC SMART-UPS V/S - 1000 Toshiba satellite C660-1TE
Драйвер HP ENVY dv7 series Ralink 802.11 Wireless LAN Adapter Windows 8 64-bit DLL-файл lame_enc.dll Pioneer DEH-4050 CANON F159500
Драйвер HP ENVY dv7 series Ralink Bluetooth Software Driver Windows 8 64-bit DLL-файл COMCTL32.OCX Scher-Khan Magicar 5 Периферийное устройство Bluetooth