diff --git a/src/sys/kernel/fork.c b/src/sys/kernel/fork.c index 6995d52..bb6aa5f 100755 --- a/src/sys/kernel/fork.c +++ b/src/sys/kernel/fork.c @@ -29,10 +29,28 @@ /* Main Fork Function */ pid_t fork() { - int i=0; + int i=0,x=0; uChar *src,*dst; + uLong *pageDir,*pageTable; pid_t cPid = findTask(); //Find An Empty Task schedule(); + pageDir = (uLong *)_current->tss.cr3; + disableIrq(0); + for (i=0;i<1024;i++) { + if (pageDir[i] > 0) { + pageTable = (uLong *)(pageDir[i] & 0xFFFFF000); + kprintf("[%i][%i][%i]",i,pageTable,&pageTable); + for (x=0;x<1024;x++) { + kprintf("(%i)",pageTable[x]); + if ((pageTable[x] > 0) && ((pageTable[x] & 0xFFFFF000) != 0xA000)) { + pageTable[x] = (pageTable[x] & 0xFFFFFFFD); + //kprintf("[%i]\n",pageTable[x]); + } + } + } + } + //enableIrq(0); + while(1); kprintf("Pid: [%i]\n",cPid); src = _current; dst = &taskList[cPid]; diff --git a/src/sys/kernel/idlethread.c b/src/sys/kernel/idlethread.c index dc7b39f..a6ea9b3 100755 --- a/src/sys/kernel/idlethread.c +++ b/src/sys/kernel/idlethread.c @@ -29,7 +29,6 @@ void idleThread() { /* This thread is for maintinance */ kprintf("[%i]\n",(pageDirectory[0] & 0xFFFFF000)); - while(1); if (!fork()) { while (1) { kprintf("A"); diff --git a/src/sys/vmm/paging.c b/src/sys/vmm/paging.c index f149914..9c4d2ce 100755 --- a/src/sys/vmm/paging.c +++ b/src/sys/vmm/paging.c @@ -56,7 +56,7 @@ "movl %0,%%eax \n" "movl %%eax,%%cr3 \n" "movl %%cr0,%%eax \n" - "orl $0x80000000,%%eax \n" + "orl $0x80010000,%%eax \n" "movl %%eax,%%cr0 \n" : : "d" ((uLong *)(pageDirectory)) ); @@ -132,12 +132,13 @@ pageTable[page] = allocPage() | pageDefault; } else { + pageTable = (uLong *)(pageDir[pi]-39); if (pageTable[page] > 0) { kprintf("Woot"); + //pageTable[page] = (pageTable[page] & 0xFFFFF000) | pageDefault; while (1); } else { - pageTable = (uLong *)(pageDir[pi]-39); pageTable[page] = allocPage() | pageDefault; } }