进程的概念
1. 什么是进程
2. 进程的并行执行
3. 进程的运行状态
4. 用户模式和内核模式
cpu具有2种模式——内核模式和用户模式,通过PSW来切换。
切换时, 映射到虚拟地址的物理内存区域也随之切换(内存映射的切换由MMU来完成)。
在执行系统调用等过程,可能出现内核空间和用户空间交换数据的情况,为此,系统提供了以下在用户空间和内核空间读写数据的函数:
fubyte()、fuibyte()、fuword()、fuiword()
subyte()、suibyte()、suword()、suiword()
5. 交换处理
内存和交换空间之间的换入(swap in)换出(swap out)处理。
proc结构体和user结构体
proc结构体常驻内存;user结构体可能被移至交换空间。
1. proc结构体
数组proc[],每一个元素对应一个进程。
proc结构体管理进程状态、优先级等进程信息中需要经常被内核访问的那部分信息。
proc[]的长度有NPROC定义。
1 #define NPROC 50 2 3 struct proc { 4 char p_stat; //状态,等于NULL表示位数为空 5 char p_flag; //进程标志变量 6 char p_pri; //优先级 7 char p_sig; //接收到的信号 8 char p_uid; 9 char p_time; //在内存或交换空间的时间 10 char p_cpu; //cpu占用累积时间 11 char p_nice; //优先级补正系数 12 int p_ttyp; //正在操作进程的终端 13 int p_pid; 14 int p_ppid; 15 int p_addr; //数据段物理地址 16 int p_size; //数据段长度 17 int p_wchan; //进程休眠原因 18 int *p_textp; //使用的代码段 19 } proc[NPROC]; 20 21 /* stat codes */ 22 #define SSLEEP 1 //高优先级休眠状态,优先级为负数 23 #define SWAIT 2 //低优先级休眠状态,优先级为0或正数 24 #define SRUN 3 //可执行状态 25 #define SIDL 4 //进程生成中 26 #define SZOMB 5 27 #define SSTOP 6 //等待被跟踪(trace) 28 29 /* flag codes */ 30 #define SLOAD 01 //进程图像处于内存中 31 #define SSYS 02 //系统进程,不会被swap out 32 #define SLOCK 04 //进程调度锁 33 #define SSWAP 010 //进程图像已被换出至交换空间 34 #define STRC 020 //处于被跟踪状态 35 #define SWTED 040 //在被跟踪时使用
2. user结构体
user结构体用来管理进程打开的文件或目录等信息。
由于内核只需要当前执行进程的user结构体, 因此当进程被换出到交换空间时,user结构体也被换出。