diff --git a/src/bin/init/main.c b/src/bin/init/main.c index 4ca3fdb..a570525 100644 --- a/src/bin/init/main.c +++ b/src/bin/init/main.c @@ -58,10 +58,13 @@ } printf("\nG\n"); i = fork(); + printf("Word\n"); + /* printf("\nC\n"); for (i=0;i<100;i++) { printf("[%i]",i); } + */ while (1); if (0x0 == i) { exec("sys:/ttyd",0x0,0x0); @@ -115,6 +118,9 @@ /*** $Log$ + Revision 1.21 2004/08/21 23:47:50 reddawg + *** empty log message *** + Revision 1.20 2004/08/21 20:21:20 reddawg *** empty log message *** diff --git a/src/sys/init/main.c b/src/sys/init/main.c index 998c572..508f3af 100644 --- a/src/sys/init/main.c +++ b/src/sys/init/main.c @@ -71,8 +71,11 @@ } loadGDT = { (9 * sizeof(union descriptorTableUnion) - 1), ubixGDT }; void test_thread() { - kprintf("HOLLER\n"); - while (1); + int i = 0x0; + while (1) { + kprintf("HOLLER\n"); + for (i = 0x0;i<0x1000;i++) asm("hlt"); + } } /***************************************************************************************** Functoin: int main() @@ -108,7 +111,7 @@ */ initHardDisk(); execThread(systemTask,(uInt32)(kmalloc(0x2000)+0x2000),0x0); - //execThread(test_thread,(uInt32)(kmalloc(0x2000)+0x2000),0x0); + execThread(test_thread,(uInt32)(kmalloc(0x2000)+0x2000),0x0); execFile("sys:/init",0x0,0x0,0x1); //execFile("sys:/login",0x0,0x0,0x1); //execFile("sys:/login",0x0,0x0,0x2); @@ -126,6 +129,9 @@ /*** $Log$ + Revision 1.76 2004/08/21 23:47:50 reddawg + *** empty log message *** + Revision 1.75 2004/08/21 20:06:28 reddawg ok check out exec.c diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index 3f63e8b..5e4fc4b 100644 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -90,7 +90,7 @@ newProcess->cr3 = (uInt32)kernelPageDirectory; newProcess->iframe->eip = (uInt32)tproc; newProcess->iframe->flags = 0x206; - newProcess->iframe->esp = &newProcess->kernelStack + 0x2000; + newProcess->iframe->esp = &newProcess->kernelStack + 0x2000 - sizeof(struct i386_frame); newProcess->iframe->ebp = stack; newProcess->iframe->user_esp = stack; newProcess->iframe->user_ss = 0x10; @@ -146,12 +146,16 @@ int i = 0x0; int x = 0x0; + + kTask_t *tmpTask = 0x0; fileDescriptor *tmpFd = 0x0; elfHeader *binaryHeader = 0x0; elfProgramHeader *programHeader = 0x0; + /* Get A New Task For This Proccess */ + tmpTask = _current; _current = schedNewTask(); assert(_current); _current->gid = 0x0; @@ -286,7 +290,7 @@ _current->iframe->eip = (uInt32)binaryHeader->eEntry; _current->iframe->flags = 0x206; - _current->iframe->esp = &_current->kernelStack + 0x2000; + _current->iframe->esp = &_current->kernelStack + 0x2000 - sizeof(struct i386_frame); _current->iframe->ebp = 0x5DD000; _current->iframe->user_esp = 0x5DD000 - 12; _current->iframe->user_ss = 0x30 + 3; @@ -309,7 +313,7 @@ "movl %%eax,%%cr3 \n" : : "d" ((uInt32 *)(kernelPageDirectory)) ); - + _current = tmpTask; /* Finally Return */ return; } @@ -461,6 +465,9 @@ /*** $Log$ + Revision 1.66 2004/08/21 23:47:50 reddawg + *** empty log message *** + Revision 1.65 2004/08/21 20:21:20 reddawg *** empty log message *** diff --git a/src/sys/kernel/fork.c b/src/sys/kernel/fork.c index 7b1cf93..6d55528 100644 --- a/src/sys/kernel/fork.c +++ b/src/sys/kernel/fork.c @@ -48,10 +48,8 @@ ************************************************************************/ asm( - ".globl sysFork \n" - "sysFork: \n" - "hlt\n" - /* + ".globl sysFork \n" + "sysFork: \n" " xor %eax,%eax \n" " call schedNewTask \n" " testl %eax,%eax \n" @@ -60,23 +58,24 @@ " pushl %edi \n" " pushl %ebp \n" " pushl %eax \n" - */ " call forkCopyProcess \n" " movl %eax,(%ebx) \n" " addl $16,%esp \n" "1: \n" " ret \n" ); - + +int forkCopyProcess_new(struct i386_frame iframe) { + kprintf("eip: [0x%X]\n",iframe.eip); + while (1); + } int forkCopyProcess(struct taskStruct *newProcess,long ebp,long edi,long esi,long none,long ebx,long ecx,long edx,long eip,long cs,long eflags,long esp,long ss) { assert(newProcess); assert(_current); - kprintf("A"); - kprintf("A"); - newProcess->iframe->gs = _current->iframe->gs; - kprintf("A"); - newProcess->iframe->fs = _current->iframe->fs; - kprintf("A"); + kprintf("[0x%X:0x%X:0x%X]\n",_current->iframe,_current->kernelStack,((uInt32)_current->iframe - (uInt32)_current->kernelStack)); + //memcpy(newProcess->kernelStack,_current->kernelStack,0x2000); + newProcess->iframe->gs = _current->iframe->gs; + newProcess->iframe->fs = _current->iframe->fs; newProcess->iframe->es = _current->iframe->es; newProcess->iframe->ds = _current->iframe->ds; newProcess->iframe->ss = 0x10; @@ -94,9 +93,8 @@ newProcess->iframe->user_esp = esp; newProcess->iframe->user_ss = ss; /* Create A Copy Of The VM Space For New Task */ - //newProcess->cr3 = (uInt32)vmmCopyVirtualSpace(newProcess->id); - kpanic("EIP: [0x%X]\n",eip); - while (1); + newProcess->cr3 = (uInt32)vmmCopyVirtualSpace(newProcess->id); + kprintf("newProcess->id: [%i][0x%X][0x%X][0x%X]\n",newProcess->id,esp,esi,edi); newProcess->state = FORK; @@ -109,6 +107,9 @@ /*** $Log$ + Revision 1.25 2004/08/21 23:47:50 reddawg + *** empty log message *** + Revision 1.24 2004/08/21 20:21:20 reddawg *** empty log message *** diff --git a/src/sys/kernel/sched.c b/src/sys/kernel/sched.c index afb4822..7a4e448 100644 --- a/src/sys/kernel/sched.c +++ b/src/sys/kernel/sched.c @@ -59,33 +59,11 @@ schedStart: /* Yield the next task from the current prio queue */ for (;tmpTask != 0x0; tmpTask = tmpTask->next) { + if (tmpTask->state > 0x0) { /* - if (tmpTask->state == DEAD) { - if (tmpTask->next) - tmpTask->next->prev = tmpTask->prev; - if (tmpTask->prev) - tmpTask->prev->next = tmpTask->next; - if (tmpTask == runList) - runList = runList->next; - - delTask = tmpTask->prev; - - if (delList == 0x0) { - delList = tmpTask; - delList->prev = 0x0; - delList->next = 0x0; - } - else { - delList->prev = tmpTask; - tmpTask->next = delList; - delList = tmpTask; - } - tmpTask = delTask; - goto schedStart; - } - else */ if (tmpTask->state > 0x0) { if (tmpTask->state == FORK) tmpTask->state = READY; + */ return(tmpTask); } } @@ -148,16 +126,15 @@ tmpTask->timeSlice = systemVitals->dQuantum; runList = tmpTask; - _current = runList; + _current = tmpTask; nextID++; - + kprintf("_current: [0x%X:0x%X]\n",_current,_current->id); kprintf("sched0 - Address: [0x%X:0x%X]\n",sched_tss,runList); /* Return so we know everything went well */ return(0x0); } - uInt32 sched(struct i386_frame iframe) { uInt32 memAddr = 0x0; kTask_t *tmpTask = 0x0; @@ -169,13 +146,16 @@ kpanic("Error: sched_getRunableTask == 0x0\n"); /* Make this our now current task */ + _current = tmpTask; /* Test if it is a 16 bit task */ + if (_current->oInfo.v86Task == 0x1) irqDisable(0x0); - + /* Switch Tasks */ + sched_tss->esp0 = _current->kernelStack + 0x2000; asm volatile( "mov %0,%%eax \n" @@ -184,10 +164,10 @@ : "a" (_current->cr3) ); + /* Return IFRAME */ return (_current->iframe); } - kTask_t *schedNewTask() { kTask_t *tmpTask = (kTask_t *)kmalloc(sizeof(kTask_t)); @@ -326,6 +306,9 @@ /*** $Log$ + Revision 1.40 2004/08/21 23:57:53 reddawg + *** empty log message *** + Revision 1.39 2004/08/21 23:47:50 reddawg *** empty log message *** diff --git a/src/sys/kernel/sys_call.S b/src/sys/kernel/sys_call.S index effeb17..ccc5f5e 100644 --- a/src/sys/kernel/sys_call.S +++ b/src/sys/kernel/sys_call.S @@ -31,31 +31,19 @@ .text .code32 _sysCall: - pusha /* Save all of the registers */ - push %ss - push %ds - push %es - push %fs - push %gs cmpl totalCalls,%eax jae invalidSysCall pushl %edx pushl %ecx pushl %ebx call *systemCalls(,%eax,4) - jmp done + jmp syscall_done invalidSysCall: call invalidCall -done: +syscall_done: popl %ebx popl %ecx - popl %edx /* Restore Registers */ - pop %gs - pop %fs - pop %es - pop %ds - pop %ss - popa /* Restore Registers */ + popl %edx /* Restore Registers */ iret invalidCall: @@ -67,6 +55,9 @@ /*** $Log$ + Revision 1.3 2004/08/21 23:47:50 reddawg + *** empty log message *** + Revision 1.2 2004/07/21 20:55:10 reddawg fixed invalidSyscall diff --git a/src/sys/kernel/systemtask.c b/src/sys/kernel/systemtask.c index a694877..7f635bf 100644 --- a/src/sys/kernel/systemtask.c +++ b/src/sys/kernel/systemtask.c @@ -92,6 +92,8 @@ break; } } + kprintf("sysTask\n"); + for (i = 0x0;i<0x1000;i++) asm("hlt"); sched_yield(); } return; @@ -99,6 +101,9 @@ /*** $Log$ + Revision 1.12 2004/08/14 11:23:02 reddawg + Changes + Revision 1.11 2004/08/06 22:43:04 reddawg ok diff --git a/src/sys/kernel/timer.S b/src/sys/kernel/timer.S index c3386e9..1308db1 100644 --- a/src/sys/kernel/timer.S +++ b/src/sys/kernel/timer.S @@ -55,10 +55,10 @@ xor %edx,%edx div %ebx test %edx,%edx - jnz done + jnz timer_done call sched - mov %eax,%esp -done: + mov %eax,%esp +timer_done: pop %gs pop %fs pop %es @@ -69,6 +69,9 @@ /*** $Log$ + Revision 1.8 2004/08/21 23:47:50 reddawg + *** empty log message *** + Revision 1.7 2004/08/21 20:06:28 reddawg ok check out exec.c diff --git a/src/sys/mpi/system.c b/src/sys/mpi/system.c index 9ef3067..0f4d4a3 100644 --- a/src/sys/mpi/system.c +++ b/src/sys/mpi/system.c @@ -71,7 +71,6 @@ mpi_mbox_t *mbox = 0x0; spinLock(&mpiSpinLock); - kprintf("MPI\n"); if (mpi_findMbox(name) != 0x0) { spinUnlock(&mpiSpinLock); return(-1); @@ -258,6 +257,9 @@ /*** $Log$ + Revision 1.3 2004/08/21 23:47:50 reddawg + *** empty log message *** + Revision 1.2 2004/08/14 11:23:02 reddawg Changes diff --git a/src/sys/vmm/pagefault.c b/src/sys/vmm/pagefault.c index 35ebf23..1357582 100644 --- a/src/sys/vmm/pagefault.c +++ b/src/sys/vmm/pagefault.c @@ -110,7 +110,7 @@ else { spinUnlock(&pageFaultSpinLock); /* Need To Create A Routine For Attempting To Access Non Mapped Memory */ - kprintf("Segfault At Address: [0x%X][0x%X][%i][0x%X] Non Mapped\n",memAddr,esp,_current->id,eip); + kpanic("Segfault At Address: [0x%X][0x%X][%i][0x%X] Non Mapped\n",memAddr,esp,_current->id,eip); spinUnlock(&pageFaultSpinLock); endTask(_current->id); } @@ -127,6 +127,9 @@ /*** $Log$ + Revision 1.12 2004/08/14 11:23:03 reddawg + Changes + Revision 1.11 2004/07/28 15:05:43 reddawg Major: Pages now have strict security enforcement.