Speicherverwaltung und Adressbus

Erste Frage Aufrufe: 525     Aktiv: 21.05.2023 um 15:57

0

Hallo Zusammen, ich habe eine Frage zu Speicherverwaltung und dem Adressbus. Eine virtuelle Adresse von 32 Bit und einer Seitengröße von 16 KB (2^14) enthält 14 Bit (0 - 14) für den Datenoffset und die Seitennummer Bits 15 -31, das bedeutet man hat maximal 2^17 Adressmöglichkeiten. Wenn es jetzt heißt, der Adressbus hat eine Breite von 32 Bit, bedeutet das, dass der Adressanteil 2^32 ist + Datenoffset von 2^14 = Virtuelle Adresse? Ich habe einige Einträge schon zu diesem Themagelesen, aber ich verstehe den Zusammenhang nicht, wird nur der Adressanteil über den Adressbus übertragen und die Seitengröße über Datenbus, oder verstehe ich die Sachlage komplett falsch? Ich hoffe, dass mir jemand von Euch helfen kann. Danke schon mal für eure Mühe:

Gruß Andreas

Diese Frage melden
gefragt

Punkte: 10

 
Kommentar schreiben
1 Antwort
0

Hallo Andreas, ich hoffe ich habe dein Problem richtig verstanden und versuche mal Licht ins Dunkel zu bringen. Zunächst die Korrektur eines kleinen Rechenfehlers. 14 Bit = Bits 0 – 13. Dann bleiben die Bits 14-31 = 18 Bit (nicht 17) übrig. Wenn du 16KB Pages hast, dann sind diese die reellen Adressen im/am DRAM Speicher. Die restlichen 18 Bit der Adresse sind virtuell und müssen über Tabellen der MMU (Memory Management Unit) verwaltet werden. Diese Tabellen sagen wo die virtuelle 16KB Page tatsächlich abgelegt ist. Stell dir vor du hast 4 Pages mit 16KB. Das wären reale 64KB RAM. Das reicht natürlich hinten und vorne nicht. Zwischen realem Speicher und CPU sitzt (in die CPU integriert) die MMU. Dein Programm braucht aber 256KB Speicher. Weiter angenommen: du füllst die 256KB in einer Schleife mit dem Wert 0. Dann schreibt der Prozessor an die Adresse 0 die geforderte 0. Jetzt teilt die MMU dem Prozessor eine der 4 Pages zu und merkt sich, dass hier die (virtuellen) Adressen 0 – 16KB (-1) gespeichert sind/werden. Scheibt der Prozessor dann die 0 auf Adresse 16384 (16KB) stellt die MMU fest, dass die erste Page voll ist. Sie nimmt dann die nächste Page und merkt sich dann, dass in der zweiten Page die (virtuellen) Adressen 16KB bis 32KB (-1) gespeichert sind/werden. Das geht so weiter, bis alle Pages (64KB) voll sind. Beim Schreiben auf die Adresse 64K Schreit dann die MMU ich habe keinen Speicher mehr. Das Programm wird unterbrochen und das Betriebssystem wird aktiv. Jetzt wird eine der Pages ausgelagert. Das heißt auf einen Festwertspeicher (HD, SD, SSD) kopiert. Ist das geschehen wird diese Page, mal angenommen Page 1 als frei gekennzeichnet und kann von deinem Programm wieder benutzt werden. Dann sind nicht mehr die Adressen 0 bis 16KB (-1) drin, sondern die Adressen 64KB bis 80KB (-1). Schreibt dein Programm jetzt auf Adresse 11111 schreit die MMU wieder nach dem Betriebssystem, weil ja die Adressen 0-16KB nicht mehr im Speicher sind. Das BS speichert jetzt wieder eine der 4 Pages, angenommen Page 3, im Festwertspeicher sucht dann die Page der Adressen 0-16KB und lädt sie in Page 3. Da die Adressen 0 – 16KB jetzt in Page 3 sind kann dein Programm die Adresse 11111 beschreiben. So läuft das die ganze Zeit. Die Entscheidung welche Page „ausgelagert“ wird, wird über Zugriffsstatistiken geregelt. Normalerweise versucht das BS die am häufigsten verwendeten Speicher im realen Speicher zu halten. Der Rest ist dann in der Auslagerungsdatei abgelegt. Die CPU und ihr Adressbus bekommt davon gar nichts mit. Ihr wird, einfach gesagt, vorgegaukelt, dass sie immer 2^32 Adressen besitzt. Wie gesagt: ich hoffe ich habe dein Problem richtig erkannt. Wenn nicht, schreib’s ruhig. Bräuchte dann aber eine nähere Beschreibung deines Problems. Gruß jobe

Diese Antwort melden
geantwortet

Sonstiger Berufsstatus, Punkte: 505

 

Hallo Jobe,

vielen Dank für deine ausführliche Rückmeldung! Das Pagingverfahren wurde mir durch Deine Ausführung viel klarer.
Mein Problem war, dass ich die Breite des Adressbusses nicht richtig zuordnen konnte. Soweit ich das verstehe läuft die Adressierung über den Adressbus, wenn dieser z.B. 32 Bit breit ist, heißt das, dass der Index sowie der Datenoffset darin enthalten sind. D.h. wenn die Seitengröße erhöht wird, hat man weniger Adressierungsmöglichkeiten, ich hoffe ich hab das richtig verstanden.

Danke & Gruß
Andreas

  ─   andy55 21.05.2023 um 15:57

Kommentar schreiben