Hallo Forum, ich versteh den Zusammenhang zwischen der Bitbreite eines Prozessors und der maximalen Größe des adressierbaren Speichers nicht. So wie ich es verstanden habe, wird die maximale Größe des Speichers durch die Anzahl der Adressleitung von der CPU zum Speicher limitiert. Und die Bitbreite gibt die Größe der Register innerhalb der CPU/ALU an. Wie genau hängen die beiden zusammen? VG
Jack S. schrieb: > ich versteh den Zusammenhang zwischen der Bitbreite eines Prozessors und > der maximalen Größe des adressierbaren Speichers nicht. Ein direkter Zusammenhang besteht da auch nicht. Betrachtet man die Datenbusbreite des Prozessors (und nicht die interne Datenregisterbreite) und zusätzlich die Adressbusbreite, dann ergibt sich allerdings tatsächlich der maximal adressierbare Speicher. Ein 68000 hat einen 16-Bit-Datenbus und 23 Adressleitungen - damit ergibt sich ein adressierbarer Speicher von 16 MByte (2 ^ 23 Worte à 16 Bit = 2 ^ 24 Byte à 8 Bit). Der 8088 von Intel hat einen 8-Bit-Datenbus und 20 Adressleitungen, damit ergibt sich ein adressierbarer Speicher von 1 MByte (2 ^ 20 Byte à 8 Bit). Der 8086 von Intel hat einen 16-Bit-Datenbus und ebenfalls 20 Adressleitungen, dennoch ist der adressierbare Speicher nicht größer als beim 8088 - bei 16-Bit-Zugriffen hat die Adressleitung A0 keine Funktion. Der 68000 hat intern 32 Bit breite Register, 8088 und 8086 haben intern 16 Bit breite Register -- und, wie Du siehst, nichts davon hat irgendeinen Bezug zum nutzbaren Adressraum.
Wenn ein Adressregister 32 Bit breit ist, kann es 2³² Bytes adressieren. Bei 64 eben 2⁶⁴. Unabhängig davon ist, wieviele Adressleitungen die CPU tatsächlich "nach draußen" führt, z.B. 36 bis 48 bei den letzten Intel-Generationen. Das bestimmt dann, wieviel RAM tatsächlich verbaut werden kann.
Jack S. schrieb: > Und die Bitbreite > gibt die Größe der Register innerhalb der CPU/ALU an. Wie genau hängen > die beiden zusammen? n Bitbreite y Anzahl adressierbarer Speicherworte
1 | y = 2^n |
Mit bspw. 16 Adressbits kannst du 65536 Adressen ansprechen.
Das hängt gar nicht zusammen. Bei einem 8-Bitter ist der Addressraum üblicherweise 2^16 = 64 KByte groß. Beispielsweise bei einem MCS51 mit einer Wortgröße von 8 Bit gibt es einen 16 Bit DPTR Register über das der Speicher adressiert werden kann. Das 16 Bit Register ist aufgeteilt in ein High und Low Register, damit über 8-Bit Zugriffe das Register beschrieben werden kann. Bei einem 32-Bitter (Wortbreite 32 Bit) wären bei einer Adressierung des Speichers mit 32 Bit ein Adressraum von 2^32 = 4 Gigabyte möglich. Als der PC-Prozessor 386 mit 32 Bit Wortgröße entwickelt wurde, war Speicher noch so dermassen teuer, dass ein PC im besten Fall DRAM im zweistelligen Megabytebereich hatte. Deshalb konnte der 386 physikalisch auch gar nicht so viel Speicher verwalten. Nach der Jahrtausendwende wurde dann DRAM so günstig, dass PCs mit so viel DRAM ausgestattet wurden, dass 32 Bit nicht mehr ausgereicht haben für die Adressierung, deshalb mussten wieder Kunstgriffe (Murks) eingeführt werden, um diese Grenze zu umgehen. Mit einem 64-Bitter (Wortbreite 64 Bit) wären 2^64 Byte Adressraum direkt adressierbar. Aber über so viel Speicher wird ein Computer wohl nie verfügen. Bei einem 8-Bit Embedded-System ist der Programmcode üblicherweise ein paar KByte bis ein paar zig KByte groß. Deshalb passen 16 Bit Adressraum da ganz gut dazu. Bei einem 32-Bit Embedded-System kann der Programmcode schon mal ein paar huntert Kbyte groß werden. Deshalb ist hier ein Adressraum von 32-Bit passend. Du siehst, nicht direkt zusammenhängend, sondern indirekt durch diese Gegebenheiten.
Jack S. schrieb: > Wie genau hängen die beiden zusammen? Gar nicht. Das denkt sich jeder Hersteller so aus, wie es ihm gerade passt.
Jack S. schrieb: > ich versteh den Zusammenhang zwischen der Bitbreite eines Prozessors und > der maximalen Größe des adressierbaren Speichers nicht. So wie ich es > verstanden habe, wird die maximale Größe des Speichers durch die Anzahl > der Adressleitung von der CPU zum Speicher limitiert. Und die Bitbreite > gibt die Größe der Register innerhalb der CPU/ALU an. Wie genau hängen > die beiden zusammen? Das lässt sich nicht so pauschal verallgemeinern, wie Du es gerne hättest, weil es Ausnahmen gibt – adressieren kann man z.B. deutlich mehr, obwohl die Anzahl der Adressleitungen es gar nicht hergibt, Register können auch mal kleiner gestaltet sein, obwohl die CPU selbst deutlich breiter ist. Du hast Dich gedanklich in eine Sackgasse geführt, völlig unnötig.
Steffen K. schrieb: > Als der PC-Prozessor 386 mit 32 Bit Wortgröße entwickelt wurde, > war Speicher noch so dermassen teuer, dass ein PC im besten Fall > DRAM im zweistelligen Megabytebereich hatte. Soweit, so korrekt. > Deshalb konnte der 386 physikalisch > auch gar nicht so viel Speicher verwalten. Nö, der 80386 konnte sehr physikalisch 2 ^ 32 Byte = 4 GiB RAM ansteuern, alle dafür nötigen Adressleitungen waren herausgeführt. Das waren A2-A31 und vier "byte-enable"-Signale /BE0../BE3. (Siehe https://bitsavers.trailing-edge.com/components/intel/80386/231746-001_Introduction_to_the_80386_Apr86.pdf, S. 54 bzw. S. 94) Das sah beim 80386SX anders aus, der hatte nicht nur nur einen 16-Bit-Datenbus, sondern auch nur einen 24-Bit-Adressbus. Damit war er ein nahezu 1:1-Ersatz für einen 80286; es gab entsprechende Adapterplatinen, ja, sogar die c't hatte ein entsprechendes Selbstbauprojekt. Daß es recht sicher nie einen PC mit i386 und Speichervollausbau gab, lag nicht nur an den hohen Preisen für Speicher, sondern auch an Platzbedarf und den resultierenden Leitungslängen, die schon bei den damals üblichen 33 MHz Taktfrequenz nicht unproblematisch waren. Mit den damals verbreiteten 8-Bit-SIMMs à 1 MByte brauchte man für 16 MiByte etwa eine halbe Postkarte an Fläche (ca. Din A7), 4 GiB sind 256 mal so viel ... das wäre ein Fladen von etwa 2 x Din A0-Format, ganz zu schweigen von zig Treiberstufen und der nötigen Ansteuerungslogik. (Ich hatte 1992 einen i386 mit 16 MiB RAM, der war schon exotisch, weil fast alle Motherboards damals nur acht Steckplätze für Speichermodule hatten - SIMMs mit 4 MByte waren damals noch unbezahlbarer und hätten in dem Mainboard auch nicht funktioniert, zumal der Cachecontroller auch nicht so viel Speicher unterstützte ...)
Also wenn ich das jetzt richtig verstanden habe ist ausschlaggebend für die Speichergröße ausschließlich die Anzahl der Adressleitungen sonst nichts. Andere Frage noch, wie viel Bit/Byte kann pro Adresse gespeichert werden? Ich habe immer an 1Byte pro Adresse gedacht. Es geht aber bestimmt auch mehr. Ist das Herstellersache oder was reguliert das?
Jack S. schrieb: > Also wenn ich das jetzt richtig verstanden habe ist ausschlaggebend für > die Speichergröße ausschließlich die Anzahl der Adressleitungen sonst > nichts. Ich kann noch einen drauf setzen. Viele Prozessoren unterscheiden zwischen Programm- und Arbeitsspeicher. Sie können mit 8 Bit Bus-Breite und 16 Adressleitungen z.B. 64 kB Arbeitspeicher und 64 kB Programmspeicher ansprechen, als insgesamt 128 kB.
Jack S. schrieb: > die Speichergröße ausschließlich die Anzahl der Adressleitungen sonst > nichts. In groben Zügen und fürs einfache Verständnis ja, aber im Detail stecken allerlei Teufelchen. Prozessoren haben oft keine externen Busse mit einzelnen und getrennten Adressleitungen mehr. Wenn etwa das RAM direkt vom Prozessor angesteuert wird und weitere Adressierungen mehr oder weniger seriell erfolgen. Es sogar sein, dass das Datasheet aufgrund Marketing lügt.
:
Bearbeitet durch User
(prx) A. K. schrieb: > In groben Zügen und fürs einfache Verständnis ja, aber im Detail stecken > allerlei Teufelchen. Prozessoren haben oft keine externen Busse mit > einzelnen und getrennten Adressleitungen mehr. Wenn etwa das RAM direkt > vom Prozessor angesteuert wird und weitere Adressierungen mehr oder > weniger seriell erfolgen. Es sogar sein, dass das Datasheet aufgrund > Marketing lügt. Ok das reicht mir danke. Ich werde mich mit der Zeit mehr einlesen das war nur ein Punkt an dem ich nicht weiterkam.
Jack S. schrieb: > Ich habe immer an 1Byte pro Adresse gedacht. Es geht aber > bestimmt auch mehr. Ist das Herstellersache oder was reguliert das? Es gibt keine Weltbehörde für strikte Durchsetzung von Grundsätzen für Rechnerarchitekturen. :) Heute ist ein 8-Bit Byte pro Adresse üblich, aber es kann auch ein Rechnerwort pro Adresse sein. In den ersten Jahrzehnten der Computerei gab es Worte von z.B. 12, 16, 18, 36, 48, 60 Bit und es gab überhaupt keine Adresse einzelner darin codierter Zeichen. Technisch/Wissenschaftliche Aufgabenstellungen benötigen Bytes nicht so sehr.
Wie oben schon skizziert kann es sein, dass am unteren Ende ein oder zwei Adressleitungen fehlen, weil sie statt dessen als Byte-Selects ausgeführt sind. Das muss man dann geistig umrechnen.
Rüdiger B. schrieb: > Die PDP-8 hat eine 12 Bit CPU. Es geht noch "besser": https://en.wikipedia.org/wiki/Motorola_MC14500B http://www.righto.com/2021/02/a-one-bit-processor-explained-reverse.html
Jack S. schrieb: > Ok das reicht mir danke. Ich werde mich mit der Zeit mehr einlesen das > war nur ein Punkt an dem ich nicht weiterkam. Am besten 40-50 Jahre zurück in die Vergangenheit springen und sich die Anfänge mit den 8-bit-Prozessoren (CISC) und dann entsprechend weiter mit den 16/32-bittern anschauen, als man diese in den damaligen Homecomputern verwendete, was aus heutiger Sicht als Retro bezeichnet wird – da kann man zumindest grob eine gewisse Tendenz erkennen, denn mit den heutigen µControllern (in der Regel RISC) wird es schnell unüberschaubar, denn die beinhalten nicht nur einen Prozessor, sondern auch die ganze Peripherie samt Speicherblöcken mit Adress- und Steuerleitungen. Ferner lohnt es sich auch, sich die Unterscheidung in Harvard- und Von-Neumann-Architektur anzuschauen. Die Anfänge mit den 4-bittern kann man sich eigentlich komplett sparen und einfach bei den 8-Bit-CPUs wie 8085, Z80, 6502 mit der Betrachtung beginnen – alle diese Prozessoren hatten mindestens einen Data-, Adress- und Steuerbus nach außen herausgeführt und es musste gelernt werden, alles an diese Busse richtig anzuschließen, was heute in den µControllern für den User bereits mit dem Kauf erledigt ist. Auf diese Weise ist gewissermaßen eine Art Verdummung auf diesem Gebiet passiert, denn das ganze Wissen drumherum braucht man scheinbar nicht, aber auch die Arduino-Euphorie und der Erfolg der Arduinojünger kann damit erklärt werden, weil man mit ganz wenig Wissen und mit quasi Null TTL-Erfahrung trotzdem scheinbar sehr weit kommen kann (solange die Dupontleitungen dafür nur lang genug sind). Wenn man die Ursprünge und deren Zusammenhänge versteht, wird man auch jeden µController verstehen können, weil man nachvollziehen kann, was im Inneren vor sich geht oder ungefähr vor sich gehen könnte, weil ja die genauen Schaltpläne oft nicht bekannt sind, aber man kennt ja die Konzepte aus der Vergangenheit.
:
Bearbeitet durch User
Gregor J. schrieb: > mit quasi Null TTL-Erfahrung trotzdem scheinbar > sehr weit kommen kann (solange die Dupontleitungen dafür nur lang genug > sind). ROTFL!
Klaus F. schrieb: > https://en.wikipedia.org/wiki/Motorola_MC14500B Und bis 18V Versorgungsspannung!
Theoretisch wäre es auch möglich gewesen über den Adressbus von 8bit immer vier hintereinander geschickte Werte als Adresse beim Chip aufzufassen. Dadurch wären über 8bit auch 2^32 Adressen ansprechbar gewesen, aber nur mit 1/4 der Geschwindigkeit gegenüber einem echten 32bit-Adressbus. D.h. eine leistungsmäßige und wirtschaftliche schlechte Lösung wäre das gewesen.
Dieter D. schrieb: > D.h. eine leistungsmäßige und wirtschaftliche schlechte > Lösung wäre das gewesen. Das kommt drauf an, was wirtschaftlich besser ist, ein schmalerer Bus (Gehäuse mit weniger Pins) oder eine schnellere Adressierung.
(prx) A. K. schrieb: > Technisch/Wissenschaftliche Aufgabenstellungen benötigen Bytes nicht so > sehr. Spätestens für HMI-IO dann doch...
Dieter D. schrieb: > Theoretisch wäre es auch möglich gewesen über den Adressbus von 8bit > immer vier hintereinander geschickte Werte als Adresse beim Chip > aufzufassen. Nicht nur theoretisch. Ein früher 8 Bit Mikroprozessor, der RCA 1802, multiplexte nicht wie sonst oft Adressen und Daten, sondern beide Hälften der 16 Adressbits über 8 Adressleitungen. Auch deshalb erwähnte ich oben die Teufelchen im Detail. Keine Regel ohne Ausnahmen. AMDs K7 (Athlon) übernahm den EV6 Bus von DECs Alpha Prozessoren. Der arbeitete in Paketen. Eine Bustransaktion bestand also aus mehreren nacheinander übertragenen Worten, die Adress- und Steuerbits enthielten: "The external interface consisted of a bidirectional 64-bit double data rate (DDR) data bus and two 15-bit unidirectional time-multiplexed address and control buses, one for signals originating from the Alpha 21264 and one for signals originating from the system." AMD verwendete nur 13 Bits, was den Adressraum reduzierte. Siehe Bild.
:
Bearbeitet durch User
Dieter D. schrieb: > Theoretisch wäre es auch möglich gewesen über den Adressbus von 8bit > immer vier hintereinander geschickte Werte als Adresse beim Chip > aufzufassen. Mit zwei aufeinanderfolgenden Adressteilen ist das bei der Ansteuerung von DRAM eine übliche Vorgehensweise. Ein 4164, ein typisches DRAM mit 64k x 1 Bit Kapazität, kommt im 16-poligen Gehäuse, aber für 64k braucht es ja schon 16 Adressleitungen ... Und genau da wird ein Zeitmultiplexverfahren angewandt, die eine Hälfte der Adresse wird als Spaltenadresse (Column Address) und die andere Hälfte der Adresse als Zeilenadresse (Row Address) bezeichnet - und die beiden Steuerleitungen /RAS und /CAS haben genau deswegen diese Namen.
Harald K. schrieb: > Mit zwei aufeinanderfolgenden Adressteilen ... Darum war mein Beispiel mit vier Adressteilen (oder mehr). Bei der Aufteilung in zwei Adressteilen gibt es noch relativ wenig zusätzliche Verlangsamung dadurch, weil die ein beachtlicher Teil der Maschinenbefehle des Prozessors mehrere Taktzyklen benötigen und somit parallel arbeitend häufig ähnlich lange benötigen.
Das erste NMOS DRAM verwendete noch keine Multiplex-Adressierung: https://bitsavers.computerhistory.org/magazines/Electronics/Electronics_V46_N09_19730426_Intel_1103.pdf Allerdings kommen RAM-Chips oft in grosser Zahl zum Einsatz und die Grösse der Gehäuse war folglich wichtig. Die grössere Aufwand bei der Ansteuerung tritt da in den Hintergrund. Da die Spaltenadresse erst verzögert benötigt wird, bremst der Multiplex den Zugriff auch nicht aus. Erst wird die Zeile ausgelesen, dann wird darin das Bit selektiert. Das passt also zusammen.
:
Bearbeitet durch User
Dieter D. schrieb: > Darum war mein Beispiel mit vier Adressteilen (oder mehr). Du starrst etwas zu engstirnig auf ein bestimmtes Prozessordesign und schließt daraus auf andere. Das Verhältnis aus Taktzyklen/Instruktionen kann sehr unterschiedlich ausfallen; bei so etwas wie 8080 bzw. Z80 ist es etwa vier mal so groß wie bei 68xx/65xx. Und bei neueren Architekturen kann das wieder ganz anders aussehen; RISC wurde nicht nur aus Jux&Dollerei erfunden. Letztlich hat das, was ein DRAM-Speichercontroller durchführt, auch überhaupt nichts mit dem zu tun, was eine CPU an ihrem Adressbus durchführt - der Speichercontroller arbeitet mit höherem Takt als die CPU, sonst würde er ja die Speicherzugriffe ausbremsen (was er bei den meisten Architekturen mit "wait states" könnte, die man aber in besseren Designs vermeidet).
Harald K. schrieb: > was eine CPU an ihrem Adressbus durchführt Sofern es überhaupt noch einen gibt. > der Speichercontroller arbeitet mit höherem Takt als die CPU Nur bei Oldies und Mikrocontrollern.
Harald K. schrieb: > Und genau da wird ein Zeitmultiplexverfahren angewandt, die eine Hälfte > der Adresse wird als Spaltenadresse (Column Address) und die andere > Hälfte der Adresse als Zeilenadresse (Row Address) bezeichnet - und die > beiden Steuerleitungen /RAS und /CAS haben genau deswegen diese Namen. Und noch schöner: einmal ROW Adress und nacheinander die CAS Adresse, geht noch schneller.
Dynamischer Speicher hat gemultiplexten Adressbus (Row/ colum/ address). da kann man von der Breite nicht auf den addresierbarren speicher schliessen, sondern muss das jeweilige Datenblatt durchackern. https://www.youtube.com/watch?v=-xtWsQvOcjo
Bradward B. schrieb: > Dynamischer Speicher hat gemultiplexten Adressbus (Row/ colum/ address). ist ja nicht falsch wurde aber wie eine statische 16KB RAM Karte beim ECB https://de.wikipedia.org/wiki/Europe_Card_Bus in MOS6502 Computer angeschlossen. Um das CAS/RAS kümmerte sich die Hardware auf der RAM Karte. Ich baute so eine ECB Erweiterung mit 5 Steckplätze in meinem PET2001. Ein Polaroid Bild müßte ich noch digitalisieren! PS. bei Bank switching ist erst Recht kein Zusammenhang zwischen Speicher und Bitbreite z.B. Ramdisk 256KB im apple2.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.