Обсуждение:Объём жёсткого диска

Последнее сообщение: 12 лет назад от Ljrfnfvfhe в теме «8.4 ГБ (512 байт даёт)»

Хронология возникновения проблем с ёмкостью жёстких дисков. править

Здесь в качестве обозначения:

"кБ" = 2^10 = 1024 Байт

"МБ" = 1024 кБ = 1024*1024 Байт = 1 048 576 Байт

"ГБ" = 1024 МБ = 1024*1024*1024 Байт = 1 073 741 824 Байт


"Мб" = 1 000 000 Байт, 1МБ = 1.05Mb

"Гб" = 1 000 000 000 Байт, 1ГБ = 1.07Gb


134Mb, год 1990-й. править

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

528Mb, год 1993-й. править

Самая первая, самая известная и самая серьёзная проблема, затронувшая CHS. Проблема была из-за того, что Int13h и IDE имели следующие ограничения на значение CHS:

C H S
Int13h 1 024 256 63
IDE 65 536 16 255
Максимальный вариант, удовлетворяющий оба случая 1 024 16 63

Значит наибольший установленный винчестер мог быть: 1024*16*63*512 = 528 482 304 = 528Mb (504МБ)

2.11Gb, год 1996-й. править

Многие BIOS не учли предыдущего опыта и добавили в BIOSе всего 2 бита на цилиндры. В итого получалось: 2^12*16*63*512 = 2 113 929 216 = 2.11Gb (1.97ГБ) Причём некоторые версии определяли только "часть" винчестера (например, 2.5Gb определялся как 425Mb), а некоторые просто зависали при автоопределении винчестера из-за неправильного перерасчёта головок.

2.15 Gb, год 1996-й. править

Windows 95 ("A", не OSR) использовала DOS-овскую FAT16 и потому наследовала все её проблемы - вышеописанное ограничение в 2.15 Gb на один раздел. У FAT32, применяемой Windows 95B OSR2 максимальный раздел: 2^32*32кБ = 17 042 430 230 528 = 17 042 Gb (15 872 ГБ)

3.28Gb, год 1996-1997-й. править

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

4.23Gb, год 1997-й. править

Не всем известное ограничение вытекающее из способов решения "проблемы 528Mb". Чтоб преодолеть барьер 528Mb BIOS могла использовать один из двух способов: "LBA assist translation" или "Bit shift translation ("Large" Mode)". Метод "LBA-трансляции" при наличии в системе LBA-винчестера для совместимости с ПО, использовавшим Int 13h, высчитывал значение CHS по следующему алгоритму:

Общее число секторов на диске, S_lba 1 - 1 032 192 1 032 192 - 2 064 384 2 064 384 - 4 128 768 4 128 768 - 8 257 536 8 257 536 - 16 450 560
"Пересчитанное" число цилиндров, C S_lba / (63*16) S_lba / (63*32) S_lba / (63*64) S_lba / (63*128) S_lba / (63*255)
H 16 32 64 128 255
S 63 63 63 63 63
Максимальная ёмкость 528Mb 1.06Gb 2.11Gb 4.23Gb 8.42Gb

однако до появления LBA-винчестеров появилось много не поддерживающих LBA винчестеров ёмкостью больше 528Mb. Для работы с такими винчестерами использовался следующий пересчёт цилиндров:

Число цилиндров на диске, c 1 - 1 024 1 024 - 2 048 2 048 - 4 096 4 096 - 8 192 8 192 - 16 384 16 384 - 32 768 32 768 - 65 536
Число головок, h 1-16 1-16 1-16 1-16 1-16 1-8 1-4
Преобразованное число цилиндров, C C=c C=c/2 C=c/4 C=c/8 C=c16 C=c/32 C=c/64
Преобразованное число головок, H H=h H=h*2 H=h*4 H=h*8 H=h*16 H=h*32 H=h*64
Максимальная ёмкость 528Mb 1.06Gb 2.11Gb 4.23Gb 8.47Gb 8.47Gb 8.47Gb

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

7.93Gb, год 1997-1998-й. править

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

8.46Gb, год 1998-й. править

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

33.8Gb, год 1999-й, лето. править

После исправления в BIOSе "проблемы Int 13h", ограничивающей диски до 8.4Gb, схема адресации стала аналогичной ATA-интерфейсу:

В режиме CHS В режиме LBA
С максимум = 2^16 = 65536 (16 бит) 16+4+8=28 бит
H максимум = 2^4 = 16 (4 бит)
S максимум = 2^8 = 255 (8 бит)

Т.е. теоретически можно было работать с самыми большими дисками 137.4Gb. НО, при пересчёте цилиндров по старой схеме, 16 бит не хватит. Например, диск на 41.2Gb с конфигурацией 19 710/16/255, получал от винчестера LBA-значение количества секторов 80 416 800 шт. и при пересчёте по "стандартному" алгоритму с 16-ю головками и 63-мя секторами получалось: 80 416 800 / (16*63) = 79 778 цилиндра. 79 778 > 65 536 (2^16) и поэтому не помещалось в 16 бит. Соответственно использующийся алгоритм с 16-битным делением просто зависал из-за ошибки переполнения. Для решения проблемы нужно было заменить все инструкции 16-битного деления на 32-битные и добавить условие: если LBA-значение количества секторов диска превышает: 65 536x16x63 = 66 060 288 секторов = 33.8Gb (31.5ГБ), то количество секторов приравнивается к 255.

65.5Gb, год 2000-й, зима. править

Не все BIOS решили "проблему 32Gb" и в результате была исправлена лишь одна ошибка, связанная с переполнением при 16-битном делении. Дело в том, что для вывода на экран объёма винчестера использовался 16-битный регистр, объём выводился в мегаБайтах, итого максимальный диск мог быть: 2^16 - 1 = 65 535Mb = 65.5Gb (64ГБ). Позже для исправления этой проблемы было сделано следующее условие: до 64Гб - выводить ёмкость в мегаБайтах, выше - в гигаБайтах.

137.4Gb, год 2002-й. править

Диски достигли предела стандарта ATA. Для его преодоления нужно менять сам "интерфейс". Что, например, и предложил Maxtor в своей спецификации на UDMA133. --Mixabest 21:19, 24 января 2010 (UTC)Ответить

8.4 ГБ (512 байт даёт) править

 
скриншот части статьи

Сколько байт даёт? Мой Skype плагин в Гугл Хром v16 из кода делает телефонный номер! --ЗЕМЛЕРОЙКА 18:18, 22 декабря 2011 (UTC)Ответить

Возможно информация не соответствует действительности. править

"Максимальный размер диска (не раздела!), поддерживаемый MBR." Скорее всего MBR поддерживает диски емкостью более 2 TB. Судя по структуре Partition Table с помощью MBR можно создать два раздела, общим размером чуть менне 4 TB(точнее наверное 4 TB - 2*512). Например по этой ссылке с помощью MBR был размечен жесткий диск размером 3 TB. http://forum.ru-board.com/topic.cgi?forum=84&topic=3742 В частности в англовики есть "Sector indices have always begun with a 1, not a zero, and due to an early error in MS-DOS, the heads are generally limited to 255[citation needed] instead of 256. Both the partition length and partition start address are sector values stored as 32-bit quantities. The sector size is fixed at 512 (29) bytes, which implies that either the maximum size of a partition or the maximum start address (both in bytes) cannot exceed 2 TiB−512 bytes (2,199,023,255,040 bytes or 4,294,967,295 (232−1) sectors × 512 (29) bytes per sector). Alleviating this capacity limitation was one of the prime motivations for the development of the GUID partition table (GPT)."