Das Kilowort
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.
Klugscheißermode on „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) “
Unter DOS muß es doch auch 8 Bit Code gegeben haben. Bewusst ist mir das aber nie gewesen. Unter Windows 3.1 gab es auch schon 32 Bit Code, siehe Win32s
8 Bit Code gab es nie. Wir reden hier von dem Befehlssatz der mit 8086 eingeführt wurde (16 Bit), 80386 (32 Bit). Bei 64 Bit muss sogar noch unterscheiden weil Intel zuerst eine eigene Architektur einführte, aber dann doe AMD64 Architektur übernahm.
Was Du meinst ist der Zugriff auf ein Byte, also auf ein Halbregister, z.B. AH oder AL. Das war unter DOS Zeiten oft üblich.
Win32s war keine Windows Version sondern eine Erweiterung für Windows 3.1, damit Programmierer unter Windows 3.1 Programme für NT testen konnten. Steht übrigens auch alles in dem verlinkten Windows Artikel, für leute die erst lesen und dann posten.
Hatte irgendwie den 8086/8088 als 8 Bit CPU im Kopf, vermutlich wegen der Busbreite beim 8088…
Ich habe nichts davon geschrieben das Win32s eine Windows Version ist. Ich habe nur geschrieben das es durch Win32s 32Bit Code unter Windows 3.1 gab und nicht nur 16 Bit Code. Das ganze war auch vordergründig keine Funktion um NT Programme unter Windows 3.1 zu testen sondern der ersten schritt zu 32 Bit in den „Privatbenutzer“-Windows. Ist ja schön das du das in dem Windows Artikel geschrieben hast, aber in dem Blogbeitrag steht eben das es 32 Bit Code erst ab Windows 95 gab.
Und warum sollte ich veraltet Artikel lesen um zu lernen das es 32 Bit Anwendungen/Treiber unter Windows 3.1 gab. Win32s habe ich diverse mal selbst installiert.
Jetzt ist mir auch klar was Du unter „veraltet“ verstehst. Das sind Artikel die sich mit der Vergangenheit befassen. Da habe ich eine schlechte Nachricht für Dich. Es wird wahrscheinlich kaum noch Artikel geben die sich mit aktuellen Projekten die real durchgeführt werden befassen. Der Grund ist das die Informationslage sich immer weiter verschlechtert und ich das Niveau das ich anstrebe nicht mehr halten kann. Was noch geht ist mein Senf zu Zukunftsprojekten, aber die gibt es nur im Blog, nicht in der website.
Das Problem ist das du in dem Artikel auch von „heute“ schreibst.
„Noch heute sind alle Windows Versionen als 32 Bit Variante erhältlich und ein 64 Bit Windows kann 32 Bit Programme ausführen. Nach wie vor erscheinen auch neue Programme im 32 Bit Code. Zum einen weil das 64 Bit System richtige Vorteile nur bietet, wenn die Anwendung mehr als 4 GB Speicher benötigt. Zum anderen weil der 64 Bit Code 50 bis 100 % größer ist und so mehr Speicher und Platz auf der Festplatte benötigt. Microsoft selbst rät dazu, die 32 Bit Versionen von MS-Office zu installieren.“
Ja, bei diesem Artikel ist das kein größeres Problem. Aber ich musste das veraltet einfach reinbringen weil du mit einfach unterstellst nicht zu lesen. (Wenn du einen wirklich grausam veralteten Artikel mit „heute“ Bezug suchst, ich habe da was in Erinnerungen mit Backupstrategien)
Das mit „heute“ kann ich nachvollziehen, aber überall die Jahreszahl einzuflechten wann man es schreibt macht den Beitrag auch nicht lesbarer. De Faktor kann ich bei über 1.800 Artikeln nicht alle aktualisieren. Ich lasse sie so weil sie den Stand zu der Zeit wo sie geschrieben wurden wiedergeben. Zur Einordnung gibt es zumindest bei den neueren artikeln ganz unten eine Angabe wann ich ihn verfasst habe, in diesem Fall am 22.10.2020. Es wäre aber auch am Fehlen von Windows 11 zu erkennen.
Hallo Bernd,
die Byteweise Adressierung wurde mit der IBM 360 Architektur eingeführt. Das war eine 32 Bit Architektur, aber von der Adresse wurden nur 24 Bit nach außen geführt. (Der Fehler wurde dann mit dem mc68k wiederholt.) Die meißten danach entwickelten general purpose Rechner haben dann Byteweise Adressierung verwendet.
Wortweise Adressierung war lange bei den Minicomputern populär, da das den Schaltungsaufwand verringert hat. Auch Rechner mit Bitslice CPUs wurden regelmäßig als 18/36 Bit Rechner gebaut.
18 Bit für die Adresse, da das zu den damals verfügbaren RAM Größen gepasst hat, 36 Bit für Floats, die angeblich viel brauchbarer waren als 32 Bit Floats. Die Befehle waren dann auch 18 Bit groß.
Betreffend den Motorola mc68k:
die Vorbilder waren IBM360, VAX und PDP11. Alle drei waren Byteweise adressierbar.
Bei den mc68k ist wie bei der IBM360 der Code in 2Byte (Halb)worten strukturiert, und muß auf geraden Adressen liegen. Auch bei mc68k und IBM360 hat der Befehlscode eine variable Länge, aber immer im Vielfachen von 2 Bytes.
MfG
Wortweise Adressierung gab es schon beim IBM 1401 und dem DDR-Nachbau Robotron 300. Bei den 8 Bit pro Zeichen war allerdings ein Prüfbit und ein Wortmarkenbit dabei, so dass für die Information nut 6 Bit übrig blieben. Durch das Wortmarkenbit war eine variable Wortlänge möglich, von 1 bis 120 Byte.