|
|
1.1 ! root 1: /* x_mem.c - x_mem */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <proc.h> ! 6: #include <mem.h> ! 7: ! 8: /*------------------------------------------------------------------------ ! 9: * x_mem - (command mem) print memory use and free list information ! 10: *------------------------------------------------------------------------ ! 11: */ ! 12: COMMAND x_mem(stdin, stdout, stderr, nargs, args) ! 13: int stdin, stdout, stderr, nargs; ! 14: char *args[]; ! 15: { ! 16: int i; ! 17: struct mblock *mptr; ! 18: char str[80]; ! 19: unsigned free; ! 20: unsigned avail; ! 21: unsigned stkmem; ! 22: ! 23: /* calculate current size of free memory and stack memory */ ! 24: ! 25: for( free=0,mptr=memlist.mnext ; mptr!=(struct mblock *)NULL ; ! 26: mptr=mptr->mnext) ! 27: free += mptr->mlen; ! 28: for (stkmem=0,i=0 ; i<NPROC ; i++) { ! 29: if (proctab[i].pstate != PRFREE) ! 30: stkmem += (unsigned)proctab[i].pstklen; ! 31: } ! 32: sprintf(str, ! 33: "Memory: %u bytes real memory, %u text, %u data, %u bss\n", ! 34: 1 + maxaddr, (unsigned) &etext, ! 35: (unsigned) &edata - (unsigned) &etext, ! 36: (unsigned) &end - (unsigned) &edata); ! 37: write(stdout, str, strlen(str)); ! 38: avail = (unsigned)maxaddr - (unsigned) &end + sizeof(int); ! 39: sprintf(str," initially: %7u avail\n", avail); ! 40: write(stdout, str, strlen(str)); ! 41: sprintf(str," presently: %7u avail, %5u stack, %5u heap\n", ! 42: free, stkmem, avail - stkmem - free); ! 43: write(stdout, str, strlen(str)); ! 44: sprintf(str," free list:\n"); ! 45: write(stdout, str, strlen(str)); ! 46: for( mptr=memlist.mnext ; mptr!=(struct mblock *)NULL ; ! 47: mptr=mptr->mnext) { ! 48: sprintf(str," block at %6x, length %5u (0x%x)\n", ! 49: mptr, mptr->mlen, mptr->mlen); ! 50: write(stdout, str, strlen(str)); ! 51: } ! 52: return(OK); ! 53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.