CHS (Cylinder-Head-Sector) war eine Methode zum Ansprechen von Festplatten. Um die Funktionsweise der CHS-Adressierung zu verstehen, muss zunächst ein Blick auf den Aufbau von Festplatten geworfen werden:
Aufbau einer Festplatte (HDD)

Festplatten mit rotierendem Speicher, sogenannte HDD (Hard Disk Drives) bestehen aus übereinander gestapelten Scheiben. Diese Scheiben werden von oben und unten mittels Schreibarmen und den entsprechenden Köpfen (Heads) beschrieben. Eine Scheibe ist in Sectoren (wie Kuchenstücke, hier in Rot) zu unterteilen. Zudem gibt es noch Spuren oder Cylinders (hier in Gelb). Eine Zusammensetzung aus Cylinder, Head und Sector ergeben zusammen eine Art Koordinate, die den Speichersektor eindeutig kennzeichnet.
Wichtig: Den Sector nicht mit einem Sektor verwechseln. Der Sektor ist der Ort, den wir mit der CHS Adressierung erreichen möchten. Er ist eine Art „Speicherblock“ auf der Festplatte mit einer festen Größe von 512 bytes. Später dazu mehr.
Auf einer Disk existiert zudem noch eine Nulllinie. Das ist ein vom Hersteller stärker magnetisierter Bereich welcher, ähnlich wie ein Radius, vom Mittelpunkt der Disk zum äußeren Rand verläuft. Ab dieser Linie beginnt die Zählung für den Adressbereich der Disk.
Das Ziel ist es also mit einer Kombination aus den Werten für Cylinder, Head und Sektor eine eindeutige Speicheradresse zu bilden, welche auf einen Datenblock, einen 512 Byte großen Sektor, verweißt.
Die CHS-Adressierung im Detail

Die CHS-Adressierung ist eine physikalische Adressierungsart mit einem Adressraum von 24 Bit. Dies ist eine feste Größe, die auf die Positionierung im Master Boot Record (MBR) zurückgeführt werden kann.
Für die Adressierung von Köpfen wurden 8 Bit Speicherplatz eingeplant. Dies erlaubt bis zu 256 adressierbare Köpfe. Für die Sectoren wurden nur 6 Bit (63 Sectoren) vergeben. Dafür wurden den Zylindern 10 Bit gewährt, womit dann maximal 1023 Zylinder adressiert werden können.
Als ein System der 1980er Jahre zeigt sich hier deutlich, wie damals die Entwicklung der IT und speziell der Speichermedien, vorhergeagt wurde. Mit einem Speicherraum für 256 adressierbare Köpfe hatte man sich eineutig verschätzt. Dies würde auf auf 128 Disks in einer HDD deuten. Marktüblich sind heutzutage hingegen nur 4 Magnetscheiben – Also 8 verwendete Köpfe.
Durch die Limitierung auf einen maximalen Adressraum von 24 Bit hat man aber auch gleichzeitig die maximale Partitionsgröße einer Festplatte auf rund 8GB festgesetzt. 1980 sicherlich eine Menge – heute natürlich viel zu wenig.
Die maximale Partitionsgröße setzt sich wie bereits oben beschrieben aus dem Adressraum von 24 Bit in Verbindung mit der Sektorgröße von 512 Byte zusammen. Der Adressraum von 24 Bit ist zur Veranschaulichung in seine einzelnen Komponenten aufgeteilt. Der Einfachheit halber kann aber auch mit 2^24 gerechnet werden.
Adressraum * Sektorgröße = 2^8 * 2^6 * 2^10 * 2^9 Byte = 2^33 byte
2^33 Byte = 2^3 * 2^10 * 2^10 * 2^10 Byte = 8 kkkbyte
8 kkkbyte = 8Gbyte
2^8 Bit = 256 Byte = Head
2^6 Bit = 64 Byte = Sector
2^10 Bit = 1024 Byte = Zylinder
2^9 Bit = 512 Byte = Sektor
So erhällt man die maximale Partitionsgröße von rund 8GB. (7,4% Abweichung durch die SI-Präfixe für binäre Vielfache zur Basis 10)
Die Weiterentwicklung: LBA32 und LBA64
Bei der Weiterentwicklung LBA32 (Logical Block Adressing) wird auf das Berechnen einer „CHS-Koordinate“ verzeichtet. Stattdessen werden bei der LBA-Adressierung die Sektoren einfach bei 0 beginnend gezählt. LBA 0 wäre der erste Sektor, LBA 1 der Zweite und so weiter.
Dies hat zur Folge, dass das Betriebsystem nicht mehr den Zeiger der Festplatte manuell auf die CHS-Koordinate navigieren muss. Stattdessen wird der Festplatte nur noch eine Adresse übermittelt. Der auf der Rückseite der HDD angebrachte Festplattencontroller findet den entsprechenden Sektor selbstständig.
Der IDE Standard kam ürsprünglich mit einer Möglichkeit 22 Bit-LBA Adressen zu verwenden. Mit dem Erscheinen von ATA-1 im Jahre 1994 wurde der Adressraum auf 28 Bit erweitert. Mit dem Erscheinen der Weiterentwicklung von ATA-6 im Jahre 2003 wurde der Adressraum erneut auf 48 Bit erweitert (2^48 * 512 byte).
Auch für SCSI gab es mehrere Versionen von LBA. Mit der Einführung von SCSI 1979 (damals noch SASI) wurden 21 Bit Adressen verwendet. Die SCSI Version 2 welche seit 1987 verfügbar, aber erst 1994 als SCSI-2 standardisiert wurde verwendete 32Bit. Die letzte, um 2000, vorgestellte Version verwendete 64Bit und ermöglichte somit eine maximale Partitionsgröße von 8 Milliaren Terrabyte.
Die üblicherweise verwendete Größe der Datenstrukturen von Festplatte und Speicher beträgt daher normalerweise 32 oder 64 Bit (LBA32 oder LBA64).
Weiterführende Rechnungen:
Maximale Partitionsgröße mit LBA-32 Adressen:
Adressraum * Sektorgröße
232 * 29byte = 241byte
21 * 240 byte = 2Tebibyte ~ 2 Terrabyte
--------------------------------------------------------------
Maximale Partitionsgröße mit LBA-64 (GPT):
Adressraum * Sektorgröße = 264 * 29 Byte = 273 byte
= 2³ * 270 = 8 Zebibyte
= 23 * 230 * 240 byte = 8 Gibi Tebi byte
= ~ 8 GTByte = 8 Zebibyte (~8 Milliarden Terrabyte)
Resümee:
An der Adressierung von Speichermedien lässt sich gut erkennen welche Entwicklung die IT und Elektrotechnik in den letzten Jahrzehnten zurückgelegt hat. Anfangs mit der maximalen Partitionsgröße von 8GB, der nächste große Standard auf damals warscheinlich unvorstellbare 2 Terrabyte begrenzt. Nun haben wir mit LBA64 bzw. GPT und UEFI eine maximal adressierbare Größe von 8 Milliarden Terrabyte. Heute noch unvorstellbar. In ein paar Jahrzehnten möglichweise schon die übliche Speicherkapazität der Smartwatch.
Weiterführende Links:
HDD – Festplattenlaufwerk (Wikipeida)
SI-Präfixe für binäre Vielfache zur Basis 10 (Wikipedia)
Logical Block Addressing (Wikipedia) (Thomas Krenn)
Bildquellen:
(1) – Autor: Wimox published under CC BY-SA 4.0 Licence – 14.11.1019
(2) – Autor: RokerHRO published under Public Domain Licence – 14.11.2019