ftp.nice.ch/pub/next/unix/hack/hackkit.2.N.bs.tar.gz#/freebies/hackkit/vmstat.c

This is vmstat.c in view mode; [Download] [Up]

#include "mach.h"

main() {
    struct vm_statistics s;
    int pagek; int m,t;
    unsigned int address,offset;
    int protection,maxprotection,inheritance,object_name;
    unsigned int size,shared;
    static int initdata = 4;
    static int bssdata;

    _vm_statistics(task_self_,&s);
    pagek = s.pagesize/1024;
    printf("------- vm_statistics according to the Mach Kernel: -------\n");
    printf("Each page has %d bytes (%dK)\n",s.pagesize,pagek);
    printf("%4d(%dK) free\n",s.free_count,s.free_count*pagek);
    printf("%4d(%dK) active\n",s.active_count,s.active_count*pagek);
    printf("%4d(%dK) inactive\n",s.inactive_count,s.inactive_count*pagek);
    printf("%4d(%dK) wired down\n",s.wire_count,s.wire_count*pagek);
    t=(s.free_count+s.active_count+s.inactive_count+s.wire_count)*pagek;
    m=((t-1)/1024+1)*1024;
    printf("%4d(%dK) unaccounted for\n",(m-t)/pagek,m-t);
    printf("%4d(%dM) total\n",m/pagek,m/1024);
    printf("%d vm pages mapped as zero-fill\n",s.zero_fill_count);
    printf("# of pages reactivated = %d\n",s.reactivations);
    printf("# of pageins = %d\n",s.pageins);
    printf("# of pageouts = %d\n",s.pageouts);
    printf("# of faults = %d\n",s.faults);
    printf("# of copy-on-write faults = %d\n",s.cow_faults);
    printf("object cache lookups = %d\n",s.lookups);
    printf("object cache hits = %d\n",s.hits);

    printf("\nMemory map of this task:\n"
	   "   start   length      end P M I S pager[offset]\n");
    address = 0;
    while (vm_region(task_self_,&address,&size,&protection,&maxprotection,
		     &inheritance,&shared,&object_name,&offset)==0) {
	printf("%8x %8x %8x %d %d %d %d %d[%x]\n",
	       address,size,address+size,protection,maxprotection,
	       inheritance,shared,object_name,offset);
	address += size;
	}

    printf("\nInteresting locations:\n");
    {extern printf();
     printf("main is at %x\n",main);
     printf("printf is at %x\n",printf);
     printf("if printf is a jump, it points to %x\n",
	    *(unsigned *)((void *)printf+2));
     printf("A piece of initialized data is at %x\n",&initdata);
     printf("A piece of bss data is at %x\n",&bssdata);
     printf("Stack pointer is at %x\n",&shared);
     }

    printf("\nMalloc says:\n");
    mstats();
    printf("That last 8K seems to be allocated by printf.\n");
    /* include DPS library... */
    DPSAddFD(0,0,0,0,0);
    }

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.