Auf das heutige Thema kam ich durch einen Kommentar zu meinem Voyager-Buch. Da schreibt ein Rezensent: „Eine Warnung muss ich aber noch aussprechen, manchmal wird es doch sehr fachlich – als Beispiel sei die Beschreibung des Hauptrechners genannt: „Der Computer verfügte über je 4 KWorte ROM, 8 KWorte RAM und 4 Worte geteiltes RAM (mit dem MPS)“. Schwere Kost für einfache Gemüter, eher ein Stil, wie man ihn aus der Fachliteratur kennt.“.
Nun ja meine Bücher schreibe ich auch für mich selbst, alleine wegen der Auflage würde sich die Arbeit nicht lohnen und ich gehöre nicht zu den Flachbohrern.
In der Tat kommt einem der Begriff „KWort“ also Abkürzung für Kilowort heute selten unter, selbst in der Computertechnik. Ich selbst habe ihn erstmals gehört als ich mich mit Rechnern aus fürheren Zeiten beschäftigen. Bei Mikrocomputern gab es diesen begriff nicht, Ich dachte auch ich hätte es im Buch erklärt, denn ich schrieb auf S.130:
„Rechner griffen damals wortweise auf den Speicher zu. Ein „Wort“ war die kleinste adressierbare Einheit. Es entspricht der Verarbeitungsbreite des Rechners, also 18 Bit bei dem CCS/AACS und 16 Bit beim FDS. Die byteweise Adressierung kam erst mit den Mikroprozessoren auf. Entsprechend wurde der Adressbereich und die Speichergröße in Kiloworten und nicht Kilobytes angegeben.“.
Aber das ist wirklich etwas kurz, das leitet mich aber zu einem Thema, nämlich wie Computer Daten verarbeiteten und was es mit den Worten und Kiloworten zu tun hat. Wir sprechen ja gerne von „32 Bit Prozessoren“ oder „64 Bit Betriebssystemen“. Damit ist gemeint, dass der Prozessor 32 Bits verarbeitet und das Betriebssystem Code für einen 64 Bit Prozessor enthält. Insbesondere bei der x86 Serie ist diese Unterscheidung wichtig weil diese drei Codebasen hat: 16 Bit Code (DOS, Windows bis 3.1), 32 Bit Code (ab Windows 95, aber durchgängig erst in Windows NT/XP) und 64 Bit Code (ab Windows XP, lange Zeit gab es 32 und 64 Bit Versionen von Windows).
Diese Verarbeitungsbreite ist im Computerfachchinesisch ein Wort. Also ein Wort ist hier 32 oder 64 Bit breit. Meistens ist dann der Datenbus auch so breit, holt also 32 oder 64 Bit auf einmal aus dem Speicher in den Prozessor. Auch war zumindest bei früheren Rechnern, die nicht aus Mikroprozessoren aufgebaut waren, sondern vielen TTL-Bausteinen der Code so breit wie ein Wort, auch wenn bei bestimmten Befehlen es dann Füllbytes gab. Da das bei sehr großen Wortbreiten sehr ineffizient ist, bei diesen Rechnern wie Seymour Crays Supercomputern sich dann auch eingebürgert, dass zwar immer noch ganze Worte aus dem Speicher geholt werden, aber ein Befehl dann nicht mehr ein ganzes Wort breit ist. Eine Cray 1 hatte z.B. einen Arbeitsspeicher von 1 MWorten, das waren bei 64 Bit pro Wort dann 8 MByte.
Es gab früher sehr unterschiedliche Wortbreiten. Die Firma Digital Equipment hatte z.B. in der PDP Serie 12 Bit, 18 Bit, 36 Bit und 16/32 Bit Architekturen. Die für heutige Verhältnisse „krumme“ Breiten von 12, 18 und 36 Bit ergaben sich dadurch, dass bis Ende der Sechziger Jahre sechs Bit genommen wurden um Zeichen, also die Elemente von Text zu speichern. 6 Bit ergeben 2^6 also 64 Kombinationen. Das reicht für die Großbuchstaben (26 Stück) und Ziffern (10) und dann noch 28 andere Zeichen wie Komma, Minus, Stern und Steuerzeichen. In Programmiersprachen aus dieser Ära findet man dann auch oft nur Code in Großbuchstaben. Ende der Sechziger Jahre wurde der ASCII-Standard (American Standard für Information Interchange) eingeführt, der 7 Bit für die Zeichenkodierung verwendete und ab da setzten sich dann Architekturen mit Wortbreiten eines Vielfaches von 8 Bit durch. Seltsamerweise gab es keine Rechner mit Vielfachen von 7 Bits die ja für den ASCII Zeichensatz ausgereicht hätten.
Diese frühen Architekturen griffen auf den Speicher nur wortweise zu, sie konnten also nicht einzelne Bytes adressieren. Das war damals auch nicht nötig. Computer wurden damals für Berechnungen genutzt und da gibt es Standardformate für ganze Zahlen und Fließkommazahlen. Sie haben also keine variable Länge sondern sind eben 16, 32 oder 64 Bit breit, je nachdem wie genau gerechnet werden soll oder bei ganzen Zahlen welcher Wertebereich abgedeckt wird. Die Wortbreite wird dann so gewählt, wie es für den Zweck für den der Rechner entworfen wurde dienlich ist. Das trifft besonders für Rechner zu, die nur für bestimmte Zwecke entworfen wurden. Der Bordrechner von Gemini hatte z.b. eine 13/26 Bit Architektur.
Ein Vorteil bei Architekturen mit kleinen Wortbreiten ist, dass wenn der Speicher wortweise adressiert wird, der Gesamtarbeitsspeicher größer sein kann, als bei byteweise Adressierung. Bei den obigen Rechnern von PDP mit 12 Bit Breite (z.B. die populäre PDP-8) ist der Arbeitsspeicher um 50 Prozent größer als bei Byteweise Adressierung (12 Bit / 8 Bit = 1,5) und bei der 18 Bit Architektur ist der Vorteil sogar deutlich nämlich (18/8 = Faktor 2,25 oder 589.824 Byte zu 262.144 Byte. Bei Architekturen mit 32 oder 64 Bit spielt das keine Rolle mehr weil der Speicher auch so riesig ist. Der Intel 80386 mit 32 Bit Adressierung wurde 1985 eingeführt, erst im Jahre 2005 hatten normale PC den vollen Speicherausbau von 4 Gbyte).
Bei 64 Bit Prozessoren gibt es keinen Prozessor auf dem Markt, der tatsächlich einen herausgeführten 64 Bit Adressbus hat. Denn dieser Adressbereich liegt so weit von der heutigen Technik weg, das wenn man bezahlbaren Speicher für einen 64 Bit Adressraum hat, der Prozessor wohl nirgendwo mehr eingesetzt wird. Aktuell fertigt eine Firma 24 Gigabit DRAM, (Miron), die anderen Halbleiterhersteller maximal 16 GBit DRAM. Mit 16 GBit RAM Bausteinen bräuchte man über 8 Milliarden dieser RAM Bausteine für den 64 Bit großen Adressraum. Meist beschränkt der Chipsatz die maximale RAM Aufrüstung sogar noch weiter, denn schon die ersten 64 Bit Prozessoren hatten 44 oder 48 Bit breite Adressbusse was immer hin noch 8192 / 131.072 16 GBit Bausteinen entspricht. Dagegen sind auf den meisten Mainboards maximal 128 GByte möglich.
Wie es dazu kam das heute der Speicher wortweise adressiert wird, hat mit den Mikroprozessoren zu tun. Die 8 Bit Generation (siehe auch letzter Blog) war die erste Mikroprozessorgeneration die einen Impakt auf die Allgemeinheit hatte. Also vorher war es so, dass (Gross-)Rechner vor allem für mathematische Probleme genutzt wurden. Die NASA hatte Rechner welche Bahnen berechneten. Der Wetterdienst fütterte Rechner mit Daten von Wetterstationem und -sonden und Satellitenmessungen und berechnet das Wetter für die nächsten Stunden oder Tage – dank mehr Leistung stieg die Vorhersagezeitraum seitdem an, während Anfang der Sechziger man das Wetter für den nächsten und übernächsten Tag einigermaßen genau vorhersagen konnte, ist heute eine Wettervorhersage über eine Woche relativ genau und bei 14 Tagen immer noch brauchbar. Berechnungen dominierten auch in kaufmännischen Anwendungen. Bei einer Buchhaltung, Lagerfaltung oder Finanztransaktionen geht es letztendlich auch nur um Geld, das als Zahlenwert verarbeitet wird.
Mit den 8 Bit Rechnern konnte man auch Berechnungen machen, aber für Privatpersonen oder Freiberufler oder Handwerker waren sie nützlich als Textsystem. Nicht gerade nach heutigen Maßstäben benutzerfreundlich aber schon in den achtziger Jahren konnte man eine Schablone für eine Rechnung anlegen, die dann mit den Adressdaten und Posten gefüllt und ausgedruckt wurde. Daneben war der Computer eine Schreibmaschine für die man kein Tipp-Ex brauchte, schnell Absätze umformatieren oder verschieben konnte oder immer wiederkehrende Phrasen als Textbaustein hinzufügen konnte. Also viele Anwendungen der 8-Bit Ära wie die Textverarbeitung Wordstar oder die Datenbank DBASE arbeiteten vor allem mit Text.
Da traf es sich gut, dass die Prozessoren in den Rechnern 8 Bit verarbeiteten, was einem Zeichen entsprach – nominell nur 7 Bit, aber die restlichen 128 nicht standardisieren Zeichen nutzte jeder Hersteller um weitere Zeichen zu definieren, so war der ASCII Standard ein US-Standard. Er kannte keine Sonderzeichen die in europäischen Ländern üblich waren, wie unsere umlaute. Die konnte man in diesen 128 Zeichen unterbringen, hatte dann aber ein Problem, weil sie bei vielen Rechnern mit US-Tastaturen nicht auf der Tastatur waren. Gängiger war es dort Grafikzeichen für Blockgrafik, Rahmen oder Spielsymbole für Textspiele unterzubringen.
Die 16 Bit Rechner hätten nun eine wortweise Adressierung einführen können, doch die meisten taten das nicht. Der einzige 16 Bit Prozessor den ich kenne war der TMS 9900, der auch im Texas Instruments TI 99/4a steckte. Er adressierte Wortweise, aber dafür hatte man den Adressraum auf 15 Bit beschränkt also halbiert. Der 8086 adressierte auch byteweise, weil ein Vorteil von ihm war, dass er softwarekompatibel zu seinem Vorgänger 8080 war. Die Opcodes waren nicht identisch, aber ein einfaches Programm konnte einen Maschinencode für den 8080 in einen des 8086 umschreiben. Das war von Vorteil weil es dafür jede Menge Software gab und bis IBM den 8086 als Prozessor für den IBM PC erkor (eigentlich die langsamere Version 8088) gab es auch kaum Software für den Prozessor. Warum Motorola beim 68000 auch byteweise adressierte weiß ich ledier nicht. Ein Vorteil der byteweisen Adressierung ist, dass die meisten Mikroprozessoren variable Codelängen haben. Also ein kurzer Befehl ohne Parameter kann auch nur ein Byte lang sein, das verkürzt dann den Speicherbedarf. Das war lange Zeit ein wichtiger Grund, denn damals hatte man eigentlich immer zu wenig Speicher in seinem Rechner.
Sowohl der 8086 wie auch 68000 wurden erfolgreich. Der 8086 vor allem beim IBM PC und den Nachbauten. Der 68000 steckte im Macintosh, Atari ST oder Amiga. Dann schlug bei den Nachfolgern das gleiche Argument zu, dass schon beim 8086 galt und zwar noch mehr, denn die waren nicht nur Softwarekompatibel sondern Code der Vorgänger lief direkt also auch als Binärdatei. Das heißt die 32 Bit Generation 80386 / 68020 hatte zwar neue 32 Bit Befehle,m aber konnte immer noch byteweise adressieren.
Das gilt auch für die 64 Bit Generation, aber auch wenn Texte noch immer nicht ein vielfaches von 64 Bit lang sein müssen, ist es doch heute nicht so das die Prozessoren einzelne Bytes adressieren, sondern der Anfang von Datenstrukturen auf Wortgrenzen liegt also vielfaches von 64 Bit.