UNIX v6的进程控制块proc结构体和user结构体
来源:互联网 发布:如何投诉淘宝平台小二 编辑:程序博客网 时间:2024/05/22 13:06
进程的状态信息和控制信息等由 proc 结构体和 user 结构体管理。每个进程各自会被分配1 组上述结构体的实例。 proc 结构体常驻内存,而 user 结构体有可能被移至交换空间。
proc 结构体
由 proc 结构体构成的数组 proc[]中的每个元素分别对应一个进程。proc 结构体管理着在进程状态、执行优先级等与进程相关的信息中需要经常被内核访问的那部分信息。举例来说,内核在(进程切换过程中)选择下一个将被执行的进程时,会首先检查所有进程的状态。这种需要遍历所有进程的情况在其他处理中也会经常出现。由于 proc[] 常驻内存,因此内核可以在很短时间内完成对所有进程状态的检查。假如proc[] 能够被移至交换空间,内核必须访问交换空间才能取得相应数据,这会导致花费过多时间并引起性能下降。proc[] 的长度决定了在系统中可以同时存在的进程上限。 proc[] 的长度由常量NPROC 定义,其值为50
struct proc{ char p_stat; char p_flag; char p_pri; char p_sig; char p_uid; char p_time; char p_cpu; char p_nice; int p_ttyp; int p_pid; int p_ppid; int p_addr; int p_size; int p_wchan; int *p_textp; } proc[NPROC]; /* stat codes */ #define SSLEEP 1 #define SWAIT 2 #define SRUN 3 #define SIDL 4 #define SZOMB 5 #define SSTOP 6 /* flag codes */ #define SLOAD 01 #define SSYS 02 #define SLOCK 04 #define SSWAP 010 #define STRC 020 #define SWTED 040
进程的状态
user结构体
user结构体用来管理进程打开的文件或目录等信息。由于内核只需要当前执行进程的user结构体,因此当进程被换出至交换空间时,对应的user 结构体也会被移出内存。
struct user{ int u_rsav[2]; int u_fsav[25]; char u_segflg; char u_error; char u_uid; char u_gid; char u_ruid; char u_rgid; int u_procp; char *u_base; char *u_count; char *u_offset[2]; int *u_cdir; char u_dbuf[DIRSIZ]; char *u_dirp; struct { int u_ino; char u_name[DIRSIZ]; } u_dent; int *u_pdir; int u_uisa[16]; int u_uisd[16]; int u_ofile[NOFILE]; int u_arg[5]; int u_tsize; int u_dsize; int u_ssize; int u_sep; int u_qsav[2]; int u_ssav[2]; int u_signal[NSIG]; int u_utime; int u_stime; int u_cutime[2]; int u_cstime[2]; int *u_ar0; int u_prof[4]; char u_intflg; } u; /* u_error codes */ #define EFAULT 106 #define EPERM 1 #define ENOENT 2 #define ESRCH 3 #define EINTR 4 #define EIO 5 #define ENXIO 6 #define E2BIG 7 #define ENOEXEC 8 #define EBADF 9 #define ECHILD 10 #define EAGAIN 11 #define ENOMEM 12 #define EACCES 13 #define ENOTBLK 15 #define EBUSY 16 #define EEXIST 17 #define EXDEV 18 #define ENODEV 19 #define ENOTDIR 20 #define EISDIR 21 #define EINVAL 22 #define ENFILE 23 #define EMFILE 24 #define ENOTTY 25 #define ETXTBSY 26 #define EFBIG 27 #define ENOSPC 28 #define ESPIPE 29 #define EROFS 30 #define EMLINK 31 #define EPIPE 32
错误代码
参考书籍
- Unix内核源码剖析
阅读全文
0 0
- UNIX v6的进程控制块proc结构体和user结构体
- Linux下的进程控制块task_struct结构体
- 进程控制块(PCB)的结构
- 进程控制块(PCB)的结构
- 进程控制块(PCB)的结构
- 进程控制块(PCB)的结构
- Linux下进程控制块task_struct结构体注释
- 进程控制块PCB结构 task_struct 描述
- 进程控制块PCB结构 task_struct 描述
- 进程控制块PCB结构 task_struct 描述
- 进程控制块PCB结构 task_struct 描述
- 进程控制块PCB结构 task_struct 描述
- 进程控制块PCB结构 task_struct 描述
- 进程控制块PCB结构 task_struct 描述
- 进程控制块PCB结构 task_struct 描述
- /proc传结构体的方法
- 【Linux】进程控制块PCD结构(tack_struct)
- Linux进程控制块PCB结构:task_struct 描述
- 极光征文 | 写写文章就能赢 Filco,岂不美滋滋
- 蓝桥杯 算法训练 数字三角形
- Swift中的协议-(协议基础-3.0)
- 极光征文 | 参赛附录说明,帮你确立选题
- linux 压缩/解压缩文件的命令
- UNIX v6的进程控制块proc结构体和user结构体
- Linux下mysql的远程连接
- mysql 2003 和10061错误原因
- linux的进程控制块task_struct
- bzoj 5084: hashit
- PHP判断一个点在矩形区域什么位置
- 洛谷1014题
- 关于java中很多人用get()和set()方法,而不用public的一点总结
- STM32的抢占优先级和响应优先级