# CHS-Adressierung

Die CHS-Adressierung ist eine historische Adressierungsmethode für Massenspeicher wie Festplatten, die bis in die frühen 2000er-Jahre bei Computern und Betriebssystemen relevant war. Die Abkürzung CHS steht für englisch cylinder/​head/​sector, manchmal auch mit Zylinder/​Kopf/​Sektor übersetzt, und findet sich u. a. bei frühen IBM-PC-kompatiblen Computern mit BIOS, wo der physische Aufbau einer Festplatte in Form der Festplattengeometrie mit diesen drei Werten manuell eingestellt werden musste: Anzahl der Zylinder (cylinders), Anzahl der Köpfe (heads) und Anzahl der Sektoren (sectors; im Sinne von Datenblöcken pro Spur).

## Aufbau

Die drei CHS-Werte sind eine Art Koordinatenangabe, die sich aus dem physischen Aufbau von Festplatten und Disketten(-laufwerken) ergeben hat, denn diese bestehen aus einer oder mehreren rotierenden Scheiben (Platter oder engl. Disks), die im Allgemeinen auf beiden Seiten mit je einem Lese-/Schreib-Kopf abgetastet werden. Die Sektoren werden ab eins gezählt, während bei den Zylindern und Köpfen die Zählung bei Null beginnt. Bei Disketten und einigen frühen Festplatten wurde nur eine Scheibe verwendet, darum wird manchmal der Begriff Seite als Synonym für Kopf verwendet, denn es gibt dann nur jeweils den Kopf auf der Ober- und der Unterseite. Ist diese Scheibe (Disk) dazu noch einseitig, so entspricht der Zylinder der Spur (engl. Track).
Für den Zugriff auf die einzelnen Datenblöcke wurde dieses Schema bei vielen Computern übernommen. So nutzt das BIOS IBM-PC-kompatibler Computer sowie viele (ältere) PC-Betriebssysteme die CHS-Adressierung, allen voran PC-kompatibles DOS wie MS-DOS oder PC DOS, aber auch z. B. OS/2 und Windows. Linux hingegen nutzte von Anfang an Logical Block Addressing (LBA), bei dem die Datenblöcke einfach durchnummeriert sind und die Zählung bei Null beginnt.
Für den Zugriff auf die einzelnen Datenblöcke muss die Angabe der Festplattengeometrie (in Form von Zylinder/Kopf/Sektor bzw. C/H/S) sowohl in der Firmware (beim PC das BIOS) und im Betriebssystem als auch auf den Partitionen und Dateisystemen auf dem Datenspeicher selbst korrekt bzw. identisch sein.

## Verwendung

Über die CHS-Adressierung lässt sich jeder Datenblock, bei Disketten und Festplatten Sektor (von Kreissektor) bezeichnet, wie eine Art Koordinate ansprechen bzw. adressieren.
Werden der Adressierung falsche Angaben zur Festplattengeometrie zugrunde gelegt, so sind etwaige zuvor verwendete (richtige) Adressierungsangaben, mittels derer bereits Daten auf dem Datenspeicher hinterlegt wurden, falsch; die Adressierung verweist dann auf einen anderen Datenblock, der nicht die referenzierten Daten enthält – es besteht dadurch eine reale Gefahr für Datenverlust – oder einen Verweis auf eine nicht vorhandene Adresse – was zu E/A-Fehlern beim Datenzugriff führt. Seit den 1980er Jahren werden Festplatten gebaut, deren Controller die tatsächliche Festplattengeometrie von der Adressierung entkoppeln, so dass die Speicheradresse in Form des Tripel Zylinder, Kopf, Sektor nicht mehr der physischen Realität entspricht, denn der zwischengeschaltete Controller überführt jede logische CHS-Adresse in eine physische Speicheradresse, die nur der Controller der Festplatte selbst kennt. So funktionierten Festplatten meist selbst bei falschen Angaben (z. B. im BIOS) korrekt, solange die sich aus den CHS-Angaben ergebende Größe nicht die tatsächlich vorhandene Speicherkapazität überstieg. Spätere BIOS-Versionen seit den frühen 1990er Jahren konnten die CHS-Angaben von Festplatten normalerweise automatisch ermitteln.
Bei der Aufteilung des Speichers in Partitionen finden sich bei der CHS-Adressierung die jeweiligen Start- und End-Sektoren in der Partitionstabelle, bei IBM-PC-kompatiblen Computern ab dem IBM PC XT von 1983 ist das der Master Boot Record (MBR). Bei späteren Varianten wurde Logical Block Addressing (LBA) als Adressierungsmethode verwendet und die CHS-Werte, soweit möglich, umgerechnet, sodass beide Werte, CHS und LBA, auf dem Speichermedium (z. B. im MBR) gespeichert wurden. Später wurden die CHS-Werte dann komplett weggelassen.

