|
|
1.1 ! root 1: /* x_ps.c - x_ps */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <proc.h> ! 6: ! 7: LOCAL char hd1[] = ! 8: "pid name state prio stack range stack length sem message\n"; ! 9: LOCAL char hd2[] = ! 10: "--- -------- ----- ---- ------------- ------------ --- ---------\n"; ! 11: LOCAL char *pstnams[] = {"curr ","free ","ready","recv ", ! 12: "sleep","susp ","wait ","rtim "}; ! 13: LOCAL int psavsp; ! 14: ! 15: /*------------------------------------------------------------------------ ! 16: * x_ps - (command ps) format and print process table information ! 17: *------------------------------------------------------------------------ ! 18: */ ! 19: COMMAND x_ps(stdin, stdout, stderr, nargs, args) ! 20: int stdin, stdout, stderr, nargs; ! 21: char *args[]; ! 22: { ! 23: int i; ! 24: char str[80]; ! 25: struct pentry *pptr; ! 26: unsigned currstk; ! 27: ! 28: asm("movl sp,_psavsp"); /* capture current stack pointer */ ! 29: proctab[currpid].pregs[SPINDX] = psavsp; ! 30: write(stdout, hd1, strlen(hd1)); ! 31: write(stdout, hd2, strlen(hd2)); ! 32: for (i=0 ; i<NPROC ; i++) { ! 33: if ((pptr = &proctab[i])->pstate == PRFREE) ! 34: continue; ! 35: sprintf(str, "%3d %8s %s ", i, pptr->pname, ! 36: pstnams[pptr->pstate-1]); ! 37: write(stdout, str, strlen(str)); ! 38: sprintf(str, "%4d %6x-%6x ", pptr->pprio, pptr->plimit, ! 39: (unsigned)pptr->pbase + sizeof(int)-1); ! 40: write(stdout, str, strlen(str)); ! 41: currstk = pptr->pregs[SPINDX]; ! 42: if (currstk < pptr->plimit || currstk > pptr->pbase) ! 43: sprintf(str, "OVERFLOWED "); ! 44: else ! 45: sprintf(str, "%4d / %4d ", pptr->pbase - currstk, ! 46: pptr->pstklen); ! 47: write(stdout, str, strlen(str)); ! 48: if (pptr->pstate == PRWAIT) ! 49: sprintf(str, "%3d", pptr->psem); ! 50: else ! 51: sprintf(str, " - "); ! 52: write(stdout, str, strlen(str)); ! 53: if (pptr->phasmsg) ! 54: sprintf(str, "%10x\n", pptr->pmsg); ! 55: else ! 56: sprintf(str, " -\n"); ! 57: write(stdout, str, strlen(str)); ! 58: } ! 59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.