Warum beginnt die Sektornummernadressierung in CHS bei Sektor 1 und nicht bei 0?

Warum beginnt die Sektornummernadressierung in CHS bei Sektor 1 und nicht bei 0?

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

Antwort1

Leider wurde das damals beliebte CHS-Adressierungsschema nur auf diese Weise implementiert und in Gebrauch genommen. Dies wurde als offizielle Konvention für IBM-kompatible Computer in den BIOS-Interrupts für den Festplattenzugriff übernommen, was erklärt, warum diese Konvention bis heute verwendet wird. Vonder ECMA-107-Standard, Volumen- und Dateistruktur von Datenträgerkassetten für den Informationsaustausch(dies wird auch im Original erwähntATA-1-Spezifikation):

6.1.3 Logische Sektornummer

Jeder Sektor auf einem Datenträger muss durch eine logische Sektornummer identifiziert werden. [...]Die logischen Sektornummern werden in aufsteigender Reihenfolge vergeben, beginnend mit 0, beginnend bei Sektor 1, Spur 00, Seite 0, weiter zu Spur 00, Seite 1 (wenn FDC auf beiden Seiten beschreibbar ist) und dann zu Spur 01, Seite 0 usw.

Dieses Problem wird in den Spezifikationen füreinige Festplatten, wobei darauf hingewiesen wird, dass eine gegebenelogisches CHSAdresse unterscheidet sich von derphysische CHS-AdresseStandort. Dies wird weiter erörtert inReferenzhandbuch zur ATA-Schnittstelle von Seagate, das diese interessante Erzählung enthält:

5.1 Logische Blockadressierung

[...] angenommen, dass die Sektoren auf dem Laufwerk linear zugeordnet sind, mit einem LBA 0 von Zylinder 0 / Kopf 0 / Sektor 1.

[...] Für alle Übersetzungsmodi ist C=0, H=0, S=1 gleichbedeutend mit 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 funktioniert. Dies liegt daran, dass die CHS-Adressierung nicht auf 1/256 aller möglichen Sektoren zugreifen kann, auf die die logische Blockadressierung zugreifen kann, da es in CHS keinen Sektor 0 gibt.

Bei der logischen CHS-Adressierung beginnen die ersten Zylinder-/Kopfindizes zwar mit einem 0-basierten Offset, die erstenSektorIndex beginnt bei1(z.B. die minimal mögliche CHS-Adresse ist 0/0/1), ändert dies nichts an derphysischStandort dieses Sektors. Betrachten Sie es als den erstenphysischSektor auf der Platte wird "Sektor 1" genannt und belegt CHS 0/0/1. Tatsächlich ist das "erste" Element in den meisten Programmiersprachen 0-basiert, alsologischAdresse des Sektors an CHS-Adresse 0/0/1 istnull( 0x00).

Das ist logisch viel sinnvoller (nämlich die "nullte"logischAdresse ist die erstephysischSektor), da wir das Festplattengerät wie jedes andere Speichergerät ansprechen können (da jeder Sektor eine eindeutige lineare Adresse hat, um ihn einem physischen Sektor zuzuordnen), weshalb es für LBA sinnvoll ist, bei Null zu beginnen. Tatsächlich, wenn wirÜbersetzen Sie die CHS-Adresse 0/0/1 in einen LBA, der resultierende LBA beträgt 0x00000000(aus diesem Grund wird bei den meisten CHS-zu-LBA-Berechnungen 1 vom Sektorindex abgezogen und bei LBA-zu-CHS-Berechnungen 1 zum Index hinzugefügt).

Antwort2

Ich habe versucht, die Geschichte vonCHSund das Fiasko mit der Sektornummerierung "beginnend mit 1", das viele Komplikationen für Laufwerkschreiber verursachte und schnell zuLBA.

CHS stammt aus der Zeit, als Personalcomputer noch auf Disketten liefen und das BIOS erfunden wurde. Das ist es, wasWikipediasagt:

Der Begriff BIOS (Basic Input/Output System) wurde von Gary Kildall erfunden und tauchte erstmals 1975 im Betriebssystem CP/M auf. Er beschreibt den maschinenspezifischen Teil von CP/M, der während des Systemstarts geladen wird und direkt mit der Hardware kommuniziert.

Eine Untersuchung des CP/M BIOS ergab das Dokument CP/M Informationsarchiv: BDOS Systemaufrufe, bei denen die Sektornummern mit Null beginnen. Die Schlussfolgerung ist, dass:Das früheste CHS-Schema verwendete tatsächlich nullbasierte Sektoradressen.

Ein-basierte Sektoradressen wurden erstmals mit dem ersten IBP/PC eingeführt. Das Dokument INT 13 - Disketten-BIOS-Diensteheißt es konkret:

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

