До того, як було запроваджено LBA, чому ЧСС починається, 0,0,1
а ні 0,0,0
?
До того, як було запроваджено LBA, чому ЧСС починається, 0,0,1
а ні 0,0,0
?
Відповіді:
На жаль, саме так була використана і прийнята до використання схема адресації 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).
zero sector
коди помилок, а також погані блоки тощо. перехід додавання контролера (мікропрограмного забезпечення) до диска та початок "логічних" дискових асоціацій ... тепер контролер невидимий, але ви можете припустити, що він використовує його так само ... термін тепер називається "Хост захищений" Область " en.wikipedia.org/wiki/Fixed-block_architecture and en.wikipedia.org/wiki/Host_protected_area
1
, я все ще не знайшов жодної інформації, чому це є причиною (хоча я підозрюю, що це може мати щось спільне з тим, що сектор 0
зарезервований як прапор помилки). Я обов'язково поінформую вас, якщо я натраплю щось.
Я намагався простежити історію 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.
Перша специфікація на дискетах була зроблена 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 року ... і не можна забувати, що їм довелося підтримувати певну сумісність з попередніми пристроями.
Технічних причин точно не було.