⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmp_kernel.c

📁 Minix3.11的源码。[MINIX 3是一个为高可靠性应用而设计的自由且简洁的类UNIX系统。]
💻 C
📖 第 1 页 / 共 2 页
字号:
    printf("Dump of kinfo and machine structures.\n\n");    printf("Machine structure:\n");    printf("- pc_at:      %3d\n", machine.pc_at);     printf("- ps_mca:     %3d\n", machine.ps_mca);     printf("- processor:  %3d\n", machine.processor);     printf("- protected:  %3d\n", machine.protected);     printf("- vdu_ega:    %3d\n", machine.vdu_ega);     printf("- vdu_vga:    %3d\n\n", machine.vdu_vga);     printf("Kernel info structure:\n");    printf("- code_base:  %5u\n", kinfo.code_base);     printf("- code_size:  %5u\n", kinfo.code_size);     printf("- data_base:  %5u\n", kinfo.data_base);     printf("- data_size:  %5u\n", kinfo.data_size);     printf("- proc_addr:  %5u\n", kinfo.proc_addr);     printf("- kmem_base:  %5u\n", kinfo.kmem_base);     printf("- kmem_size:  %5u\n", kinfo.kmem_size);     printf("- bootdev_base:  %5u\n", kinfo.bootdev_base);     printf("- bootdev_size:  %5u\n", kinfo.bootdev_size);     printf("- ramdev_base:   %5u\n", kinfo.ramdev_base);     printf("- ramdev_size:   %5u\n", kinfo.ramdev_size);     printf("- params_base:   %5u\n", kinfo.params_base);     printf("- params_size:   %5u\n", kinfo.params_size);     printf("- nr_procs:     %3u\n", kinfo.nr_procs);     printf("- nr_tasks:     %3u\n", kinfo.nr_tasks);     printf("- release:      %.6s\n", kinfo.release);     printf("- version:      %.6s\n", kinfo.version); #if DEBUG_LOCK_CHECK    printf("- relocking:    %d\n", kinfo.relocking); #endif    printf("\n");}PRIVATE char *s_flags_str(int flags){	static char str[10];	str[0] = (flags & PREEMPTIBLE) ? 'P' : '-';	str[1] = '-';	str[2] = (flags & BILLABLE)    ? 'B' : '-';	str[3] = (flags & SYS_PROC)    ? 'S' : '-';	str[4] = '-';	str[5] = '\0';	return str;}PRIVATE char *s_traps_str(int flags){	static char str[10];	str[0] = (flags & (1 << ECHO)) ? 'E' : '-';	str[1] = (flags & (1 << SEND))  ? 'S' : '-';	str[2] = (flags & (1 << RECEIVE))  ? 'R' : '-';	str[3] = (flags & (1 << SENDREC))  ? 'B' : '-';	str[4] = (flags & (1 << NOTIFY)) ? 'N' : '-';	str[5] = '\0';	return str;}/*===========================================================================* *				privileges_dmp 				     * *===========================================================================*/PUBLIC void privileges_dmp(){  register struct proc *rp;  static struct proc *oldrp = BEG_PROC_ADDR;  register struct priv *sp;  static char ipc_to[NR_SYS_PROCS + 1 + NR_SYS_PROCS/8];  int r, i,j, n = 0;  /* First obtain a fresh copy of the current process and system table. */  if ((r = sys_getprivtab(priv)) != OK) {      report("IS","warning: couldn't get copy of system privileges table", r);      return;  }  if ((r = sys_getproctab(proc)) != OK) {      report("IS","warning: couldn't get copy of process table", r);      return;  }  printf("\n--nr-id-name---- -flags- -traps- -ipc_to mask------------------------ \n");  for (rp = oldrp; rp < END_PROC_ADDR; rp++) {	if (isemptyp(rp)) continue;	if (++n > 23) break;	if (proc_nr(rp) == IDLE) 	printf("(%2d) ", proc_nr(rp));  	else if (proc_nr(rp) < 0) 	printf("[%2d] ", proc_nr(rp));	else 				printf(" %2d  ", proc_nr(rp));        r = -1;        for (sp = &priv[0]; sp < &priv[NR_SYS_PROCS]; sp++)             if (sp->s_proc_nr == rp->p_nr) { r ++; break; }        if (r == -1 && ! (rp->p_rts_flags & SLOT_FREE)) {	    sp = &priv[USER_PRIV_ID];        }	printf("(%02u) %-7.7s %s   %s  ",	       sp->s_id, rp->p_name,	       s_flags_str(sp->s_flags), s_traps_str(sp->s_trap_mask)         );        for (i=j=0; i < NR_SYS_PROCS; i++, j++) {       	    ipc_to[j] = get_sys_bit(sp->s_ipc_to, i) ? '1' : '0';       	    if (i % 8 == 7) ipc_to[++j] = ' ';       	}        ipc_to[j] = '\0';	printf(" %s \n", ipc_to);  }  if (rp == END_PROC_ADDR) rp = BEG_PROC_ADDR; else printf("--more--\r");  oldrp = rp;}/*===========================================================================* *				sendmask_dmp   				     * *===========================================================================*/PUBLIC void sendmask_dmp(){  register struct proc *rp;  static struct proc *oldrp = BEG_PROC_ADDR;  int r, i,j, n = 0;  /* First obtain a fresh copy of the current process table. */  if ((r = sys_getproctab(proc)) != OK) {      report("IS","warning: couldn't get copy of process table", r);      return;  }  printf("\n\n");  printf("Sendmask dump for process table. User processes (*) don't have [].");  printf("\n");  printf("The rows of bits indicate to which processes each process may send.");  printf("\n\n");#if DEAD_CODE  printf("              ");  for (j=proc_nr(BEG_PROC_ADDR); j< INIT_PROC_NR+1; j++) {     printf("%3d", j);  }  printf("  *\n");  for (rp = oldrp; rp < END_PROC_ADDR; rp++) {        if (isemptyp(rp)) continue;        if (++n > 20) break;    	printf("%8s ", rp->p_name);	if (proc_nr(rp) == IDLE) 	printf("(%2d) ", proc_nr(rp));  	else if (proc_nr(rp) < 0) 	printf("[%2d] ", proc_nr(rp));	else 				printf(" %2d  ", proc_nr(rp));    	for (j=proc_nr(BEG_PROC_ADDR); j<INIT_PROC_NR+2; j++) {    	    if (isallowed(rp->p_sendmask, j))	printf(" 1 ");    	    else 				printf(" 0 ");    	}        printf("\n");  }  if (rp == END_PROC_ADDR) { printf("\n"); rp = BEG_PROC_ADDR; }  else printf("--more--\r");  oldrp = rp;#endif}PRIVATE char *p_rts_flags_str(int flags){	static char str[10];	str[0] = (flags & NO_MAP) ? 'M' : '-';	str[1] = (flags & SENDING)  ? 'S' : '-';	str[2] = (flags & RECEIVING)    ? 'R' : '-';	str[3] = (flags & SIGNALED)    ? 'I' : '-';	str[4] = (flags & SIG_PENDING)    ? 'P' : '-';	str[5] = (flags & P_STOP)    ? 'T' : '-';	str[6] = '\0';	return str;}/*===========================================================================* *				proctab_dmp    				     * *===========================================================================*/#if (CHIP == INTEL)PUBLIC void proctab_dmp(){/* Proc table dump */  register struct proc *rp;  static struct proc *oldrp = BEG_PROC_ADDR;  int r, n = 0;  phys_clicks text, data, size;  /* First obtain a fresh copy of the current process table. */  if ((r = sys_getproctab(proc)) != OK) {      report("IS","warning: couldn't get copy of process table", r);      return;  }  printf("\n--nr-name---- -prior-quant- -user---sys- -text---data---size- -rts flags-\n");  for (rp = oldrp; rp < END_PROC_ADDR; rp++) {	if (isemptyp(rp)) continue;	if (++n > 23) break;	text = rp->p_memmap[T].mem_phys;	data = rp->p_memmap[D].mem_phys;	size = rp->p_memmap[T].mem_len		+ ((rp->p_memmap[S].mem_phys + rp->p_memmap[S].mem_len) - data);	if (proc_nr(rp) == IDLE) 	printf("(%2d) ", proc_nr(rp));  	else if (proc_nr(rp) < 0) 	printf("[%2d] ", proc_nr(rp));	else 				printf(" %2d  ", proc_nr(rp));	printf(" %-8.8s %02u/%02u %02d/%02u %6lu%6lu %6uK%6uK%6uK %s",	       rp->p_name,	       rp->p_priority, rp->p_max_priority,	       rp->p_ticks_left, rp->p_quantum_size, 	       rp->p_user_time, rp->p_sys_time,	       click_to_round_k(text), click_to_round_k(data),	       click_to_round_k(size),	       p_rts_flags_str(rp->p_rts_flags));	if (rp->p_rts_flags & (SENDING|RECEIVING)) {		printf(" %-7.7s", proc_name(rp->p_getfrom));	} 	printf("\n");  }  if (rp == END_PROC_ADDR) rp = BEG_PROC_ADDR; else printf("--more--\r");  oldrp = rp;}#endif				/* (CHIP == INTEL) *//*===========================================================================* *				memmap_dmp    				     * *===========================================================================*/PUBLIC void memmap_dmp(){  register struct proc *rp;  static struct proc *oldrp = proc;  int r, n = 0;  phys_clicks size;  /* First obtain a fresh copy of the current process table. */  if ((r = sys_getproctab(proc)) != OK) {      report("IS","warning: couldn't get copy of process table", r);      return;  }  printf("\n-nr/name--- --pc-- --sp-- -----text----- -----data----- ----stack----- --size-\n");  for (rp = oldrp; rp < END_PROC_ADDR; rp++) {	if (isemptyp(rp)) continue;	if (++n > 23) break;	size = rp->p_memmap[T].mem_len		+ ((rp->p_memmap[S].mem_phys + rp->p_memmap[S].mem_len)						- rp->p_memmap[D].mem_phys);	printf("%3d %-7.7s%7lx%7lx %4x %4x %4x %4x %4x %4x %4x %4x %4x %5uK\n",	       proc_nr(rp),	       rp->p_name,	       (unsigned long) rp->p_reg.pc,	       (unsigned long) rp->p_reg.sp,	       rp->p_memmap[T].mem_vir, rp->p_memmap[T].mem_phys, rp->p_memmap[T].mem_len,	       rp->p_memmap[D].mem_vir, rp->p_memmap[D].mem_phys, rp->p_memmap[D].mem_len,	       rp->p_memmap[S].mem_vir, rp->p_memmap[S].mem_phys, rp->p_memmap[S].mem_len,	       click_to_round_k(size));  }  if (rp == END_PROC_ADDR) rp = proc;   else printf("--more--\r");  oldrp = rp;}/*===========================================================================* *				proc_name    				     * *===========================================================================*/PRIVATE char *proc_name(proc_nr)int proc_nr;{  if (proc_nr == ANY) return "ANY";  return cproc_addr(proc_nr)->p_name;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -