Чому адресація номерів сектору в CHS починається з сектора 1, а не з 0?


13

До того, як було запроваджено LBA, чому ЧСС починається, 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/256-го з усіх можливих секторів, до яких може отримати доступ логічна блокова адресація, оскільки в 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 до розрахунків CHS).


Я вже вважаю, що відповідь на це запитання, але, мабуть, людина, якій я залишив свої коментарі із відповіддю, видалила її ... як би там не було, причина, чому я поставила це запитання, пов’язана з тим, що всі, і все, що я прочитав, розмістили ваше в основному ваше саме слова здебільшого. Ця відповідь "це просто так, як вони це зробили ..." мене справді дратувала, тому що люди не просто щось будують, а не використовують лише тому, що не хочуть ним користуватися ... та логіка не робить з того часу зовсім ...
Джордан Девіс

1
Переглядаючи історію CHR / CHS / LBA, ви виявляєте, що до того, як CHR, який був змінною довжиною за допомогою MBBCCHHR, використовував zero sectorкоди помилок, а також погані блоки тощо. перехід додавання контролера (мікропрограмного забезпечення) до диска та початок "логічних" дискових асоціацій ... тепер контролер невидимий, але ви можете припустити, що він використовує його так само ... термін тепер називається "Хост захищений" Область " en.wikipedia.org/wiki/Fixed-block_architecture and en.wikipedia.org/wiki/Host_protected_area
Йордан Девіс

@JordanDavis у більшості випадків захищена хостом область знаходиться в кінці диска, а не починається. Дійсно, хоча номенклатура для першого сектора повертається як значення 1, я все ще не знайшов жодної інформації, чому це є причиною (хоча я підозрюю, що це може мати щось спільне з тим, що сектор 0зарезервований як прапор помилки). Я обов'язково поінформую вас, якщо я натраплю щось.
Прорив

Посилання Вікіпедії для огляду розділів FBA, перелік якого є нульовим записом як ECC, але це звучить добре, я зроблю те саме, якщо трапляється будь-яке.
Джордан Девіс

@JordanDavis Я додав щедрості з цього питання, тому що я дуже хотів би почути деякі відгуки інших, особливо, що стосується аспекту, чому це стосується. шанс на інші відповіді.
Прорив

8

Я намагався простежити історію CHS та фіаско з нумерацією сектору "починаючи з 1", що спричинило багато ускладнень для письменників-драйверів та швидко породжувало LBA .

CHS сягає часів, коли персональні комп'ютери працювали на дискетах і коли був винайдений BIOS. Про це говорить Вікіпедія :

Термін BIOS (Basic Input / Output System) був винайдений Gary Kildall і вперше з'явився в операційній системі CP / M в 1975 році, описуючи специфічну для машини частину CP / M, завантаженої під час завантаження, яка взаємодіє безпосередньо з обладнанням.

Дослідження BI / CP / M виявило архів інформації CP / M документа : виклики системи BDOS , в яких номери секторів починаються з нуля. Висновок полягає в тому, що: найбільш рання схема CHS фактично використовувала секторові адреси на основі нуля .

Одні секторові адреси вперше були введені з першим IBP / PC. У документі INT 13 - Diskette BIOS Services конкретно сказано:

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 перетворив нумерацію секторів з нульової до одноосновної.

З дванадцяти інженерів IBM, призначених для створення персонального комп'ютера IBM (модель 5150), Девід Дж. Бредлі розробив код для своєї BIOS. Тож він той, хто серед усіх інших деталей вирішив параметри переривання диска. Ми також зобов'язані цьому хлопцеві разом з Мелом Галлерманом знаменитим CTRL+ ALT+ DEL.

Тож відповідь на питання, чому підрахунок секторів починається з 1, а не 0 у CHS :
Тому, що Девід Дж. Бредлі запрограмував BIOS таким чином .

Щодо того, чому він це зробив саме так, на це найкраще відповідає сам. Якби мені довелося здогадуватися, я б сказав, що він залишив сектор нульовим як адресаційний сектор, за допомогою якого водій міг перевірити, що голова стоїть на правильному шляху.

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


