Autor Thema: Paging  (Gelesen 24035 mal)

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« am: 02. May 2005, 10:27 »
Juden dasch! (sprich: Guten Tag -> nix mit juden... ;)

ehm, ich wollte eigendlich mal paging coden damit ich ein anständiges gui machen kann (wegen malloc und free...etc) aber irgendwie blicke ich da nicht so ganz durch...

wenn ich nun platz für eine structur brauche -> myObj = malloc(...)... Das objekt/structur ist aber nur einige bytes gross. muss ich da ne ganze page freigeben?

oder wie oder was?

und wie mappe ich einen bereich linear?
und von wo bis wo mappt ihr...? gewisse speicherbereiche sind ja besetzt im ram.. oder?

thx4help

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 02. May 2005, 13:13 »
Jo, mindestens 1 Page. Sagt, mal, kann net einer mal ein Tut fürs Maga über Paging schreiben ;) Das fehlt irgendwie noch, dann hamma so die wichtigen Elemente wie MT und PAGING...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 02. May 2005, 15:52 »
Hej,

besser als hier kann man es garnicht erklären.

Habe auch mal versucht ein Tutorial darüber zu schreiben, aber ist mir net so gelungen, daher kann ich das o.g. Tut nur empfehlen...

Stehe bei Fragen aber gerne zur Verfügung :)

MfG GhostCoder
A man, a legend!

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #3 am: 02. May 2005, 16:50 »
ich habe das tut/theorie zum zweiten mal gelesen und kapiere nun die adressbildung von der virtuellen/logischen adresse zur physischen...

aber wie mappe ich zum beispiel den bereich 0x7C00 - 0x7E00 linear??

thx4help

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #4 am: 02. May 2005, 17:04 »
die Theorie denk ich is net das schwere, die Praxis eher...

Du kannst nur in 4k-Blöcken mappen, also 0x7000 nach 0x5000 oder so, aber nicht kleinere bereiche... das ganze machste, indem du in den pagetables und dem -dir die werte richtig stellst, wie sie sein sollen, inkl. den bits...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #5 am: 02. May 2005, 17:17 »
ja dass ist schon klar...

aber wie mappe ich dann halt den beriech 0x7000 nach 0x8000? wo schreibe ich nund die 0x7000 rein?

das ist mir vollkommen unklar.. :(

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #6 am: 02. May 2005, 18:25 »
Also. Du hast ja Pagetables und ein Pagedir. In dem Pagedir gibste die Pagetables an. In der 1. Pagetable brauchste nun den 7. eintrag weil, denn die eintragnummer = adresse / 0x1000. ein eintrag ist ja 4 bytes lang, sprich du musst bei dem 7*4 = 28. Byte das hinschreiben. Und da musste eben 0x8000 hinschreiben (die physische adresse) und die bits setzen.
dann landet alles, was du an 0x7000 schreibst an phys. 0x8000...

J!N
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #7 am: 02. May 2005, 20:29 »
Falls die Frage mit der 4kb Seite für eine Struktur im Raum steht -
du wirst natürlich in eine 4kb Speicherseite mehr als eine Struktur packen (wenn die Struktur nicht zu gross ist ;) ).

Deswegen gibt es generell immer zwei Instanzen zur Speicherverwaltung.
Der Kernel gibt 4kb Seiten an die Anwendungen raus, und in der Anwendung (in der eigentlich malloc implementation) werden diese 4kb Seiten noch mal unterteilt!
*post*

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #8 am: 03. May 2005, 09:00 »
vielen dank für die antworten!
nun ist mir einiges klar geworden.

aber könnte ich nun im ganzen pagedir die einträge auf die pagetables setzten dann aber bei den pagetables den eintrag auf auf "ungesetz machn"... dann hätte ich nichts mehr mit dem pagedir zu tun...

:D

sonst ist mir die logarythmik (<- deutsch auch) nicht so klar...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #9 am: 03. May 2005, 11:39 »
das FH-Zwickau Tut ist zawr ganz gut, aber da fehlt noch wichtiges^^ Z.B. die 4MB Pages (die es erst ab dem Pentium gibt)
Und auch das ganze mit dem U/S-Bit geht irgendwie total unter. Manchmal liegts an diesem Bit das nix geht weil man seinem Kernel die Ausführung verweigert dadurch^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #10 am: 03. May 2005, 12:04 »
könnte mir jemand einen pseudo-code geben? ich raffe die logarythmik nicht... :(

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #11 am: 03. May 2005, 12:15 »
Das ganze hat mit Logarythmen nix zu tun^^ eher Algorithmen *g*
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #12 am: 03. May 2005, 12:18 »
auch gut ;)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #13 am: 03. May 2005, 17:23 »
@Legend: Oder du machst es (wie ich) nach dem "hol dir was du brauchst" Prinzip ohne malloc, sondern, dass die Exceptions den Speicher verteilen...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #14 am: 04. May 2005, 16:49 »
Stimmt, das funktioniert natürlich, aber damit wirst halt jeglichen Fehler in der Speicherhandhabung eines Programmes gleich mit legalisieren! ;)
Aber die Diskussion hatten wir schonmal ...
*post*

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #15 am: 05. May 2005, 00:51 »
@Legend: jo, die hatten wir schonmal
@ZacK: läufts jetzt? welche methode nimmst du?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

hackgod

  • Beiträge: 70
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 08. May 2005, 13:32 »
bei mir geht das Tutorial nich auf. "You have no Permission to access..."
Wo gibt es das noch? Oder kann jemand das als PDF zur Verfügung stellen?

mfg

hackgod

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #17 am: 09. May 2005, 16:30 »
nun um erlich zu sein habe ich kein plan was für methoden das sind...

bin noch nicht weiter gekommen da ich in letzter zeit fasst keine (richtige) freizeit hatte... :(

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #18 am: 26. May 2005, 16:27 »
so, mal wieder zeit.

ich bin nun bei der umsetzung von paging.
könnte mir jemand meine berechnungen bestätigen.

angenommen ich habe ne funktion setPage(physische Adresse, Virtuelle Adresse,  Berechtigungen). Dann würde ich dass so ausrechnen.

physAdr / 4mb = PagingDirectory-Eintrag.
physAdr / 4kb = PagingTable-Eintrag.

stimmt das so?
kann ich die Adressen der PagingTables in das PagingDirectroy schon zu beginn eintragen?

thx for help... ^^
me = verwirrt...

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 26. May 2005, 17:05 »
physAdr / 4 MB für die table würde stimmen, physAdr / 4 KB für die page stimmt nur für die erste Pagetable.
Du kannst das ganz folgendermassen berechnen:
table = physical >> 22;
page = ( ( physical & 0xFFFFF000 ) << 10 ) >> 22;

 

Einloggen