main() { char name[64]; int cmd; /* resetVideo();*/ while(1){ pid = get_pid(); printf("==============================================\n"); printf("I am task %d in Umode at segment=%x\n", pid, getcs()); show_menu(); printf("Command ? "); mgets(name); if (name[0]==0) continue; cmd = find_cmd(name); switch(cmd){ case 0 : get_pid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : mywait(); break; case 6 : myexit(); break; case 7 : ufork(); break; case 8 : myexec("/u2"); break; case 9 : sin(); break; case 10 : sout(); break; default: invalid(name); break; } } }
main(int argc, char *argv[]) { char name[64]; int pid, cmd, segment, i; while(1){ pid = getpid(); color = 0x000B + (pid % 5); segment = (pid+1)*0x1000; printf("==============================================\n"); printf("I am proc %din U mode: segment=%x\n", pid, segment); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : exit(); break; case 7 : fork(); break; case 8 : exec(); break; case 9 : do_itimer(); break; default: invalid(name); break; } } }
main() { char name[64]; int cmd; int pid; while(1){ pid = getpid(); printf("==============================================\n"); printf("Das ist prozess %d im Umode segment=%x\n", pid, getcs()); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : mywait(); break; case 6 : myexit(); break; case 7 : ufork(); break; case 8 : myexec("/bin/u1"); break; case 9 : sin(); break; case 10: sout(); break; default: invalid(name); break; } } }
main() { char name[64]; int pid, cmd; while(1){ pid = getpid(); color = 0x000A + (pid % 6); printf("----------------------------------------------\n"); printf("I am proc %d in U mode: running segment=%x\n",getpid(), getcs()); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : exit(); break; default: invalid(name); break; } } }
/************** syscall routing table ***********/ int kcinth() { u16 x, y, z, w, r; u16 seg, off; seg = running->uss; off = running->usp; x = get_word(seg, off+13*2); y = get_word(seg, off+14*2); z = get_word(seg, off+15*2); w = get_word(seg, off+16*2); switch(x){ case 0 : r = running->pid; break; case 1 : r = kps(); break; case 2 : r = chname(y); break; case 3 : r = kmode(); break; case 4 : r = tswitch(); break; case 5 : r = kwait(); break; case 6 : r = kexit(); break; case 7 : r = fork(); break; case 8 : r = kexec(y); break; case 9 : r = sout(y); break; case 10: r = sin(y); break; case 99: r = kexit(); break; default: printf("invalid syscall # : %d\n", x); } put_word(r, seg, off+2*8); }
/****************** syscall handler in C ***************************/ int kcinth(){ u16 segment, offset; int a,b,c,d, r; segment = running->uss; offset = running->usp; /** get syscall parameters from ustack **/ a = get_word(segment, offset + 2*PA); b = get_word(segment, offset + 2*PB); c = get_word(segment, offset + 2*PC); d = get_word(segment, offset + 2*PD); //printf("proc%d syscall a=%d b=%d c=%d d=%d\n", running->pid, a,b,c,d); switch(a){ case 0 : r = running->pid; break; case 1 : r = do_ps(); break; case 2 : r = chname(b); break; case 3 : r = kmode(); break; case 4 : r = tswitch(); break; case 5 : r = do_wait(b); break; case 6 : r = do_exit(b); break; case 90: r = getc(); break; case 91: r = putc(b); break; case 99: do_exit(b); break; default: printf("invalid syscall # : %d\n", a); } put_word(r, segment, offset + 2*AX); }
main(int argc, char *argv[]) { int pid, cmd, i; char name[64]; ucolor = 0; clearScreen(UMODE); printf("enter main() : argc = %d\n", argc); for (i=0; i<argc; i++) printf("argv[%d] = %s\n", i, argv[i]); while(1){ pid = getpid(); color = ucolor ? ucolor:0x000B + (pid % 5);// avoid black on black baground cmd?resetCursor(UMODE):1; printf("----------------------------------------------\n"); printf("I am proc %din U mode: segment=%x\n", pid, (pid+1)*0x1000); show_menu(); printf("Command ? "); getCurPos(UMODE); printf(" \n"); setCurPos(ux_col,uy_row,UMODE); gets(name); clearScreenRegion(K_X_PRINT_OFFSET,80,U_Y_PRINT_OFFSET-1,24,UMODE); if (name[0]==0) continue; cmd = find_cmd(name); getCurPos(UMODE); setCurPos(K_X_PRINT_OFFSET,U_Y_PRINT_OFFSET,UMODE); switch(cmd){ case 0 : do_getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : exit(); break; case 7 : fork(); break; case 8 : exec(); break; case 9 : ucolor = chcolor(); break; case 10: pipe(); break; case 11: pfd(); break; case 12: read_pipe(); break; case 13: write_pipe(); break; case 14: close_pipe(); break; default: invalid(name); break; } setCurPos(ux_col,uy_row,UMODE); } }
int kcinth() { u16 segment, offset; int a,b,c,d, r; segment = running->uss; offset = running->usp; a = get_word(segment, offset + 2*PA); b = get_word(segment, offset + 2*PB); c = get_word(segment, offset + 2*PC); d = get_word(segment, offset + 2*PD); /*printf("interupthandler a = %d\n", a); printf("b = %d\n", b); printf("string: %s\n", c); printf("n = %d\n", d);*/ switch(a){ case 0 : r = running->pid; break; case 1 : r = do_ps(); break; case 2 : r = kchname(b); break; case 3 : r = kmode(); break; case 4 : r = tswitch(); break; case 5 : r = do_wait(b); break; case 6 : r = do_exit(b); break; case 7 : r = fork(); break; case 8 : r = exec(b); break; /****** these are YOUR pipe functions ************/ case 30 : r = kpipe(b); break; case 31 : r = read_pipe(b,c,d); break; case 32 : r = write_pipe(b,c,d); break; case 33 : r = close_pipe(b); break; case 34 : r = pfd(); break; /**************** end of pipe functions ***********/ case 90: r = getc(); break; case 91: color=running->pid+11; r = putc(b); break; case 99: do_exit(b); break; default: printf("invalid syscall # : %d\n", a); } //printf("interupthandler r = %d\n", r); //getc(); put_word(r, segment, offset + 2*AX); }
main(int argc, char *argv[]) { char name[64]; int pid, cmd, segment, i; pid = getpid(); color = 0x000B + (pid % 5); // avoid black on black baground printf("enter main() : argc = %d\n", argc); for (i=0; i<argc; i++) printf("argv[%d] = %s\n", i, argv[i]); while(1){ pid = getpid(); color = 0x000B + (pid % 5); segment = (pid+1)*0x1000; printf("==============================================\n"); printf("I am proc %din U mode: segment=%x\n", pid, segment); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : exit(); break; case 7 : fork(); break; case 8 : exec(); break; case 9: chcolor(); break; default: invalid(name); break; } } }
int kcinth() { u16 segment, offset; int a,b,c,d, r; segment = running->uss; offset = running->usp; a = get_word(segment, offset + 2*PA); b = get_word(segment, offset + 2*PB); c = get_word(segment, offset + 2*PC); d = get_word(segment, offset + 2*PD); switch(a){ case 0 : r = running->pid; break; case 1 : r = do_ps(); break; case 2 : r = chname(b); break; case 3 : r = kmode(); break; case 4 : r = tswitch(); break; case 5 : r = do_wait(b); break; case 6 : r = do_exit(b); break; case 7 : r = fork(); break; case 8 : r = exec(b); break; case 9 : r = vfork(); break; case 30 : r = kpipe(b); break; case 31 : r = read_pipe(b,c,d); break; case 32 : r = write_pipe(b,c,d); break; case 33 : r = close_pipe(b); break; case 34 : r = pfd(); break; case 90: r = getc(); break; case 91: color=running->pid+11; r = putc(b); break; case 99: do_exit(b); break; default: printf("invalid syscall # : %d\n", a); } put_word(r, segment, offset + 2*AX); }
main() { char name[64]; int pid, cmd; pid = getpid(); while(1){ color = 0x0000B + pid; printf("==============================================\n"); printf("\nIch bin Prozess %d in der U Weise: das laufen im Segment=%x\n", getpid(), getcs()); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); printf("find_cmd = %d\n", cmd); switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : exit(); break; case 7 : fork(); break; case 8 : exec(); break; case 9 : pipe(); break; case 10: pfd(); break; case 11 : read_pipe(); break; case 12 : write_pipe();break; case 13: close(); break; default: invalid(name); break; } } }
main() { char name[64]; int pid, cmd; while(1){ pid = getpid(); color = 0x000B + (pid % 6); printf("----------------------------------------------\n"); printf("I am proc %d in U mode: running segment=%x\n",getpid(), getcs()); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); printf("find_cmd = %d\n", cmd); /*char *cmd[]={"getpid", "ps", "chname", "kmode", "switch", "wait", "exit", "fork", "exec", "pipe", "pfd", "read", "write", "close", 0};*/ switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : exit(); break; case 7 : fork(); break; case 8 : exec(); break; case 9 : pipe(); break; case 10: pfd(); break; case 11 : read_pipe(); break; case 12 : write_pipe();break; case 13: close_pipe(); break; default: invalid(name); break; } } }
main() { char name[64]; int pid, cmd, segment, i; pid = getpid(); color = 0x000B + (pid % 5); // avoid black on black baground while(1){ pid = getpid(); color = 0x000B + (pid % 5); segment = (pid+1)*0x1000; printf("==============================================\n"); printf("I am proc %din U mode: segment=%x\n", pid, segment); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : exit(); break; case 7 : fork(); break; case 8 : exec(); break; case 9: pipe(); break; case 10: pfd(); break; case 11: read_pipe(); break; case 12: write_pipe(); break; case 13: close_pipe(); break; default: invalid(name); break; } } }
main() { char name[64]; int pid, cmd; while(1){ printf("==============================================\n"); printf("\nIch bin Prozess %d in der U Weise: das laufen im Segment=%x\n", getpid(), getcs()); show_menu(); printf("Command ? "); gets(name); if (name[0]==0) continue; cmd = find_cmd(name); switch(cmd){ case 0 : getpid(); break; case 1 : ps(); break; case 2 : chname(); break; case 3 : kmode(); break; case 4 : kswitch(); break; case 5 : wait(); break; case 6 : die(); break; case 7 : ufork(); break; case 8 : uexec(); break; case 9 : chcolor(); break; default: invalid(name); break; } } }
/****************** syscall handler in C ***************************/ int kcinth() { int a,b,c,d, r; //WRITE CODE TO GET get syscall parameters a,b,c,d from ustack a = get_word(running->uss, running->usp + 26); b = get_word(running->uss, running->usp + 28); c = get_word(running->uss, running->usp + 30); d = get_word(running->uss, running->usp + 32); switch(a){ case 0 : r = kgetpid(); break; case 1 : r = kps(); break; case 2 : r = kchname(b); break; case 3 : r = kmode(); break; case 4 : r = tswitch(); break; case 5 : r = kkwait(b); break; case 6 : r = kkexit(b); break; case 7 : r = fork(); break; case 8 : r = kexec(b); break; case 30: r = kpipe(b); break; case 31: r = read_pipe(b,c,d); break; case 32: r = write_pipe(b,c,d);break; case 33: r = close_pipe(b); break; case 34: r = pfd(); break; case 90: r = getc(); break; case 91: r = putc(b); break; case 99: kkexit(b); break; default: printf("invalid syscall # : %d\n", a); } //WRITE CODE to let r be the return value to Umode put_word(r, running->uss, running->usp + 16); return r; }
int kcinth() { ushort seg, off, r; int x, y, z, w; seg = running->uss; off = running->usp; x = get_word(seg, off + 2*13); y = get_word(seg, off + 2*14); z = get_word(seg, off + 2*15); w = get_word(seg, off + 2*16); switch(x){ case 0 : r = running->pid; break; case 1 : r = do_ps(); break; case 2 : r = chname(y); break; case 3 : r = kmode(); break; case 4 : r = tswitch(); break; case 5 : r = do_wait(y); break; case 6 : r = do_exit(y); break; case 7 : r = ufork(); break; case 8 : r = exec(y); break; case 9 : r = chcolor(y); break; case 10: r = putc(y); break; case 11: mysleep(y); break; case 99 : do_exit(y); break; default: printf("invalid syscall # : %d\n", x); break; } put_word(r, seg, off + 2*8); }