Also ich hab in meinem Recodign meines OS das Paging wieder vor. Allerdings meldet mir Bochs nach dem schrieben in cr0 mit aktiviem PG-Bit das die phys adresse nicht vorhanden sei.
Allerdings ist alles linear gemappt mit 4MB Pages. Hier der C-Code vielleicht fällt ja jemandem was auf:
void init_Paging()
{
asm volatile("movl %cr4,%eax\norl $0x10,%eax\nmovl %eax,%cr4"); //4MB Pages erlauben
kernellinear=(Pagedir*)0x3000;
dw page=0;
while(page<1024)
{
kernellinear->Pageframe[page]=(page*0x400000)|PPRESENT|BIGPAGE|RW;
page++;
}
asm volatile("movl $0x3000,%eax\nmovl %eax,%cr3"); //Kernel PDE festlegen
asm volatile("movl %cr0,%eax\norl $0x80000000,%eax\nmovl %eax,%cr0"); //Paging aktivieren
}
EDIT: paar fehlende defis zum verständnis
#define BIGPAGE 0x80
#define RW 0x02
#define PPRESENT 0x01
typedef union Pagedir
{
Pagetab *Pagetable[1024]; //Für 4KB Pages pointer auf Tables
dd Pageframe[1024]; //Für 4MB Pages direkte Frames
}Pagedir;