Warum beginnt die Adressierung der Sektornummern in CHS bei Sektor 1 und nicht bei 0?

13

Warum beginnt CHS vor der Einführung von LBA bei 0,0,1und nicht 0,0,0?

Jordan Davis
quelle
1
„Warum wird die Sektorzählung bei 1 beginnen ...“ - Eigentlich sind Sie auf dem Sektor beziehen Zahl , nicht die Sektorzahl . Hierbei handelt es sich um zwei unterschiedliche Parameter, die in einer Festplattenanforderung verwendet werden. " Sektorindex " ist auch eine schlechte Nomenklatur für die Sektornummer, da es eine eindeutige Entität gibt, die als Index in Plattenlaufwerken bezeichnet wird.
Sägemehl

Antworten:

8

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).

Durchbruch
quelle
Ich habe die Antwort auf diese Frage bereits herausgefunden, aber die Person, die meine Kommentare hinterlassen hat, hat sie wohl gelöscht. Der Grund, warum ich diese Frage gestellt habe, lag in der Tatsache, dass alle und alles, was ich gelesen habe, im Grunde genommen Ihre genauen Angaben gemacht haben Worte zum größten Teil. Diese Antwort von "Es ist nur so, wie sie es gemacht haben ..." hat mich wirklich genervt, weil die Leute nicht nur etwas bauen und es nicht benutzen, nur weil sie es nicht benutzen wollen ... diese Logik macht es seitdem nicht mehr überhaupt ...
Jordan Davis
1
Wenn Sie die Geschichte von CHR / CHS / LBA durchgehen, werden Sie feststellen, dass Sie vor CHR, das mit MBBCCHHR eine variable Länge hatte, die zero sectorfü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
Jordan Davis
@JordanDavis In den meisten Fällen befindet sich der Host-geschützte Bereich am Ende der Festplatte, nicht am Anfang. Obwohl die Nomenklatur für den ersten Sektor als Wert zurückgegeben wird 1, habe ich immer noch keine Informationen darüber gefunden, warum (obwohl ich vermute, dass dies etwas damit zu tun hat, 0dass der Sektor als Fehlerflag reserviert ist). Ich werde Sie auf dem Laufenden halten, wenn ich auf etwas stoße.
Durchbruch
Der Wikipedia-Link für die FBA-Abschnittsübersicht. Die Liste ist der nullte ECC-Datensatz, aber das hört sich gut an. Ich werde das Gleiche tun, wenn einer von beiden rüberkommt.
Jordan Davis
@JordanDavis Ich habe eine Prämie zu dieser Frage hinzugefügt, da ich wirklich gerne einige Beiträge von anderen hören möchte - insbesondere in Bezug auf den Warum- Aspekt Chance für andere Antworten.
Durchbruch
8

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.

Harrymc
quelle
"Ich würde sagen, dass er Sektor Null als Adressierungssektor verlassen hat ..." - Unlogische Vermutung. Jeder Sektor hat einen Identifikationsdatensatz, der die Zylinder- / Kopf- / Sektoradresse enthält. Der Plattencontroller muss nicht warten, bis der Index angezeigt wird, um zu bestätigen, dass die Suche auf dem richtigen Zylinder abgeschlossen wurde. Der nächste Sektor, der sich unter dem Kopf dreht, wird zur Überprüfung gelesen.
Sägemehl
"CH = Zylindernummer (0-1023 dez.)" - Das ursprüngliche IBM PC-BIOS verwendet CH als "Track" -Nummer . CH ist ein 8-Bit-Register, der Maximalwert beträgt also nur 255.
Sägemehl
"Ich habe versucht, die Geschichte von CHS zu verfolgen ... und LBA schnell hervorgebracht" - Um es klar auszudrücken, beziehen sich all diese Diskussionen über "LBA" nur auf PC-Festplattenschnittstellen, insbesondere auf die ATAPI-Spezifikation. Ansonsten können CHS und LBA koexistieren. ZB habe ich ein paar Dateisysteme geschrieben, die LBA intern verwendeten, aber die Adressierung in CHS konvertiert, um die eigentliche Festplatten-E / A über die Controller-Schnittstelle durchzuführen. "Das früheste CHS-Schema verwendete tatsächlich nullbasierte Sektoradressen." - Stimmt, aber das passierte schon lange vor CP / M.
Sägemehl
@sawdust: Alles, was ich getan habe, war, IBM-Dokumente zu zitieren, die möglicherweise sogar vor der Zuweisung von Registern für die PC-BIOS-Schnittstelle lagen. Es ist klar, dass Bradley durch das Festlegen von Sektor 0 als reservierte Adresse irrtümlich oder fehlgeleitet wurde, aber wir können nicht sicher sein, wofür, da es nie passiert ist. Es könnte sein, dass er nicht wusste, dass der Sektoradressenteil auch die Spurnummer enthielt. Oder vielleicht war dieser Ersatzsektor eine Eigenschaft von Disketten, die in Bradleys allgemeine BIOS-Oberfläche übernommen wurden. Wir wissen nur, dass das IBM / PC-BIOS für diese Änderung in CHS verantwortlich war.
Harrymc
Wie immer in diesen Angelegenheiten bietet Ralph Browns Interrupt-Liste unschätzbare Informationen. Während es wahr ist, was @sawdust über CH als Acht-Bit-Register schrieb, wurde CX nicht so verwendet. Stattdessen wurde CX bitgestopften sowohl mit der Zylinderzahl und Sektornummer (diese Erweiterung galt jedoch anscheinend nur für Festplatten und nicht für Disketten; bei Disketten hatte CL die Sektornummer und CH die Zylindernummer). Vergleichen Sie zum Beispiel die angegebene Schnittstelle für die Eingabeparameter Int 13 / AH = 02h, BIOS - DISK - READ SECTOR (S) INTO MEMORY .
ein CVn
1

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.

APO69
quelle
Seine für Treiber reservierte - I / O-Firmware-Schnittstelle, auch in der heutigen SSD-Platte oder Flash haben Platz für I / O-Operationen zum Lesen / Schreiben / Kopieren / Formatieren usw. reserviert.
Jordan Davis
Werfen
Ja, aber nicht SEKTOR 0, sondern ZYLINDER 0. Ab der ersten Spezifikation (IBM 3740) wird Zylinder 0 als "Indexzylinder" bezeichnet und speichert mehrere Daten, die im "INDEX-ZYLINDER-LAYOUT" angegeben sind. Bei modernen Scheiben wird dieser Zylinder normalerweise als "ZYLINDERNUMMER -1", ja als "-1" zugewiesen und ist nur für die Steuerung zugänglich. Es gibt keine Erklärung, warum Sektor 0 nicht verwendet wurde, und obwohl wir es in einigen Betriebssystemen wie CP / M sehen können, ist es virtuell, da die Hardware immer noch gemäß IBM 3740 hergestellt wird. Mit anderen Worten, der erste Sektor ist SEKTOR 1. Warum? "NATÜRLICHE NUMMERIERUNG"
APO69