diff --git a/src/bin/init/main.c b/src/bin/init/main.c index e0a8c05..46c20c91 100755 --- a/src/bin/init/main.c +++ b/src/bin/init/main.c @@ -41,7 +41,7 @@ } if (getpid() != 1) { printf("Sorry This Program Must Be Started By The Kernel!!!!\n"); - exit(1); + // exit(1); } printf("Initializing system.\n"); exec("shell"); diff --git a/src/bin/shell/main.c b/src/bin/shell/main.c index fea923d..19ae1c1 100755 --- a/src/bin/shell/main.c +++ b/src/bin/shell/main.c @@ -32,5 +32,7 @@ int main() { printf("UbixOS: "); //exec("shell"); - while (1); + while (1) { + printf("shell"); + } } \ No newline at end of file diff --git a/src/sys/include/vmm/paging.h b/src/sys/include/vmm/paging.h index 4a91a89..b724080 100755 --- a/src/sys/include/vmm/paging.h +++ b/src/sys/include/vmm/paging.h @@ -33,7 +33,7 @@ #define pageUser 0x00000004 #define pageDefault (pagePresent|pageWrite|pageUser) -extern unsigned int *pageDirectory; +extern unsigned long *pageDirectory; extern int memoryStart; void initPaging(); diff --git a/src/sys/init/main.c b/src/sys/init/main.c index 0ed259f..f58e1df 100755 --- a/src/sys/init/main.c +++ b/src/sys/init/main.c @@ -85,8 +85,8 @@ initFloppy(); //Initialize Floppy Controller initUbixFS(); execThread(idleThread,0xAFFF,"Idle Thread"); - //execFile("shell"); execFile("init"); + //execFile("shell"); //execThread(test,0xCFFF,"Test"); /* while(1) { diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index 5d978a5..a241c5f 100755 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -36,36 +36,54 @@ elfHeader *binaryHeader = (elfHeader *)0x7C0000; elfProgramheader *programHeader; pid = findTask(); - taskList[pid].tss.cr3 = (unsigned long)allocPage() | pageDefault; - pd = &_current->tss.cr3; - pdn = &taskList[pid].tss.cr3; - for (i=0;i<1;i++) { + pdn = (unsigned int *)allocPage(); + if ((_current->id >=0) && (_current->id <= numTasks)) { + pd = _current->tss.cr3; + kprintf("woot"); + } + else { + pd = pageDirectory; + } + // pd = pageDirectory; + taskList[pid].tss.cr3 = pdn; + for (i=0;i<=1;i++) { pdn[i] = pd[i]; } - for (i=3072;i<4096;i++) { + for (i=256;i<4096;i++) { pdn[i] = pd[i]; } + kprintf("[%i][%i]sdfsdf\n",pd,&taskList[pid].tss.cr3); + _current = &taskList[pid]; asm( "movl %0,%%eax \n" "movl %%eax,%%cr3 \n" "movl %%cr0,%%eax \n" "orl $0x80000000,%%eax \n" "movl %%eax,%%cr0 \n" - : : "d" ((unsigned int *)(*pdn)) + : : "d" ((unsigned int *)(pdn)) ); - if (pid <= 1) { +// if (_current->id > 1) { while (1); } fd = fopen(file,1); + kprintf("fd: [%i][%i]\n",fd,pid); for (i=0;feof(fd) == 0;i++) { binarySpace[i] = fgetc(fd); } - programHeader = (elfProgramheader *)(0x7C0000 + binaryHeader->ePhoff); + programHeader = (elfProgramheader *)(0x7C0000 + binaryHeader->ePhoff); newLoc = (char *)programHeader->phVaddr; kprintf("[%i]\n",programHeader->phOffset); + kprintf("[%i][%i][%i]\n",pd,pdn,&_current->tss.cr3); for (x=0;xeEntry; i = (allocPage()+4095); + newLoc = (char *)0x2000000; + for (i=0;i<4096;i++) { + newLoc[i] = 0x0; + } + i = 0x2000000+4095; + taskList[pid].tss.back_link = 0x0; taskList[pid].tss.esp0 = i; taskList[pid].tss.ss0 = 0x10; @@ -73,7 +91,7 @@ taskList[pid].tss.ss1 = 0x10; taskList[pid].tss.esp2 = 0x0; taskList[pid].tss.ss2 = 0x10; - taskList[pid].tss.cr3 = (unsigned int)*pdn; + taskList[pid].tss.cr3 = (unsigned int)pdn; taskList[pid].tss.eip = (unsigned int)eStart; taskList[pid].tss.eflags = 0x206; taskList[pid].tss.esp = i; @@ -89,15 +107,15 @@ taskList[pid].tss.ldt = 0x18; taskList[pid].tss.trace_bitmap = 0x80000000; taskList[pid].status = RUNABLE; - } asm( "movl %0,%%eax \n" "movl %%eax,%%cr3 \n" "movl %%cr0,%%eax \n" "orl $0x80000000,%%eax \n" "movl %%eax,%%cr0 \n" - : : "d" ((unsigned int *)(*pd)) + : : "d" ((unsigned int *)(pd)) ); + kprintf("hmm\n"); } void execThread(void (* tproc)(void),int stack,char *descr) { diff --git a/src/sys/kernel/idlethread.c b/src/sys/kernel/idlethread.c index 5c48a0d..3a01703 100755 --- a/src/sys/kernel/idlethread.c +++ b/src/sys/kernel/idlethread.c @@ -34,6 +34,7 @@ while (1) { testBuf[0] = 'c'; testBuf[1] = printColor; + kprintf("^"); //checkTasks(); /* Looks for run away proccesses and kills thems */ } } \ No newline at end of file diff --git a/src/sys/kernel/schedule.c b/src/sys/kernel/schedule.c index 4bd03f2..f3d67ab 100755 --- a/src/sys/kernel/schedule.c +++ b/src/sys/kernel/schedule.c @@ -27,7 +27,7 @@ #include #include -int currentProc; +int currentProc = 0; struct taskStruct *taskList = (struct taskStruct *)0xDAC00000; struct taskStruct *_current,*_usedMath = 0x0; @@ -37,6 +37,9 @@ /* Initialize Scheduler */ void initScheduler(void) { int i; + taskList[-1].id = -1; + taskList[-1].status = AVAILABLE; + for (i=0;i> 16) & 0xff); GDT[4].descriptor.baseHigh = (memAddr >> 24); + //kprintf("Task: [%i][%i][%i]\n",_current->id,_current->tss.cr3,&_current->tss.cr3); asm("ljmp $0x20,$0\n"); } } diff --git a/src/sys/kernel/syscall.c b/src/sys/kernel/syscall.c index 7da620e..5b4994e 100755 --- a/src/sys/kernel/syscall.c +++ b/src/sys/kernel/syscall.c @@ -83,5 +83,7 @@ asm("":"=b" (file)); kprintf("File [%s]\n",file); asm("sti"); +// disableIrq(0); execFile(file); +// enableIrq(0); } \ No newline at end of file diff --git a/src/sys/ubixfs/file.c b/src/sys/ubixfs/file.c index a27e94b..ca680ef 100755 --- a/src/sys/ubixfs/file.c +++ b/src/sys/ubixfs/file.c @@ -25,7 +25,7 @@ #include #include -struct fileDescriptorTable *fdTable = (struct fileDescriptorTable *)0xE7400000; +struct fileDescriptorTable *fdTable = (unsigned long)0xE7400000; int sprintf(char *buf,const char *fmt, ...); diff --git a/src/sys/vmm/paging.c b/src/sys/vmm/paging.c index e49cd49..07ff42f 100755 --- a/src/sys/vmm/paging.c +++ b/src/sys/vmm/paging.c @@ -27,7 +27,7 @@ #include #include -unsigned int *pageDirectory = 0x0; +unsigned long *pageDirectory = 0x0; int memoryStart = 0x100000; void initPaging() { @@ -102,8 +102,14 @@ } void pageFault() { - uInt cr2 = 0,i = 0, page = 0,pi = 0; - uInt *pageTable; + uLong cr2 = 0,i = 0, page = 0,pi = 0; + uLong *pageDir,*pageTable; + if ((_current->id < 0) || (_current->id > numTasks)) { + pageDir = pageDirectory; + } + else { + pageDir = _current->tss.cr3; + } asm( "movl %%cr2,%%eax\n" "movl %%eax,%0\n" @@ -111,16 +117,18 @@ ); pi = cr2/(1024*4096); page = (cr2-(pi*(1024*4096)))/4096; - if (pageDirectory[pi] == 0) { + if (pageDir[pi] == 0) { + // kprintf("mapped\n"); pageTable = (unsigned int*)allocPage(); - pageDirectory[pi] = (unsigned int)pageTable | pageDefault; + pageDir[pi] = (unsigned int)pageTable | pageDefault; for (i=0;i<1024;i++) { pageTable[i] = 0; } pageTable[page] = allocPage() | pageDefault; } else { - pageTable = (unsigned int *)(pageDirectory[pi]-39); + // kprintf("not Mapped\n"); + pageTable = (unsigned int *)(pageDir[pi]-39); pageTable[page] = allocPage() | pageDefault; } asm(