Hi Leute! Ich hab hier eine Aufgabe zum "Paging" von Betriebssystemen. Ein Computer stellt dem Benutzer einen virtuellen Speicher von 2^32 Byte zur Verfügung. Der PC hat 2^18 Byte physischen Speicher. Der virtuelle Speicher ist durch "Paging" implementiert und die Pagesize entspricht 4096 Byte. Ein Benutzerprozess generiert nun die virtuelle Adresse 11123456. Zeigen sie nun auf, wie der PC die entsprechende physische Adresse ermittelt. Ich hab hier nun erstmal so angefangen: Die Pagesize ist ja 4096 byte groß und das entspricht 2^12 Byte. Was ich auch noch weiß ist, dass die Pagesize im physischen wie im virtuellen Speicher die gleiche Größe, also 4096 Byte, entspricht. Was ich auch noch verstanden habe, ist, dass das Betriebssystem die virtuelle Adresse vom virtuellen Speicher mit 2^32 Byte eben auf den physischen Speicher mit 2^18 Byte umlegen muss. Dazu ist es vielleicht Sinnvoll wenn man die virtuelle Adresse von Dezimal erstmal auf Hex umrechnet: 11123456 = E9AC8B. Weiter weiß ich ehrlich gesagt nicht mehr. Ich weiß auch irgendwie gar nicht was ich bei dieser Aufgabe da jetzt noch alles berechnen soll! Kann mir jemand helfen?
Ester Hinweis: Frag dich mal, welche Teile der virtuelle Adresse A0..A31 hier welche Bedeutung haben. Berechnen sollst du garnichts, sondern beschreiben, wie aus der virtuellen Adresse entweder eine physikalische Adresse oder ein page fault wird.
Zitat: "Hinweis: Frag dich mal, welche Teile der virtuelle Adresse A0..A31 hier welche Bedeutung haben." 11123456 = 0xE9AC8B = 101010011011101100000000 Gut. Wie man sehen kann ist die virtuelle Adresse genau 24 Bit lang. Der virtuelle Speicher hat aber 32 Bit. Das heißt bei meiner virtuellen Adresse fehlen doch auch erstmal 8 Bit, oder? Wenn ich nun die virtuelle Adresse von 24 Bit erstmal auf die 32 Bit "erweitern" möchte, sieht die ja dann so aus: 00000000101010011011101100000000. Stimmt das soweit? (Ich nehme mal an, dass das höchstwertigste Bit ganz links steht.) Die virtuelle Adresse wird meines Wissens nach in die Pagenumber und in den Offset unterteilt. Woher weiß ich aber nun zwischen welchen zwei Bits die Grenze von Pagenumber und Offset liegt?
Hans Wurst schrieb: > ja dann so aus: 00000000101010011011101100000000. Stimmt das soweit? Ja. > Die virtuelle Adresse wird meines Wissens nach in die Pagenumber und in > den Offset unterteilt. Richtig. > Woher weiß ich aber nun zwischen welchen zwei > Bits die Grenze von Pagenumber und Offset liegt? Was würdest du denn vermuten, bzw. was käme dir logisch vor?
Hans Wurst schrieb: > Entspricht also die Pagelänge dem Page-Offset? Nein. Ich nehme an, Uhu hat die Angabe der Pagesize übersehen und danach mit einer anderen ziemlich denglischen Bezeichnung gefragt.
Jetzt im nachhinein ist's eigentlich klar, denn die Pagelänge ist mit 2^12 BYTE (!) angegeben die virtuelle Adresse ist aber mit 24 BIT (!) angegeben; das kann nicht passen... Zitat: "Was würdest du denn vermuten, bzw. was käme dir logisch vor?" Ich denke mal, dass es irgendwas mit dem viruellen Speicher zu tun haben muss, oder? Aber 100%ig genau weiß ich es nicht...
Hans Wurst schrieb: > Jetzt im nachhinein ist's eigentlich klar, denn die Pagelänge ist mit > 2^12 BYTE (!) angegeben die virtuelle Adresse ist aber mit 24 BIT (!) > angegeben; das kann nicht passen... Nix ist dir klar. Die Frage ändert sich auch dadurch nicht, dass sie mit der Angabe der virtuellen Adresse 0000000000000000000000000011123456 gestellt wird. Führende Nullen werden zumindest bei dezimaler Schreibweise meistens weggelassen, ausser es ist das Who-is-Who eines Grosskonzerns.
Nun gut, dann ist es mir eben nicht klar. Wie kann es mir klarer werden? Ich weiß es nicht... Die Frage ist ja immer noch wie ich nun zu der Grenze von Pagenumber zu Pageoffset komme...
Mal etwas grundsätzlicher: Normalerweise kommen vor solchen Fragen irgendwelche Unterrichts/Vorlesungsstunden. Muss ich annehmen, das du eine längere Krankheit hinter dir hast und ohne jede Vorstellung von garnix nun im kalten Wasser schwimmst? (lies: komplett geschwänzt ;-) Denn es sieht mir so aus, als ob du kaum eine Vorstellung davon hast, was eine Speicheradresse überhaupt ist. Und ob man bei Büchern immer erst den ersten Buchstaben der ersten Seite, dann den ersten Buchstaben der zweiten Seite usw liest, bevor man mit dem zweiten Buchstaben der ersten Seite weiter macht. Oder war das doch anders? (Hinweis: Seite=page)
Hans Wurst schrieb: > Wie kann es mir klarer werden? Ich weiß es nicht... Die Frage ist ja > immer noch wie ich nun zu der Grenze von Pagenumber zu Pageoffset > komme... Wie grad beim Buch skizziert. Nur eben richtig. Wenn wir mal annehmen, dass die Buchstaben im Buch fortlaufend durchnummeriert sind, und jede Seite 4096 davon hat.
Wenn ich dich beruhigen darf (sofern du es mir überhaupt glaubst) ich hab dieses Semester keine einzige Vorlesungsstunde ausfallen lassen / lassen müssen. Naja, lassen wir das. Die Pagesize entspricht ja 2^12 Byte. Kann es nun also sein, dass nach 12 Bit die Grenze ist?
1 | 101010011011|101100000000 |
Die Pipe soll die Grenze mal markieren. Nehmen wir mal an die Pagesize wäre nur 2^10 Byte groß. Wie sieht dann die Grenze aus? Muss man da vom MSB oder vom LSB an dann abzählen? Im Beispiel hier ist das ja nicht so toll zu erkennen, da es ja die Hälfte ist. Da isses ja quasi egal von welcher Seite man anfängt!
Hans Wurst schrieb: > Wie sieht dann die Grenze aus? Muss man da vom > MSB oder vom LSB an dann abzählen? Zur Beantwortung dieser Frage hatte ich vorsorglich das Gleichnis mit dem Buch gebracht... Beitrag "Re: Fragen zum Paging" > Im Beispiel hier ist das ja nicht so > toll zu erkennen, da es ja die Hälfte ist. Es schadet grad bei Hex/Binärdarstellung nicht, wenn man die führenden Nullen hinschreibt. Insbesondere wenn man sich andernfalls selbst verwirrt.
virtueller Adresse: 2^m = 2^24 Pagesize: 2^n = 2^12 Grenze von Pageoffset zu Pagenumber = n (quasi von rechts nach links gezählt) Pagenumber : m - n (ebenfalls von rechts nach links gezählt nur beginnt das erste Bit nach dem letzten des Pageoffsets) Soweit verständlich wie ich das gemeint habe?
Hans Wurst schrieb: > virtueller Speicher: 2^m = 2^24 In der Frage steht 2^32. Du klebst immer noch wie eine Klette an den impliziten führenden Nullen fest und kommst nicht davon los. Die virtuelle Adresse hat 32 Bits mit 8 führenden Nullen.
Hans Wurst schrieb: > Soweit verständlich wie ich das gemeint habe? Yep - nur nicht, weshalb du angesichts dieser korrekten Erkenntnis in Beitrag "Re: Fragen zum Paging" nach von links vs. rechts fragst.
Hm, shit. 00E9AC8B = 00000000111010011010110010001011 Jetzt hab ich 32 Bit für die virtuelle bzw. logische Adresse. Pagesize = 4096 = 2^12 Byte, also muss ich von rechts nach links die ersten 12 Bit abzählen und dort die Grenze setzen, nicht wahr? Sieht dann so aus: 00000000111010011010|110010001011 Rechts von der Pipe Pageoffset links von der Pipe Pagenumber. Richtig?
Da hast du Recht. 11123456 = A9BB00. Tut aber der Sache jetzt keinen Abbruch oder?
Stell die einfach ein weiteres Ram vor, welches zwischen CPU und RAM und den oberen Adressleitungen sitzt. Die Adressleitungen des zusätzlichen RAMs sind an die CPU angeschlossen und die Datenleitungen des zusätzlichen RAMs gehen Richtung Adressleitungen. Fertig ist die MMU :-))) Bild gibt es hier: http://www-scm.tees.ac.uk/users/u0000408/MMU/MMUbig.jpg
Der Rest lässt sich nur wirklich exakt beantworten, wenn man in der Veranstaltung war, aus der sich diese Aufgabe ergibt. Denn ich weiss zwar, wie ein PC-Prozessor das macht, bin aber nicht sicher, ob diese Detailfreude hier wirklich gemeint ist.
Der physische Speicher ist 2^18 Byte groß. Also hat die Binärzahl der physischen Adresse maximal 18 Stellen, oder? EDIT: Das ist eine Grundlagenvorlesung zu Betriebssysteme! 100%ige Details werden da nicht erwartet, denke ich!
Hans Wurst schrieb: > Der physische Speicher ist 2^18 Byte groß. Also hat die Binärzahl der > physischen Adresse maximal 18 Stellen, oder? Nein, es sind genau 18,438476 Stellen.
Hans Wurst schrieb: > Der physische Speicher ist 2^18 Byte groß. Also hat die Binärzahl der > physischen Adresse maximal 18 Stellen, oder? Du und deine führenden Nullen... nicht "maximal" sondern "exakt". In diesem Beispiel hat auch die virtuelle Adresse 0 volle 32 Stellen/Bits und die physikalische Adresse 0 volle 18 Stellen/Bits. > EDIT: Das ist eine Grundlagenvorlesung zu Betriebssysteme! 100%ige > Details werden da nicht erwartet, denke ich! Siehe Kepers erste Antwort. Ob das reicht, oder ob die "MMU" Box noch etwas genauer beleuchtet werden muss, das weiss nur die Vorlesung.
A. K. schrieb: > Siehe Kepers Antwort. Ob das reicht, oder ob die "MMU" Box noch etwas > genauer beleuchtet werden muss, das weiss nur die Vorlesung. Da die MMU im wesentlichen ein Stück RAM ist gibt es dort eigentlich nicht besonders viel weiter zu beleuchten. @Hans Wurst: Ich wünsche dir viel Spaß in der Vorlesung über Subnetzmasken.
Keper schrieb: > Da die MMU im wesentlichen ein Stück RAM ist gibt es dort eigentlich > nicht besonders viel weiter zu beleuchten. Bis auf die Tatsache, dass dieses RAM umso komplizierter wird, ja heller man es beleuchtet und je nach Betrachtungsweise nicht wirklich ein eigenes RAM ist, oder ein recht assoziativ adressiertes. Andernfalls wäre in der MMU mehr RAM drin als im Hauptspeicher. > @Hans Wurst: Ich wünsche dir viel Spaß in der Vorlesung über > Subnetzmasken. Ich glaub er wird besser Theoretiker oder verlegt sich auf Computerlinguistik oder Homunkulusbau, wenns das heute noch gibt. ;-)
A. K. schrieb: > Bis auf die Tatsache, dass dieses RAM umso komplizierter wird, ja heller > man es beleuchtet und je nach Betrachtungsweise nicht wirklich ein > eigenes RAM ist, oder ein recht assoziativ adressiertes. Andernfalls > wäre in der MMU mehr RAM drin als im Hauptspeicher. Das sind dann konkrete Implementierungen. Und in konkret implementierten 64-Bit CPUs wird keine voller virtuellen 64-Bit Adressraum implementiert, z.b. die AMD Teile implementieren "nur" 48-Bit. Hier noch anderes Bild: http://www.divms.uiowa.edu/~jones/assem/fall10/notes/14f/pdp11mmu.gif Mann bin ich froh das ich mit 6502, 68K und 8088 angefangen habe.
Keper schrieb: > Das sind dann konkrete Implementierungen. Und in konkret implementierten > 64-Bit CPUs wird keine voller virtuellen 64-Bit Adressraum > implementiert, z.b. die AMD Teile implementieren "nur" 48-Bit. So weit musst du nicht gehen. Hier wären es linear adressiert auch schon mindestens (2^20)*7 Bits, also knapp 4x Hauptspeicher. ;-)
A. K. schrieb: > So weit musst du nicht gehen. Hier wären es linear adressiert auch schon > mindestens (2^20)*7 Bits, also knapp 4x Hauptspeicher. ;-) (2^20)*7 Bits sind 7 Mbit also ungefähr ein 1 Megabyte.
Keper schrieb: > (2^20)*7 Bits sind 7 Mbit also ungefähr ein 1 Megabyte. Yep, und sein Hauptspeicher hat 2^18 Bytes, also 256KB. Offenbar ist die Aufgabe schon etwas älter ;-). Andererseits hatten PCs mit 256KB kein Paging.
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.