"Я б сказав, що він залишив сектор нульовим як адресаційний сектор ..." - Нелогічна здогадка. У кожному секторі є ідентифікаційний запис, який включає адресу циліндра / головки / сектора. Дисковому контролеру не доводиться чекати, коли індекс зійде, щоб підтвердити, що пошук виконано на правильному циліндрі; наступний сектор, який обертається під головою, читається для перевірки.
тирса

"CH = номер циліндра (0-1023 dec.)" - Оригінальний BIOS IBM PC використовує CH для номера "трек". CH - 8-розрядний регістр, тому максимальне значення становить лише 255.
тирса

"Я намагався простежити історію CHS ... і швидко породжував LBA" - Щоб зрозуміти, усі ці дискусії про "LBA" стосуються лише інтерфейсів диска ПК, особливо специфікації ATAPI. Інакше CHS та LBA можуть співіснувати. EG Я написав декілька файлових систем, які використовували LBA внутрішньо, але перетворили адресацію в CHS для виконання фактичного дискового вводу / виводу за інтерфейс контролера. "найдавніша схема CHS фактично використовувала нульові адреси сектору." - Правда, але це сталося так до CP / M.
тирса

@sawdust: Все, що я робив, - це навести документи IBM, що, можливо, навіть передувало призначенню реєстрів інтерфейсу PC BIOS для ПК. Зрозуміло, що Бредлі помилився або неправильно скеровував, вказавши сектор 0 як зарезервовану адресу, але ми не можемо бути впевнені, для чого, оскільки цього ніколи не було. Можливо, він не знав, що частина сектора також містить номер треку. А може, цей запасний сектор був властивістю дискет, які переносилися в загальний інтерфейс BIOS Бредлі. Відомо лише, що за цю зміну CHS відповідав IBM / PC BIOS.
harrymc

Як завжди в цих питаннях, Список переривань Ральфа Брауна надає неоціненну інформацію. Хоча правда те, що @sawdust писав про те, що CH є восьмибітним регістром, CX не використовується. Натомість CX був набитий як номером циліндра, так і номером сектора (але це розширення, мабуть, стосувалося лише жорстких дисків, а не дискеток; для дискети CL мав номер сектора, а CH - номер циліндра). Порівняйте, наприклад, вказаний інтерфейс для вхідних параметрів Int 13 / AH = 02h, BIOS - DISK - READ SECTOR IN S 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

стор. 12
ІНІЦІАЛІЗАЦІЯ ДИСКУ
... Кожен диск містить дві запасні доріжки для заміни будь-яких неправильних доріжок. Крім того, функція ініціалізації забезпечує засіб зміни послідовності адреси сектора на дискеті. Зазвичай послідовність секторів знаходиться в числовому порядку (1, 2, 3, ... 25,26)
.

сторінка 24
ЕТИКЕТ ДАНИХ НА ДИСКЕТІ
Під час ініціалізації мітка набору даних для набору даних магнітно записується на індексну доріжку (доріжка 00) дискети. Основна мета цієї мітки - показати розташування набору даних на дискеті

Це було в 1973 році. У ньому записані дані на 8-дюймовій дискеті. IBM PC 5150 народився 12 серпня 1981 року ... і не можна забувати, що їм довелося підтримувати певну сумісність з попередніми пристроями.

Технічних причин точно не було.


Її зарезервовано для драйвера - інтерфейс вбудованого вводу / виводу, навіть у сучасних SSD-дисках або флеш-пам'ятках зарезервовано місце для операцій вводу-виводу для читання / запису / копіювання / форматування тощо.
Jordan Davis,

Подивіться на це
Yass

Так, але не СЕКТОР 0, а ЦИЛІНДЕР 0. З першої специфікації (IBM 3740) циліндр 0 називається "індексним циліндром" і зберігає декілька даних, зазначених у "ПІДПРИЄМСТВІ ЦИЛІНДЕРУ". На сучасних дисках цей циліндр, як правило, присвоюється як "КІЛИНДЕРНИЙ НОМЕР -1", так "-1", і доступний лише контролеру. Нічого не пояснює, чому сектор 0 не використовувався, і хоча ми можемо бачити його в деяких операційних системах, таких як CP / M, він є віртуальним, оскільки обладнання все ще виробляється відповідно до IBM 3740. Іншими словами, перший сектор є СЕКТОР 1. Чому? "
ПРИРОДНЕ НОМЕРЕ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.