## Speicherkapazitätsgrenzen

Mit Fortschreiten der Entwicklung und immer höheren Speicherkapazitäten bei Festplatten ergaben sich in der Realität mehrere Kapazitätsgrenzen, die sich aufgrund unterschiedlicher Design-Entscheidungen ergaben. So waren die CHS-Werte z. B. in der Firmware und im Speichercontroller unterschiedlich abgespeichert.
ATA/ATAPI, ursprünglich als IDE (für Integrated Drive Electronics) bekannt und später auch als Parallel-ATA (kurz PATA) bezeichnet, sieht 28 Bits für die CHS-Adressierung vor:
* 16 Bits für die Anzahl der Zylinder, 2$^{16}$ = max. 65.536 (0–65.535) Zylinder
* 4 Bits für die Anzahl der Köpfe, 2$^4$ = max. 16 (0–15) Köpfe (pro Zylinder)
* 8 Bits für die Sektoren pro Spur, 2$^8$−1 = 255 (1–255) Sektoren pro Spur
Im BIOS werden dafür aber nur 24 Bits bereitgestellt:
* 10 Bits für die Anzahl der Zylinder, 2$^{10}$ = max. 1.024 (0–1.023) Zylinder
* 8 Bits für die Anzahl der Köpfe, 2$^8$ = max. 256 (0–255) Köpfe (pro Zylinder)
* 6 Bits für die Sektoren pro Spur, 2$^6$−1 = 63 (1–63) Sektoren pro Spur

### 504-MiB-Grenze

| | BIOS | ATA | → Limit |
| Sektorgröße in Bytes | 512 | 512 | 512 |
| Zylinder | 1.024 | 65.536 | 1.024 |
| Köpfe | 256 | 16 | 16 |
| Sektoren/Spur | 63 | 255 | 63 |
| Speicherkapazitäts- grenze | 8,4 GB 7,8 GiB | 136,9 GB | 528 MB 504 MiB |
Bis zur 504-MiB-Grenze können bei Festplatten die realen Geometriedaten in Form der CHS-Werte eingegeben werden, der Datenzugriff erfolgt damit vielfach auch real an jener Stelle, die als C/H/S-Wertepaar angegeben ist.
Da bei der Speichergrenze der jeweils maximale Wert bei C/H/S, jeweils vom BIOS und vom Speichercontroller, den Ausschlag gibt, können ältere Versionen eines BIOS nur 1.024 (2$^{10}$) Zylinder, 16 (2$^4$) Köpfe und 63 (2$^6$ − 1) Sektoren ansteuern. Das ergab bei der Sektorgröße von 512 Bytes (2$^9$) maximal 504 MiB (2$^{29}$ Bytes). Später wurde die maximale Anzahl der Köpfe auf 256 (2$^8$) erhöht, was die Kapazitätsgrenze auf 8.064 MiB bzw. ≈ 8 GiB (≈ 2$^{33}$ Bytes) erhöhte.

### 8,4-GB-Grenze (Extended CHS)

Beim BIOS wurde daher ab den frühen 1990er Jahren die maximale Anzahl der Köpfe genutzt, um weiteren Speicherplatz nutzbar zu machen. Bei dieser als Extended CHS bezeichneten Methode wird nicht die reale Geometrie der Festplatte eingegeben, sondern fiktive CHS-Werte, wobei die Maximal-Anzahl der Köpfe ausgenutzt wird:
    1.024 Zylinder × 256 Köpfe × 63 Sektoren/Spur = 16.515.072 Sektoren
Das ergibt bei der üblichen Blockgröße von 512 Bytes pro Spur: 16.515.072 × 512 = 8.455.716.864 Bytes, also 8.064 MiB bzw. rund 7,8 GiB in binärer Umwandung, oder rund 8,4 GB in der SI-Einheit (siehe Byte-Präfixe).

### Konvertierung von CHS nach LBA

Beim LBA-Verfahren (Logical Block Addressing) werden die Blöcke mit Null beginnend durchgezählt. Die Konvertierung der CHS-Angaben in die Adresse des Blocks nach dem LBA-Verfahren erfolgt nach der Formel
    $LBA=(c\cdot H+h)\cdot S+s-1$
mit
* $c$: Zylindernummer
* $H$: Zahl der Leseköpfe
* $h$: Lesekopfnummer
* $S$: Zahl der Sektoren (= Zahl der Blöcke je Zylinderkopfspur bzw. Track)
* $s$: Sektornummer.

## Probleme mit der CHS-Adressierung

U. a. bei RAID spielten die genauen CHS-Angaben eine wichtige Rolle, weil bei einigen Formen der Datenspiegelung darauf geachtet werden muss, dass beide Festplatten identische Eigenschaften haben – nicht nur die gleiche Größe.