Autor Thema: Paging Problem  (Gelesen 5252 mal)

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« am: 08. October 2004, 12:17 »
So wollen wir mal das Paging ansprechen...
Vielleicht könnt ihr mir ja helfen irgendwie.
Problem: Sobald ich des Paging-bit im Cr0 setzte Tripple Faultet sich die CPU und ich weiss nit warum. Also mein Ablauf->
Über den Physischen Speicherverwalter wird für das Pagedirectory eine Page reserviert, der 0. Eintrag wird auf eine Pagetable gepointet die wieder mit  Ph.Mem Verwalter  reserviert wird. Der Rest an Einträgen wird auf 0 gesetzt.
Dann Mappe ich die ersten 4MB auf sich selbst so das virtuelle addi=physische. Dann die Adresse des Pagedir nach cr3 und das PG im cr0 und da kommt der Tripple fault.
Wenn ich mit Bochs bis dahin vordringe gibt der die Meldung das die Physische Addresse nicht verfügbar sei...
Falls einer sieht weas ich vergessen oder falschgemacht hab dann helft mir plz^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #1 am: 09. October 2004, 12:22 »
Najut:
Also hierder Konstruktor von mein C++ Paging class:
CPaging::CPaging()
{
    Pagedirectory=(Pagedir *)PMemManager.getfreepage();
    Pagedirectory->Pagetable[0]=(Pagetab *)((dd)PMemManager.getfreepage()+3);
    dw count=1;
    while(count<1024)
    {
        Pagedirectory->Pagetable[count]=0;
        ++count;
    }
    dd init=0;
    while((dd)init<1024)
    {
        mapmem((void*)(init*0x1000),(void*)(init*0x1000),NDIRTY,NACCESSED,NUS,RW,PRESENT);
        ++init;
    }    
    enablepaging(Pagedirectory);
}

Die Funktion getfreepage liefert die Adresse einer freien Physikalischen Seite zurück, daran kanns nicht liegen, funktioniert korrekt.
mapmem soll wie der Name sagt die Speicherseiten mappen, funktioniert eigentlich auch.
enablepaging schreibt die übergebene adresse ins cr3 und macht ein or 0x80000000 aufs cr0.
Ich sehs einfach nicht, wahrscheinlich schon Betriebsblind...
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #2 am: 09. October 2004, 14:16 »
Problem gefunden und gelöst, nachdem ich für die Adressen der pagetables ja Presentbit und RW bit gesetz hatte, hatte ich das so weiter verwendet, also zeigt alles 3 Byte zu weit->völlig falsches mapping.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen