seitentabell index

lisa
Erstie
Erstie
Beiträge: 19
Registriert: 25. Nov 2008 19:46

seitentabell index

Beitrag von lisa »

hallo,
ich habe ein problem mit iener älteren aufgabe, die ich gefunden habe, bzw. mit deren lösung.
aufgabe: 4GB virtueller adressraum, 8KB seitengröße, wie lautet der index zur seite 0xfb56b67c
in der seitentabelle?
aw: 0xfb56a

zum einen verstehe ich nicht ganz was mit 'index zur seite' genau gemeint ist, das ist doch eine byteadresse oder nicht?

und zum anderen hätte ich gedacht, 8KB seitengröße bedeutet 13 bit offset, dann bleiben 19 bit für die seitennummer die ersten 19 bit sind meiner ansicht nach 1111 1011 0101 0110 101
das gibt dann 7dab5 muss man die offset bit nullen anstatt sie abzuschneiden?

gruß,
lisa

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: seitentabell index

Beitrag von Steven »

Wenn ich das richtig verstanden habe, darfst du die Bits nicht einfach verschieben. Wenn dein erstes Bit eine 1 ist, darfst du nicht einfach vorne mit Nullen auffüllen, denn dann würde sich dein Wert ja verändern. Also lauten die ersten 4 Binärziffern 1111 und nicht 0111, wodurch sich das F aus der Musterlösung und deine 7 erklärt. Wenn der Schnitt zwischen Seitennummer und Offset nicht zwischen Viererblöcken erfolgt, sind die restlichen Bits Null. Damit erhälst du binär 1111 1011 0101 0110 1010 als Seite = 0xFB56A.
Oder überlege es dir so: Die Adresse erhälst du, indem du die Seitennummer in die oberen Bits eines Registers schreibst und dann den Offset dazu addierst. Das funktioniert nur, wenn alle Bits noch an der richtigen Stelle stehen.

benrub
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 3. Dez 2006 01:26

Re: seitentabell index

Beitrag von benrub »

Steven hat geschrieben: Oder überlege es dir so: Die Adresse erhälst du, indem du die Seitennummer in die oberen Bits eines Registers schreibst und dann den Offset dazu addierst. Das funktioniert nur, wenn alle Bits noch an der richtigen Stelle stehen.
Dann müsste ich aber die letzte Null, die ja immer da steht, immer überschreiben.
Ich addiere den Offset ja nicht, sondern hänge ihn einfach rechts an die Zahl dran, wenn ich das richtig sehe.

Wir wollen doch keine 20 Bits verwenden um eine 19-Bit-Zahl zu speichern, zumal die Seitentabelle dann nur an jeder zweiten Stelle (nämlich da wo eine Null am Ende ist) besetzt wäre?
Links kann ich ja so viele Nullen dranpacken wie ich will, das ist ja im Dezimalen nicht anders...

thomas_kalbe
Nerd
Nerd
Beiträge: 570
Registriert: 10. Jun 2006 14:58

Re: seitentabell index

Beitrag von thomas_kalbe »

Ohne jetzt noch mehr zur Verwirrung beitragen zu wollen, aber es kommt hier auch auf den Standpunkt an bzw.
was man unter "index zur Seite" versteht.
Wenn ich 1000 Seiten habe, dann kann ich die durchnumerieren von 0 bis 999 (und würde nicht 0 bis 9990 in Zehnerschritten wählen).
Insofern ist es die 0x7dab5.te Seite.
Andererseits, wenn ich die Adressteile in Register aufteilen würde, hätte ich
0xfb56a000 als virtuelle Basisadresse und 0x0000167c als offset in der Seite.
Dann wäre es aber evtl. geschickter gewesen, nach der virtuellen Basisadresse oder wie auch immer man
das formulieren will (bin halt auch grad zu busy um nochmal in die Folien zu schauen ... ) zu fragen und nicht nach einem Index zur Seite.
Die Aufgabe war aber auch nicht von uns?

- t

lisa
Erstie
Erstie
Beiträge: 19
Registriert: 25. Nov 2008 19:46

Re: seitentabell index

Beitrag von lisa »

vielen dank, wusste nicht, dass ich da noch 'wahlmöglichkeiten' habe.
woher weiß ich denn, ob ich die seitennummern in registern speichere und da noch platz fürs offset brauche, oder nicht?
und die aufgabe ist nicht von euch.

Antworten

Zurück zu „Archiv“