Forum: PC Hard- und Software Fragen zum Paging


von Hans W. (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

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?

von Uhu U. (uhu)


Lesenswert?

Page-Länge?

von (prx) A. K. (prx)


Lesenswert?

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?

von Hans W. (Gast)


Lesenswert?

Entspricht also die Pagelänge dem Page-Offset?

von (prx) A. K. (prx)


Lesenswert?

Uhu Uhuhu schrieb:

> Page-Länge?

Die steht in der Aufgabe.

von (prx) A. K. (prx)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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)

von (prx) A. K. (prx)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

Na also, es geht doch!

von Hans W. (Gast)


Lesenswert?

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!

von (prx) A. K. (prx)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

JA!

von Uhu U. (uhu)


Lesenswert?

A. K. schrieb:
> Die steht in der Aufgabe.

Ich weiß ;-)

von (prx) A. K. (prx)


Lesenswert?

Ach ja, nur fast. Ich bezweifle, dass 11123456 = 0x00E9AC8B korrekt ist.

von Hans W. (Gast)


Lesenswert?

Da hast du Recht. 11123456 = A9BB00. Tut aber der Sache jetzt keinen 
Abbruch oder?

von Hans W. (Gast)


Lesenswert?

Wie geht's da jetzt weiter? Jetzt weiß ich Pageoffset und Pagenumber...

von Keper (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

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!

von Keper (Gast)


Lesenswert?

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.

von Hans W. (Gast)


Lesenswert?

@Keper: Willst du mich verarschen?

von (prx) A. K. (prx)


Lesenswert?

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.

von Keper (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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. ;-)

von Keper (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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. ;-)

von Keper (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
Noch kein Account? Hier anmelden.