MEMO
- PCB块:进程存在唯一唯一唯一!标志
- 程序静态,进程动态
- 每个进程有
UID:用户ID,进程创建者的ID;通常大于500
EUID:有效用户ID,表示进程对文件资源的访问权限;- setuid:对二进制文件执行setuid,任何用户执行时都以setuid程序文件所属用户权限去执行;(用户uid执行passwd命令时,euid=root ID=0)
- PC程序计数器: PC总是指向下一条将要取指的指令地址。CPU总是按照PC的指向对指令序列进行取指、译码和执行。PC决定了程序运行流向。
进程
一次只有一个进程在一个处理器上运行。
- PCB块:包含①进程状态(5种)、②进程编号、③PC程序计数器、④寄存器、⑤内存界限、⑥打开文件列表……还有CPU调度信息内存管理信息、记账信息(CPU时间、等等)、I/O状态信息(分配到的I/O设备列表、打开文件列表)
- 进程的内存结构:①栈(向低地址生长)、②堆(向高地址生长)、③数据段(全局变量)、④文本段/代码段、⑤PC程序计数器的值
创建进程
- 申请空白PCB块
- 分配资源
- 初始化PCB块
- 加入ready队列
进程状态切换
-
运行态:正在占用CPU运行ing;
-
就绪态:在ready就绪队列中排队等待CPU
-
阻塞态:e.g.在等待I/O
-
创建态:new正在创建
-
终止态:进程完成执行。
-
就绪态-->运行态:被CPU调度,获得CPU资源开始运行;
-
运行态-->就绪态:时间片用完、更高优先级进程抢占
-
运行态-->阻塞态:主动、请求某一资源、等待I/O操作完成
-
阻塞态-->就绪态:被动I/O完成、中断结束
CPU上下文切换/进程间CPU切换
上下文切换:从进程A切换到进程B运行;
PCB信息:寄存器值、进程状态、内存管理信息等等
-
上下文切换流程:A状态保存、B状态恢复
- 进程0running,挂起进程0:保存状态到PCB0
- 进程1执行,从PCB1加载状态
- CPU跳转到PCB1的PC指向位置执行
-
进程间CPU切换
- 进程0running,中断or系统调用;
- 挂起进程0:保存状态到PCB0;
- 进程1执行,从PCB1加载状态;
- 中断or系统调用;
- 挂起进程1:保存状态到PCB1;
- 进程0恢复执行,从PCB0加载状态;
进程调度
调度队列
- 作业队列:所有进程
- 就绪队列;
- 设备队列:每个设备都有自己的设备队列,e.g.I/O设备队列:等待I/O操作。
进程调度选择
调度器/调度程序执行。
- 长期调度程序(作业调度):从缓冲池选择进程加入内存。选择合适的I/O、CPU密集型进程组合,使得V创建进程 = V进程离开系统
频率低 - 短期调度程序(CPU调度程序):从ready队列中取出一个进程,并分配CPU。
频率高。 - 中期调度程序(内存调度):swap 降低多道程序程度,提高内存利用率、吞吐量挂起一些暂时不能运行的进程到外存等待(阻塞态),后面再调回来加入ready队列(就绪态)。