So war es der IBM/PC, der durch eine De-facto-Implementierung des BIOS die Sektornummerierung von nullbasiert auf einsbasiert umgestellt hat.

Von den zwölf IBM-Ingenieuren, die mit der Entwicklung des IBM Personal Computers (Modell 5150) beauftragt waren,David J. Bradleyhat den Code für das BIOS entwickelt. Er ist also derjenige, der unter anderem die Parameter für die Festplatteninterrupts festgelegt hat. Ihm und Mel Hallerman verdanken wir auch das berühmte CTRL+ ALT+ DEL.

Alsodie Antwortzur Frage Warum beginnt die Sektorzählung in CHS bei 1 und nicht bei 0?Ist :
Weil David J. Bradley das BIOS so programmiert hat.

Warum er das so gemacht hat, kann er am besten selbst beantworten. Wenn ich raten müsste, würde ich sagen, dass er Sektor Null als Adressierungssektor belassen hat, anhand dessen der Treiber überprüfen konnte, ob der Kopf auf der richtigen Spur war.

Da Festplatten eigentlich so konstruiert wurden, dass ein solcher Mechanismus nicht erforderlich war, und die Entwickler nicht bereit waren, einen Sektor wegen des BIOS zu verschwenden, entstand der Sektor Null nie. Danach mussten die Treiberautoren bei allen BIOS-Festplattenaufrufen von den Sektoradressen jeweils eins abziehen und eins hinzufügen.

Antwort3

Die erste Spezifikation für Disketten wurde von IBM mit dem Erscheinen des IBM 3740 erstellt und erwähnt nicht, dass es Sektoren gibt, die für das System reserviert sind. Die einzige Reservierung für das System ist Spur 00, die nur die „Data Set Labels“ speichert, die den Typ der in den Spuren 01 bis 76 gespeicherten Informationen identifizieren. Es wird eindeutig definiert, dass der erste Sektor SEKTOR 1 ist. Dies ist kein Zufall, sondern eine Frage der natürlichen Nummerierung im Vergleich zur Nummerierung des Computers.

Wir können beobachten, dass ein Mensch, wenn er anfängt, etwas zu zählen, nicht mit Null, sondern mit Eins beginnt. Stellen Sie sich zum Beispiel vor, es sitzen 135 Schüler in einem Klassenzimmer. Die Zahl würde dann ungefähr so ​​lauten: Eins, zwei, drei ... einhundertvierunddreißig, einhundertfünfunddreißig.

Die numerische Darstellung wäre dann: 1, 2, 3, … 134, 135. Soweit sind wir uns doch einig, oder?

Nun setzen wir die Ziffern ein, die nicht durch 0 dargestellt werden. Das würde so aussehen: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135

Das passiert mitCHS:0,0,1 - 0,0,2 - 0,0,3...

Bedeutsam ist, dass die Zeilen in den Excel-Tabellen oder die autonumerischen Felder in einer Datenbank mit 1 und nicht mit 0 beginnen, und niemand hat etwas dazu gesagt.

Hat David J. Bradley das BIOS auf diese Weise geplant?

Ja, aber er war nicht draußen.

Es gibt definitiv keinen technischen Grund, warum SECTOR 0 nicht verwendet werden kann, es sei denn, er ist aus anderen Gründen reserviert und vor Benutzern verborgen. Im Prinzip deutet alles darauf hin, dass es sich um eine Frage der natürlichen Nummerierung handelt.

GA21-9152-2 Datei Nr. 3740-00,15
IBM 3740 Dateneingabesystem

Seite 12
DISKETTENINITIALISIERUNG
...Jede Diskette enthält zwei Ersatzspuren, um unregelmäßige Spuren zu ersetzen. Darüber hinaus bietet die Initialisierungsfunktion eine Möglichkeit, die Reihenfolge der Sektoradressen auf der Diskette zu ändern. Normalerweise ist die Reihenfolge der Sektoren numerisch (1, 2, 3, ... 25,26).
.

Seite 24
DATENBESCHRIFTUNG AUF DER DISKETTE
Während der Initialisierung wird die Datensatzbeschriftung für einen Datensatz magnetisch auf der Indexspur (Spur 00) der Diskette aufgezeichnet. Der Hauptzweck dieser Beschriftung besteht darin, die Position des Datensatzes auf der Diskette anzuzeigen.

Das war im Jahr 1973. Er zeichnete Daten auf einer 8-Zoll-Diskette auf. Der IBM PC 5150 wurde am 12. August 1981 geboren ... und wir dürfen nicht vergessen, dass er eine gewisse Kompatibilität mit den Vorgängergeräten aufrechterhalten musste.

Einen technischen Grund gab es definitiv nicht.

verwandte Informationen