Warum beginnt CHS vor der Einführung von LBA bei 0,0,1
und nicht 0,0,0
?
Warum beginnt CHS vor der Einführung von LBA bei 0,0,1
und nicht 0,0,0
?
Antworten:
Leider wurde gerade so das damals beliebte CHS-Adressierungsschema implementiert und in die Praxis umgesetzt. Dies wurde als offizielle Konvention für IBM-kompatible Computer in die für den Plattenzugriff verwendeten BIOS-Interrupts übernommen und erläutert, warum diese Konvention bis heute verwendet wird. Aus dem ECMA-107-Standard , dem Volume und der Dateistruktur von Plattenkassetten für den Informationsaustausch (dies wird auch in der ursprünglichen ATA-1-Spezifikation erwähnt ):
6.1.3 Logische Sektornummer
Jeder Sektor auf einem Volume wird durch eine logische Sektornummer identifiziert. [...] Die logischen Sektornummern werden in aufsteigender Reihenfolge vergeben, beginnend mit 0, beginnend mit Sektor 1, Spur 00, Seite 0 , bis zu Spur 00, Seite 1 (wenn auf beiden Seiten FDC aufgezeichnet werden kann) und dann 01, Seite 0 usw. verfolgen
Dieses Problem wird in den Spezifikationen für einige Festplatten behoben . Dabei wird darauf hingewiesen, dass sich eine bestimmte logische CHS- Adresse von der physischen CHS-Adressposition unterscheidet . Dies wird im Seagate ATA Interface Reference Manual näher erläutert , das diese interessante Erzählung enthält:
5.1 Logische Blockadressierung
Es wird angenommen, dass die Sektoren auf dem Laufwerk linear mit einem LBA 0 von Zylinder 0 / Kopf 0 / Sektor 1 abgebildet werden.
[...] Für alle Übersetzungsmodi entspricht C = 0, H = 0, S = 1 LBA = 0. Es ist nicht möglich, einen äquivalenten CHS für alle logischen Blockadressen in allen Übersetzungsmodi zu berechnen, da diese Formel nur in eine Richtung arbeitet. Dies liegt daran, dass die CHS-Adressierung nicht auf 1/25 aller möglichen Sektoren zugreifen kann, auf die die logische Blockadressierung zugreifen kann, da es in CHS keinen Sektor 0 gibt.
Obwohl für die logische CHS-Adressierung die ersten Zylinder / Kopf-Indizes von einem 0-basierten Offset ausgehen und der erste Sektorindex von 1 ausgeht (z. B. ist die minimal mögliche CHS-Adresse 0/0/1), ändert dies nichts an der physische Standort dieses Sektors. Stellen Sie es sich als den ersten physischen Sektor auf der Festplatte vor, der als "Sektor 1" bezeichnet wird und CHS 0/0/1 belegt. In der Tat ist das "erste" Element in den meisten Programmiersprachen 0-basiert, daher ist die logische Adresse des Sektors an der CHS-Adresse 0/0/1 Null ( 0x00
).
Dies ist logisch viel sinnvoller (dh die "nullte" logische Adresse ist der erste physische Sektor), da wir das Plattengerät wie jedes andere Speichergerät adressieren können (da jeder Sektor eine eindeutige lineare Adresse hat, um es einem physischen zuzuordnen Sektor), weshalb es für LBA sinnvoll ist, bei Null zu beginnen. Wenn wir nämlich die CHS - Adresse 0/0/1 zu einer LBA übersetzen , wird die resultierende LBA sein 0x00000000
( aus diesem Grund 1 aus dem Sektor - Index in den meisten CHS LBA Berechnungen abgezogen wird, und warum 1 mit dem Index für LBA hinzugefügt nach CHS-Berechnungen).
zero sector
für Fehlercodes verwendeten, und fehlerhafte Blöcke, usw. ... Übergang zu CHS und " Festblockarchitektur " hatten Der Übergang des Hinzufügens eines Controllers (Firmware) zum Laufwerk und der Beginn von "logischen" Datenträgerzuordnungen ... Der Controller ist jetzt unsichtbar, aber Sie können davon ausgehen, dass er auf die gleiche Weise verwendet wird. Der Begriff heißt jetzt "Host Protected" Bereich " en.wikipedia.org/wiki/Fixed-block_architecture und en.wikipedia.org/wiki/Host_protected_area
1
, habe ich immer noch keine Informationen darüber gefunden, warum (obwohl ich vermute, dass dies etwas damit zu tun hat, 0
dass der Sektor als Fehlerflag reserviert ist). Ich werde Sie auf dem Laufenden halten, wenn ich auf etwas stoße.
Ich habe versucht, die Geschichte von CHS und das Sektornummerierungs-Fiasko "beginnend mit 1" nachzuvollziehen , das den Schreibern von Disk-Treibern viele Komplikationen bereitet und die Entstehung von LBA beschleunigt hat .
CHS stammt aus der Zeit, als PCs auf Disketten liefen und das BIOS erfunden wurde. Das sagt Wikipedia :
Der Begriff BIOS (Basic Input / Output System) wurde von Gary Kildall erfunden und erstmals 1975 im Betriebssystem CP / M verwendet. Er beschreibt den maschinenspezifischen Teil von CP / M, der während des Startvorgangs geladen wird und direkt mit der Hardware verbunden ist.
Eine Recherche im CP / M-BIOS ergab das Dokument CP / M-Informationsarchiv: BDOS-Systemaufrufe , bei denen Sektornummern mit Null beginnen. Die Schlussfolgerung lautet: Das früheste CHS-Schema verwendete tatsächlich nullbasierte Sektoradressen .
Einbasige Sektoradressen wurden erstmals mit dem ersten IBP / PC eingeführt. In dem Dokument INT 13 - Diskette BIOS Services heißt es speziell:
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
Es war also der IBM / PC, der durch eine De-facto-Implementierung des BIOS die Sektornummerierung von null auf eins umgestellt hat.
Von den zwölf IBM Ingenieuren, die mit der Erstellung des IBM Personal Computers (Modell 5150) beauftragt wurden, entwickelte David J. Bradley den Code für sein BIOS. Er hat also unter anderem die Parameter für die Festplatten-Interrupts festgelegt. Wir verdanken auch diesen Kerl mit Mel Hallerman zusammen die berühmten CTRL+ ALT+ DEL.
So ist die Antwort auf die Frage
Warum wird die Sektorzählung bei 1 beginnen und nicht 0 in CHS ist:
Weil David J. Bradley das BIOS programmiert , dass Art und Weise .
Warum er es so gemacht hat, beantwortet er am besten selbst. Wenn ich raten müsste, würde ich sagen, dass er den Sektor Null als Adressierungssektor belässt, anhand dessen der Fahrer überprüfen kann, ob sich der Kopf auf der richtigen Spur befindet.
Da die Festplatten tatsächlich so entwickelt wurden, dass sie keinen solchen Mechanismus erfordern, und die Ingenieure aufgrund des BIOS nicht bereit waren, einen Sektor zu verschwenden, ist Sektor Null nie entstanden. Danach mussten die Treiberautoren für alle BIOS-Festplattenaufrufe Sektoradressen um eins subtrahieren und eins hinzufügen.
Die erste Spezifikation für Disketten wurde von IBM mit dem Erscheinungsbild der IBM 3740 erstellt und erwähnt nicht, dass für das System reservierte Sektoren vorhanden sind. Die einzige Reservierung für das System ist Spur 00, in der nur die "Datensatzbezeichnungen" gespeichert sind, die den in den Spuren 01 bis 76 gespeicherten Informationstyp identifizieren. Es wird klar definiert, dass der erste Sektor SEKTOR 1 ist. Dies ist kein Zufall, sondern ein Frage der natürlichen Nummerierung gegen die Nummerierung des Computers.
Wir können beobachten, dass ein Mensch, wenn er etwas zu zählen beginnt, nicht mit Null beginnt, sondern mit Eins. Stellen Sie sich zum Beispiel vor, dass sich 135 Schüler in einem Klassenzimmer befinden. Die Zahl zu zählen wäre ungefähr so: Eins, zwei, drei ... einhundertvierunddreißig, einhundertfünfunddreißig.
Ihre numerische Darstellung wäre also: 1, 2, 3, ... 134, 135 Soweit sind wir uns einig, richtig?
Stellen wir nun die Ziffern, die nicht durch 0 dargestellt werden, so ein: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135
Das passiert mit CHS : 0,0,1 - 0,0,2 - 0,0,3 ...
Es ist wichtig, dass die Zeilen in den Excel-Tabellen oder die automatisch numerischen Felder in einer Datenbank mit 1 und nicht mit 0 beginnen und niemand etwas darüber gesagt hat.
Hat David J. Bradley das BIOS so geplant?
Ja, aber er war nicht draußen.
Es gibt definitiv keinen technischen Grund, warum SECTOR 0 nicht verwendet werden kann, es sei denn, es ist für Benutzer aus anderen Gründen reserviert und verborgen. Grundsätzlich spricht alles für eine natürliche Nummerierung.
GA21-9152-2 File No. 3740-00,15
IBM 3740 Data Entry System
Seite 12
DISK INITIALIZATION
... Jede Disk enthält zwei Ersatzspuren, um unregelmäßige Spuren zu ersetzen. Darüber hinaus bietet die Initialisierungsfunktion die Möglichkeit, die Reihenfolge der Sektoradressen auf der Diskette zu ändern. Normalerweise ist die Reihenfolge der Sektoren in numerischer Reihenfolge (1, 2, 3, ... 25,26) .
Seite 24
DATENKENNZEICHNUNG AUF DER DISKETTE
Während der Initialisierung wird die Datensatzbezeichnung für einen Datensatz auf der Indexspur (Spur 00) der Diskette magnetisch aufgezeichnet. Der Hauptzweck dieses Etiketts besteht darin, die Position des Datensatzes auf der Diskette anzuzeigen
Dies war im Jahr 1973. Es zeichnete Daten auf einer 8 "-Diskette auf. Der IBM PC 5150 wurde am 12. August 1981 geboren ... und wir können nicht vergessen, dass sie eine gewisse Kompatibilität mit den vorherigen Geräten aufrechterhalten mussten.
Es gab definitiv keinen technischen Grund.