diff --git a/src/sys/kernel/fork.c b/src/sys/kernel/fork.c index cfc701e..d280730 100755 --- a/src/sys/kernel/fork.c +++ b/src/sys/kernel/fork.c @@ -44,7 +44,7 @@ int *ret = 0x0; //Set Up Pointer to Return Value asm("":"=b" (ret)); - //Set Up New Tasks Information + //Set Up New Tasks Information newProcess->tss.back_link = 0x0; newProcess->tss.esp0 = _current->tss.esp0; newProcess->tss.ss0 = 0x10; @@ -74,7 +74,7 @@ : "g" (newProcess->tss.esp), "g" (newProcess->tss.ebp) ); newProcess->tss.cr3 = (long)copyVirtualSpace(newProcess->id); - newProcess->status = 0x1; + newProcess->status = READY; childStart: if (ret == 0) { asm("":"=b" (ret)); diff --git a/src/sys/kernel/idt.c b/src/sys/kernel/idt.c index fd61309..c1ffa29 100755 --- a/src/sys/kernel/idt.c +++ b/src/sys/kernel/idt.c @@ -196,7 +196,7 @@ " incl 8(%ecx) \n" "next: \n" " movl 4(%ecx),%eax \n" - " movl $50,%ebx \n" + " movl $5,%ebx \n" " xor %edx,%edx \n" " div %ebx \n" " test %edx,%edx \n" diff --git a/src/sys/kernel/kmalloc.c b/src/sys/kernel/kmalloc.c index 9ec846d..be880f8 100755 --- a/src/sys/kernel/kmalloc.c +++ b/src/sys/kernel/kmalloc.c @@ -95,16 +95,19 @@ for(tmpDesc=kernDesc;tmpDesc;tmpDesc=tmpDesc->next) { if (tmpDesc->counter == 0) { if (tmpDesc->limit >= len) { + //kprintf("Had Page [%i][%i]\n",tmpDesc->limit,len); if (tmpDesc->limit > len+4) { newDesc = findFreeDesc(); newDesc->page = tmpDesc->page; newDesc->base = tmpDesc->base + len + 1; newDesc->limit = tmpDesc->limit - len; + tmpDesc->limit = len; } tmpDesc->counter = 1; return(tmpDesc->base); } else if (tmpDesc->page == 0x0) { + //kprintf("Alloced\n"); tmpDesc->page = (void *)getFreePage(_current->id); //kprintf("Malloc: [0x%X]\n",getPhysicalAddr(tmpDesc->page)); tmpDesc->base = tmpDesc->page; diff --git a/src/sys/kernel/schedule.c b/src/sys/kernel/schedule.c index d72fe3f..48ddee4 100755 --- a/src/sys/kernel/schedule.c +++ b/src/sys/kernel/schedule.c @@ -112,23 +112,16 @@ newTask->gid = -1; numTasks++; - waitQueueInsert(&taskQueue, newTask, newTask->id); spinlockUnlock(&schedSpinlock, CURRENT_CPU); - - //kprintf("<status); return newTask; } kTask_t * getTask(int taskId) { kTask_t * temp; - - //kprintf(">>getTask\n"); spinlockLock(&schedSpinlock, CURRENT_CPU); temp = waitQueueFind(&taskQueue, taskId); spinlockUnlock(&schedSpinlock, CURRENT_CPU); - //kprintf("<>schedule\n"); + if (paniced == 1) while (1) asm("nop;nop;nop;nop;nop"); @@ -145,22 +137,15 @@ return; spinlockLock(&schedSpinlock, CURRENT_CPU); chooseTask = currentProc + 1; -/* if (chooseTask >= numTasks) { - chooseTask = 0; - } */ - kprintf("chooseTask: [%i][0x%X]\n",chooseTask,getTask(chooseTask)); + while ((getTask(chooseTask)->status != READY) && (getTask(chooseTask)->status != RUNNING) && (loopCount < 4)) { - //kprintf("Status: [%i][%i][%i]\n",getTask(chooseTask)->status,READY,RUNNING); chooseTask++; chooseTask %= numTasks; if (chooseTask == 0) - loopCount++; - //kprintf("Trying: %d\n", chooseTask); - //kprintf("numtasks: %d\n", numTasks); + loopCount++; } if (loopCount == 4) chooseTask = -1; - //kprintf("Found one %d\n", chooseTask); if (chooseTask != -1) { if (getTask(chooseTask)->status == RUNNING) { getTask(chooseTask)->status = READY; @@ -174,11 +159,7 @@ GDT[4].descriptor.baseLow = (memAddr & 0xFFFF); GDT[4].descriptor.baseMed = ((memAddr >> 16) & 0xFF); GDT[4].descriptor.baseHigh = (memAddr >> 24); - //kprintf("Spinlock try\n"); spinlockUnlock(&schedSpinlock, CURRENT_CPU); - //kprintf("Spinlock complete\n"); - //kprintf("<id,numTasks,currentProc); asm("ljmp $0x20,$0\n"); } spinlockUnlock(&schedSpinlock, CURRENT_CPU); @@ -261,8 +242,6 @@ } temp->data = data; temp->id = id; - kprintf("Insert Addr: [0x%X][0x%X]\n",data,temp); - kprintf("Insert ID: [%i][%i]\n",temp->id,getTask(temp->id)->id); return; } @@ -309,22 +288,12 @@ if (queue->first == NULL) return NULL; temp = queue->first; - kprintf (">>while\n"); - while ((temp->id != id) && (temp != NULL)) { - if (id >1) { - kprintf("Id: [0x%X][%i][0x%X]\n",temp,temp->id,temp->data); - } - //while (temp->id != id) { - //kprintf("id = %d\n", id); - //kprintf("temp->id: %d\n", temp->id); - //kprintf("temp->next: %08x\n", temp->next); + while ((temp->id != id) && (temp->next != NULL)) { temp = temp->next; } - kprintf("Out Of Loop: [0x%X][%i]\n",temp,temp->id); - kprintf("<id == id) { return(temp->data); } return(NULL); -} + } diff --git a/src/sys/vmm/paging.c b/src/sys/vmm/paging.c index a94d2ef..f5c7b31 100755 --- a/src/sys/vmm/paging.c +++ b/src/sys/vmm/paging.c @@ -322,7 +322,7 @@ //Set Address Of Parent Page Directory parentPageDirectory = (uLong *)parentPageDirAddr; //Allocate A New Page For The New Page Directory - newPageDirectory = (uLong *)getFreePage(pid); + newPageDirectory = (uLong *)getFreePage(pid); //Set newPageDirectoryAddress To The Newly Created Page Directories Page newPageDirectoryAddress = getPhysicalAddr((uLong)newPageDirectory); //First Set Up A Flushed Page Directory