Почему адресация номеров секторов в CHS начинается с сектора 1, а не с 0?

13

До того, как LBA была представлена, почему CHS начинается 0,0,1и не начинается 0,0,0?

Джордан Дэвис
источник
1
«Почему счетчик секторов начинается с 1 ...» - на самом деле вы имеете в виду номер сектора , а не счетчик секторов . Это два разных и разных параметра, используемых в запросе диска. «Индекс сектора» также является плохой номенклатурой для номера сектора, поскольку в дисках есть отдельная сущность, называемая индексом .
опилки

Ответы:

8

К сожалению, именно так была внедрена и принята в действие схема адресации CHS, популярная в то время. Это было принято как официальное соглашение для IBM-совместимых компьютеров в прерываниях BIOS, используемых для доступа к диску, объясняя, почему это соглашение используется по сей день. Из стандарта ECMA-107 , тома и файловой структуры дисковых картриджей для обмена информацией (это также упоминается в исходной спецификации ATA-1 ):

6.1.3 Номер логического сектора

Каждый сектор тома должен быть идентифицирован логическим номером сектора. [...] Логические номера секторов должны присваиваться в порядке возрастания, начиная с 0, начиная с сектора 1, дорожка 00, сторона 0 , продолжая на дорожку 00, сторону 1 (если FDC можно записывать с обеих сторон), а затем отслеживать 01, сторону 0 и т. д.

Эта проблема решается в спецификациях для некоторых жестких дисков , где отмечается, что данный логический адрес CHS отличается от местоположения физического адреса CHS . Это дополнительно обсуждается в Справочном руководстве по интерфейсу Seagate ATA , которое содержит этот интересный рассказ:

5.1 Логическая блокировка адресации

[...] предполагается, что сектора на приводе линейно отображаются с LBA 0 цилиндра 0 / головка 0 / сектор 1.

[...] Для всех режимов перевода C = 0, H = 0, S = 1 эквивалентно LBA = 0. Невозможно вычислить эквивалентный CHS для всех адресов логических блоков во всех режимах перевода, потому что эта формула работает только в одном направлении. Это связано с тем, что CHS-адресация не может получить доступ к 1/25 из всех возможных секторов, к которым может обращаться логическая блочная адресация, поскольку в CHS нет сектора 0.

Таким образом, для логической адресации 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 к расчетам ЧС).

Прорвать
источник
Я уже нашел ответ на этот вопрос, но мне кажется, что человек, который оставил мои комментарии с отображением ответа, удалил его ... в любом случае, причина, по которой я задал этот вопрос, была связана с тем, что все и все, что я прочитал, опубликовали ваши в основном ваши точные слова по большей части. Этот ответ «это просто способ, которым они сделали это ...» действительно раздражал меня, потому что люди не просто строят что-то и не используют это только потому, что они не хотят использовать это ... эта логика не делает с тех пор вообще ...
Джордан Дэвис,
1
Просматривая историю CHR / CHS / LBA, вы обнаруживаете, что до CHR, который был переменной длины с использованием MBBCCHHR, использовался zero sectorдля кодов ошибок, плохих блоков и т. Д. Переход к CHS и «архитектура с фиксированными блоками» у вас также был переход добавления контроллера (встроенного программного обеспечения) к диску и начало «логических» дисковых ассоциаций ... контроллер теперь невидим, но можно предположить, что он использует его так же ... термин теперь называется «Host Protected» Зона " en.wikipedia.org/wiki/Fixed-block_architecture и en.wikipedia.org/wiki/Host_protected_area
Джордан Дэвис,
@JordanDavis в большинстве случаев защищенная хостом область находится в конце диска, а не в начале. Действительно, хотя номенклатура для первого сектора возвращается в качестве значения 1, я до сих пор не нашел никакой информации о том, почему (хотя я подозреваю, что это может иметь какое-то отношение к тому, что сектор 0зарезервирован как флаг ошибки). Я буду уверен, чтобы сообщить вам, если я столкнусь с чем-либо.
Прорыв
Ссылка на Википедию для обзора раздела FBA, список является нулевой записью, как ECC, но это звучит хорошо, я сделаю то же самое, если кто-нибудь попадется.
Джордан Дэвис,
@JordanDavis Я добавил вознаграждение по этому вопросу, так как я действительно хотел бы услышать некоторые отзывы от других - особенно в отношении аспекта « почему» . Не стесняйтесь держать вопрос открытым / без ответа на время, чтобы дать шанс для других ответов.
Прорыв
8

Я попытался проследить историю CHS и фиаско нумерации секторов «начиная с 1», что вызвало много затруднений для авторов дисковых драйверов и привело к быстрому росту LBA .

CHS восходит к тем дням, когда персональные компьютеры работали на дискетах и ​​когда был изобретен BIOS. Вот что говорит Википедия :

Термин BIOS (базовая система ввода / вывода) был изобретен Гэри Килдаллом и впервые появился в операционной системе CP / M в 1975 году, описывая машинно-зависимую часть CP / M, загружаемую во время загрузки, которая напрямую взаимодействует с оборудованием.

Исследование BIOS CP / M обнаружило документ информационный архив CP / M: системные вызовы BDOS , в которых номера секторов начинаются с нуля. Вывод таков : самая ранняя схема CHS фактически использовала адреса секторов, начинающиеся с нуля .

