До того, как LBA была представлена, почему CHS начинается 0,0,1
и не начинается 0,0,0
?
hard-drive
partitioning
filesystems
disk-space
storage
Джордан Дэвис
источник
источник
Ответы:
К сожалению, именно так была внедрена и принята в действие схема адресации CHS, популярная в то время. Это было принято как официальное соглашение для IBM-совместимых компьютеров в прерываниях BIOS, используемых для доступа к диску, объясняя, почему это соглашение используется по сей день. Из стандарта ECMA-107 , тома и файловой структуры дисковых картриджей для обмена информацией (это также упоминается в исходной спецификации ATA-1 ):
Эта проблема решается в спецификациях для некоторых жестких дисков , где отмечается, что данный логический адрес CHS отличается от местоположения физического адреса CHS . Это дополнительно обсуждается в Справочном руководстве по интерфейсу Seagate ATA , которое содержит этот интересный рассказ:
Таким образом, для логической адресации CHS, хотя первые индексы цилиндра / головки начинаются со смещения на основе 0, а первый индекс сектора начинается с 1 (например, минимально возможный адрес CHS равен 0/0/1), это ничего не меняет в физическое расположение этого сектора. Думайте об этом как о первом физическом секторе на диске, который называется «сектор 1» и занимает CHS 0/0/1. Действительно, «первый» элемент в большинстве языков программирования основан на 0, поэтому логический адрес сектора по адресу CHS 0/0/1 равен нулю (
0x00
).Это логически более логично (а именно, «нулевой» логический адрес является первым физическим сектором), поскольку мы можем обращаться к дисковому устройству как к любому другому устройству памяти (поскольку каждый сектор имеет уникальный линейный адрес для сопоставления его с физическим сектор), поэтому для LBA имеет смысл начинать с нуля. Действительно, если мы переведем адрес CHS 0/0/1 в LBA , результирующий LBA будет
0x00000000
(именно поэтому 1 вычитается из индекса сектора в большинстве вычислений CHS в LBA и почему 1 добавляется в индекс для LBA к расчетам ЧС).источник
zero sector
для кодов ошибок, плохих блоков и т. Д. Переход к CHS и «архитектура с фиксированными блоками» у вас также был переход добавления контроллера (встроенного программного обеспечения) к диску и начало «логических» дисковых ассоциаций ... контроллер теперь невидим, но можно предположить, что он использует его так же ... термин теперь называется «Host Protected» Зона " en.wikipedia.org/wiki/Fixed-block_architecture и en.wikipedia.org/wiki/Host_protected_area1
, я до сих пор не нашел никакой информации о том, почему (хотя я подозреваю, что это может иметь какое-то отношение к тому, что сектор0
зарезервирован как флаг ошибки). Я буду уверен, чтобы сообщить вам, если я столкнусь с чем-либо.Я попытался проследить историю CHS и фиаско нумерации секторов «начиная с 1», что вызвало много затруднений для авторов дисковых драйверов и привело к быстрому росту LBA .
CHS восходит к тем дням, когда персональные компьютеры работали на дискетах и когда был изобретен BIOS. Вот что говорит Википедия :
Исследование BIOS CP / M обнаружило документ информационный архив CP / M: системные вызовы BDOS , в которых номера секторов начинаются с нуля. Вывод таков : самая ранняя схема CHS фактически использовала адреса секторов, начинающиеся с нуля .
Адреса с одним сектором были впервые введены с первым IBP / PC. Документ INT 13 - Службы BIOS дискет, в частности, гласит:
Таким образом, именно IBM / PC путем фактической реализации BIOS преобразовал нумерацию секторов с нуля на единицу.
Дэвид Дж. Брэдли (David J. Bradley ) из двенадцати инженеров IBM, назначенных для создания персонального компьютера IBM (модель 5150), разработал код для своего BIOS. Так что именно он, среди всех других деталей, определился с параметрами прерываний диска. Мы также обязаны этот парень вместе с Мелом Hallerman знаменитыми CTRL+ ALT+ DEL.
Итак, ответ на вопрос « Почему счетчик секторов начинается с 1, а не с 0 в CHS» :
потому что Дэвид Дж. Брэдли запрограммировал BIOS именно таким образом .
Относительно того, почему он сделал это таким образом, лучше всего ответить самому. Если бы мне пришлось угадывать, я бы сказал, что он оставил нулевой сектор как сектор адресации, с помощью которого водитель мог проверить, что голова находится на правильном пути.
Поскольку диски фактически были сконструированы так, чтобы не требовать такого механизма, а инженеры не были готовы тратить один сектор из-за BIOS, нулевой сектор так и не появился. После этого авторам драйверов было необходимо вычесть один и добавить один адрес сектора для всех вызовов дисков BIOS.
источник
Первая спецификация на гибких дисках была сделана IBM с появлением IBM 3740 и не упоминает, что есть сектора, зарезервированные для системы. Единственным резервированием для системы является трек 00, в котором хранятся только «Метки набора данных», которые идентифицируют тип информации, хранящейся в треках с 01 по 76. Он четко определяет, что первым сектором является СЕКТОР 1. Это не совпадение, а вопрос натуральной нумерации против нумерации компьютера.
Мы можем наблюдать, что когда человек начинает что-то считать, он начинается не с нуля, а с одного. Например, представьте, что в классе 135 учеников. Подсчет числа будет примерно таким: раз, два, три ... сто тридцать четыре, сто тридцать пять.
Его числовое представление будет таким: 1, 2, 3, ... 134, 135 Итак, мы согласны, верно?
Теперь давайте поместим цифры, которые не представлены как 0. Это будет выглядеть так: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135
Вот что происходит с CHS : 0,0,1 - 0,0,2 - 0,0,3 ...
Важно, что строки в таблицах Excel или в авто-числовых полях в базе данных начинаются с 1, а не с 0, и никто ничего не сказал по этому поводу.
Дэвид Дж. Брэдли так планировал BIOS?
Да, но он не был вне.
Безусловно, нет технической причины, по которой SECTOR 0 нельзя использовать, если он не зарезервирован и скрыт от пользователей по другим причинам. В принципе все указывает на это вопрос естественной нумерации.
GA21-9152-2 Файл № 3740-00,15
IBM 3740 System Entry System
page 12
ИНИЦИАЛИЗАЦИЯ ДИСКА
... Каждый диск содержит две резервные дорожки для замены любых неправильных дорожек. Кроме того, функция инициализации обеспечивает возможность изменения последовательности адресов секторов на дискете. Обычно последовательность секторов находится в числовом порядке (1, 2, 3, ... 25,26) .
стр. 24
МАРКИРОВКА ДАННЫХ НА ДИСКЕТЕ
Во время инициализации метка набора данных для набора данных записывается магнитным способом на дорожку указателя (дорожка 00) на дискете. Основная цель этой метки - показать расположение набора данных на дискете.
Это было в 1973 году. На нем были записаны данные на 8 "дискете. IBM PC 5150 родился 12 августа 1981 года ... и мы не можем забывать, что им приходилось поддерживать некоторую совместимость с предыдущими устройствами.
Не было никаких технических причин.
источник