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?
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?
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.