Адреса с одним сектором были впервые введены с первым IBP / PC. Документ INT 13 - Службы BIOS дискет, в частности, гласит:

Most disk BIOS calls use the following parameter scheme:

    AH = function request number
    AL = number of sectors  (1-128 dec.)
    CH = cylinder number  (0-1023 dec.)
    CL = sector number  (1-17 dec.)    <--------!!!
    DH = head number  (0-15 dec.)
    DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
    DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
         Note that some programming references use (0-3) as the
         drive number which represents diskettes only.
    ES:BX = address of user buffer

Таким образом, именно IBM / PC путем фактической реализации BIOS преобразовал нумерацию секторов с нуля на единицу.

Дэвид Дж. Брэдли (David J. Bradley ) из двенадцати инженеров IBM, назначенных для создания персонального компьютера IBM (модель 5150), разработал код для своего BIOS. Так что именно он, среди всех других деталей, определился с параметрами прерываний диска. Мы также обязаны этот парень вместе с Мелом Hallerman знаменитыми CTRL+ ALT+ DEL.

Итак, ответ на вопрос « Почему счетчик секторов начинается с 1, а не с 0 в CHS» :
потому что Дэвид Дж. Брэдли запрограммировал BIOS именно таким образом .

Относительно того, почему он сделал это таким образом, лучше всего ответить самому. Если бы мне пришлось угадывать, я бы сказал, что он оставил нулевой сектор как сектор адресации, с помощью которого водитель мог проверить, что голова находится на правильном пути.

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

harrymc
источник
«Я бы сказал, что он оставил сектор ноль как сектор адресации ...» - нелогичное предположение. Каждый сектор имеет идентификационную запись, которая включает в себя адрес цилиндра / головки / сектора. Контроллеру диска не нужно ждать, пока индекс вернется, чтобы подтвердить, что поиск завершен на правильном цилиндре; следующий сектор, который вращается под головкой, читается для проверки.
опилки
«CH = номер цилиндра (0-1023 дек.)» - в исходном BIOS IBM PC используется «CH» для номера «дорожки». CH является 8-битным регистром, поэтому максимальное значение составляет всего 255.
опилки
«Я пытался проследить историю CHS ... и дал быстрый рост LBA». Чтобы было ясно, все эти дискуссии о «LBA» относятся только к интерфейсам дисков ПК, особенно к спецификации ATAPI. В противном случае CHS и LBA могут сосуществовать. Например, я написал несколько файловых систем, которые использовали LBA для внутреннего использования, но преобразовали адресацию в CHS, чтобы выполнить фактический дисковый ввод-вывод для интерфейса контроллера. «самая ранняя схема CHS фактически использовала адреса секторов, начинающиеся с нуля». - Правда, но это произошло задолго до CP / M.
опилки
@sawdust: все, что я сделал, это процитировал документы IBM, которые могут даже предшествовать назначению регистров для интерфейса BIOS компьютера. Ясно, что Брэдли ошибся или ошибочно направил, указав сектор 0 в качестве зарезервированного адреса, но мы не можем быть уверены, для чего это нужно, поскольку этого не произошло Возможно, он не знал, что адресная часть сектора также содержит номер дорожки. Или, может быть, этот резервный сектор был свойством дискет, которые были перенесены в общий интерфейс BIOS Брэдли. Мы только знаем, что IBM / PC BIOS был ответственен за это изменение в CHS.
Harrymc
Как всегда в этих вопросах, список прерываний Ральфа Брауна предоставляет бесценную информацию. Хотя @sawdust и пишет, что CH является восьмибитным регистром, это не то, как использовался CX. Вместо этого, CX был немного набитый как с номером цилиндра и сектором числом (но это расширением , видимо , только применительно к жестким дискам, а не дискеты, на дискеты, CL занимал номер сектора и CH провел ряд цилиндров). Сравните, например, указанный интерфейс для Int 13 / AH = 02h, входные параметры BIOS - DISK - READ SECTOR (S) INTO MEMORY .
CVn
1

Первая спецификация на гибких дисках была сделана 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 года ... и мы не можем забывать, что им приходилось поддерживать некоторую совместимость с предыдущими устройствами.

Не было никаких технических причин.

APO69
источник
Он зарезервирован для драйвера - интерфейс встроенного ПО ввода-вывода, даже на современном диске SSD или флэш-памяти зарезервировано место для операций ввода-вывода для чтения / записи / копирования / форматирования и т. Д.
Джордан Дэвис,
Взгляните на это
Ясс
Да, но не СЕКТОР 0, а ЦИЛИНДР 0. Из первой спецификации (IBM 3740) цилиндр 0 называется «Цилиндр индекса» и хранит несколько данных, указанных в «УСТАНОВКЕ ЦИЛИНДРА ИНДЕКСА». На современных дисках этот цилиндр обычно назначается как «ЦИЛИНДР НОМЕР -1», да «-1», и доступен только для контроллера. Ничто не объясняет, почему сектор 0 не использовался, и хотя мы можем видеть это в некоторых операционных системах, таких как CP / M, он является виртуальным, поскольку оборудование все еще производится в соответствии с IBM 3740. Другими словами, первый сектор СЕКТОР 1. Почему? "ЕСТЕСТВЕННАЯ НУМЕРАЦИЯ"
APO69