UNIX V6内核源码剖析——进程

进程的概念

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    //在被跟踪时使用
View Code

 2. user结构体

user结构体用来管理进程打开的文件或目录等信息。

由于内核只需要当前执行进程的user结构体, 因此当进程被换出到交换空间时,user结构体也被换出。

原文地址:https://www.cnblogs.com/licongyu/p/4953554.html