diff --git a/bin/init/main.c b/bin/init/main.c index 53ecccc..63bd3be 100644 --- a/bin/init/main.c +++ b/bin/init/main.c @@ -88,6 +88,7 @@ i = fork(); printf("FORKED: %i!\n", i); +while(1); if (0 == i) { printf("Starting Login Daemon.\n"); @@ -97,6 +98,7 @@ exit(0x0); } + while (pidStatus(i) != i) { /* fetchAgain: diff --git a/sys/vmm/copyvirtualspace.c b/sys/vmm/copyvirtualspace.c index 54f166c..d82c13a 100644 --- a/sys/vmm/copyvirtualspace.c +++ b/sys/vmm/copyvirtualspace.c @@ -27,6 +27,7 @@ */ #include +#include #include #include #include @@ -80,8 +81,10 @@ newPageDirectory[x] = parentPageDirectory[x]; /* Map The Kernel Stack Region */ - for (x = PD_INDEX(VMM_KERN_STACK_START); x <= PD_INDEX(VMM_KERN_STACK_END); x++) - newPageDirectory[x] = parentPageDirectory[x] | PAGE_COW; + for (x = PD_INDEX(VMM_KERN_STACK_START); x <= PD_INDEX(VMM_KERN_STACK_END); x++) { + if ((parentPageDirectory[x] & PAGE_PRESENT) == PAGE_PRESENT) + newPageDirectory[x] = parentPageDirectory[x] | PAGE_COW; + } /* * Now For The Fun Stuff For Page Tables 2-767 We Must Map These And Set @@ -119,9 +122,10 @@ kpanic("Error: newStackPage == NULL, File: %s, Line: %i\n", __FILE__, __LINE__); /* Set Pointer To Parents Stack Page */ - parentStackPage = (uint32_t *) ((PAGE_SIZE * PD_ENTRIES) * x) + (PAGE_SIZE * i); + parentStackPage = (uint32_t *) (((PAGE_SIZE * PD_ENTRIES) * x) + (PAGE_SIZE * i)); /* Copy The Stack Byte For Byte (I Should Find A Faster Way) */ + //kprintf("SP(%i[0x%X]:%i[0x%X]): 0x%X, 0x%X", x, (PAGE_SIZE * PD_ENTRIES) * x, i, i * PAGE_SIZE, newStackPage, parentStackPage); memcpy(newStackPage, parentStackPage, PAGE_SIZE); /* Insert New Stack Into Page Table */ @@ -180,7 +184,7 @@ /* Set Address Of Parents Page Table */ /* - parentPageTable = (uint32_t *) PT_BASE_ADDR; + parentPageTable = (uint32_t) PT_BASE_ADDR; */ /* Map The First 1MB Worth Of Pages */ diff --git a/sys/vmm/getfreepage.c b/sys/vmm/getfreepage.c index c002bfb..ce2f57a 100644 --- a/sys/vmm/getfreepage.c +++ b/sys/vmm/getfreepage.c @@ -50,7 +50,7 @@ spinLock(&vmmGFPlock); /* Lets Search For A Free Page */ - for (x = 768; x < 1024; x++) { + for (x = PD_INDEX(VMM_KERN_START); x <= PD_INDEX(VMM_KERN_END); x++) { /* Set Page Table Address */ pageTableSrc = (uInt32 *) (PT_BASE_ADDR + (0x1000 * x)); diff --git a/sys/vmm/paging.c b/sys/vmm/paging.c index 68a10f8..44ca450 100644 --- a/sys/vmm/paging.c +++ b/sys/vmm/paging.c @@ -574,15 +574,16 @@ kprintf("PDE*PS: 0x%X", (PD_ENTRIES * PAGE_SIZE)); for (x = (addr / (PD_ENTRIES * PAGE_SIZE)); x < PD_INDEX(VMM_USER_END); x++) { - + kprintf("X: 0x%X", x); if ((pageDir[x] & PAGE_PRESENT) == PAGE_PRESENT) { + kprintf("X: 0x%X", x); pageTableSrc = (uint32_t *) (PT_BASE_ADDR + (PAGE_SIZE * x)); kprintf("X: 0x%X", x); kprintf("pTS: 0x%X\n", pageTableSrc); for (y = 0; y < PAGE_SIZE; y++) { - kprintf("pTS[%i]: 0x%X", y, pageTableSrc[y]); + kprintf("pTS[%x:%i]: 0x%X", x, y, pageTableSrc[y]); if ((pageTableSrc[y] & PAGE_PRESENT) == PAGE_PRESENT) { if ((pageTableSrc[y] & PAGE_COW) == PAGE_COW) { @@ -603,6 +604,7 @@ } } } + kprintf("ENDY:%i", y); } }