64 Bit ist der Tod von Unix

Nun ja, die Überschrift ist etwas provokant. Aber etwas ist schon dran.

Bei Unix und den meisten heutigen Betriebssystemen ist alles ein File.

Ein File ist ein Konstrukt, damit mehr Daten gespeichert werden können wie die CPU in ihrem Adressraum ansprechen kann.

Erinnern wir uns an die 16 Bit Systeme (CP/M), 20 Bit Systeme (MS-DOS), 24 Bit Systeme (OS/2 1.x, MVS), 31 Bit Systeme (OS/2, OS/390, beide übrigens 31 Bit, weil so 24 Bit Lademodule ohne erneute Übersetzung zusammen mit 31 Bit Modulen verwendet werden konnten), 32 Bit Systeme (Windows NT, die meisten älteren Unix Versionen), so reichte der Adressraum nicht, um einen üblichen „Hintergrundspeicher“, also eine Floppy oder eine Harddisk, komplett adressieren zu können.

Also baute man ein File-System mit 512 Byte Sektoren (es gibt auch Festplatten mit 4kb Sektoren), diese werden meist zu vier oder zu einer höheren Zweierpotenz zu einem Block gruppiert, und das Betriebssystem lädt den Inhalt eines Blocks in den Hauptspeicher (RAM) oder sichert einen Block auf der Festplatte.

Als die meisten von Uns von 16 Bit (Windows 95) auf 32 Bit (Windows XP) umsteigen, waren die Festplatten schon deutlich über 4 GB gross, also zu gross für einen 32 Bit Adressraum.

Nun haben wir 64 Bit, klingt im Vergleich zu 32 Bit nicht wesentlich mehr, also statt 2 Kisten Bier nun 4 Kisten Bier? Aber bei einem Adressraum meinen wir 2 hoch 32 oder 2 hoch 64.

Was ist nun 2 hoch 64, eine lange Zahl!

Rechnen wir mal anders: Ein 64 Bit Computer läuft ohne Unterbrechung 5 Jahre und soll nur Daten, die über eine Schnittstelle (Ethernet) angeliefert werden, in seinem Adressrum speichern.

5 Jahre sind 5 * 365,25 * 24 * 60 * 60, also 157.788.000, also 2 hoch 27,23 Sekunde. 
Um es einfach zu haben, sagen wir 2 hoch 28 Sekunden.
Um 2 hoch 64 Bytes in 2 hoch 28 Sekunden zu schreiben, müssen pro Sekunde 2 hoch (64 – 28), also 2 hoch 36 Bytes geliefert werden, also etwa 69 GB pro Sekunde, Also muss die Ethernet Schnittstelle 690 Gbits/sec liefern. Pro Byte (8 Bit) müssen 10 Bits inklusive der Steuerungs- und Kontroll-Bits über die Leistung gehen.

Sie werden jetzt sagen: 
5 Jahre hält kein Computer ohne Störung, richtig. 
690 GBit/sec ist kaum zu schaffen, richtig.
Und was nützen uns die Daten nach 5 Jahren, wir wollen sie lesen und verarbeiten, sehr richtig.

Beim Programmieren sollte man die Variablen immer auf Word-Grenzen beginnen lassen. Ansonsten verdoppeln sich die Zugriffszeiten. Beginnt die Variable mit dem Inhalt „Hallo“ auf einer Wortgrenze, reicht ein Zugriff, liegt sie aber ab dem 5 Byte im 64 Bit Word, muss zuerst der Word 1 „####Hall“ gelesen werden, der Inhalt zu „Hall____“ geschoben werden, das Word 2 „o#######“ gelesen und das „o“ kopiert werden. Also sollte die Adressierung nicht pro Byte sondern pro Wort (64 Bit, also 8 Bytes) erfolgen, der Adressraum sind also 2 hoch 64 Worte, und schon sind wir bei 5600 GBit/sec.  

Also reicht ein Adressraum von 64 Bits, wer mehr braucht, wird eher mehrere von einander unabhängige Computer nutzen.

Das Konstrukt „File“ brauchen wir nicht mehr, um Daten in den Adressraum der CPU ein- und auszulagern. Eine „Datei“ ist ein Stück Adressraum in ausreichender Grösse und das Betriebssystem hat den Namen (Verzeichniseintrag) mit der Startadresse verknüpft. Damit ist der Zugriff für ein Anwendungsprogramm, oder auch eine Datenbank, sehr einfach, Startadresse plus Position addieren und zugreifen.

Der Preis eines Speichermediums steigt mit der Zugriffsgeschwindigkeit, darum der L1-, L2-, L3-Cache, das RAM, die SSD Festplatte, die normale Festplatte und schliesslich das Bandlaufwerk. Und für die Verwaltung sorgt die MMU (Memory Management Unit), Intel hat sie mit dem 80386 eingeführt, bei den Betriebssystem, die noch auf 80286 liefen, war die Speicherverwaltung nicht nur wegen der Segmente ein Krampf. Linux entstand, also PCs mit 80386 bezahlbar wurden, nur eben waren die 32 Bit Adressraum nicht ausreichend um auf ein File-System zu verzichten.

Seit einigen Jahren haben wir 64 Bit CPUs mit eingebauter MMU, trotzdem plagen wir uns noch mit dem File-IO, warum?