一.基本概念
1.进程:数据集程序在一个数据集执行的过程。 #组成:程序代码,数据集栈,
进程控制块(PCB)——是进程存在的唯一标识,OS根据PCB的属性控制进程。
2.上下文:进程运行时CPU的寄存器数据集合(现场)。包括了用户可见寄存器和控制/状态寄存器。3.分派器(即进程调度程序):调度时发生上下文切换:保存旧进程的上下文到它的PCB,从新进程的PCB恢复它的上下文到寄存器。即选择并调度一个进程,使之占用CPU运行。
!#引入进程,由于实现了并发执行和资源共享,可提高
资源利用率和
吞吐率的好处,但却增加了系统的
时间和
空间开销。
二.进程的创建和终止
1.
进程创建:OS为进程建立PCB,分配内存空间。 #导致进程创建的原因:
①新的批处理作业:作业提交后,开始运行时创建进程。
②交互登录:新用户登录和接受用户命令时创建进程。
③OS提供服务:如控制打印,网络通信等服务进程。
④父进程派送子进程:父进程请求创建子进程。
#创建的步骤
①给新进程分配一个新PCB和唯一PID。
②给进程分配内存空间(代码,数据,栈)。
③初始化PCB:各属性取默认值或所请求的值。在UNIX中,子进程PCB基本复制自父进程PCB。
④将PCB放置就绪队列或就绪挂起队列。
⑤创建其他数据结构:如记账,日志等。
2.
进程终止:回收内存,释放资源,销毁PCB。 #导致进程终止的原因:
①进程正常运行完毕
②用户或OS干预
③父进程请求或父进程已终止
④运行时发生的各种故障和错误
3.
五状态模型 3.1
进程状态- 新建new:进程正被创建。分配内存后将被设置为就绪态。
- 就绪ready:进程已得到除CPU外的其它所需资源。
- 运行running:进程指令正在被执行。
- 阻塞(等待)blocked:进程正等待资源或某事件发生。
- 退出exit:进程已经正常或异常结束。回收资源,善后。
3.2进程队列
①就绪队列:所有就绪进程按FCFS或优先级顺序排队。 ②等待(阻塞)队列:每一种等待时间对应于一个队列。
- OS中PCB的数量是固定或不固定的,但总是有限的。
3.3 被挂起的进程
- 挂起的根本原因:内存不足,不得不把部分进程交换到磁盘。
- 两种挂起态:就绪挂起态、阻塞挂起态:外存就绪,阻塞态。即由于内存有限,将原位于内存的就绪/阻塞进程(代码数据)换出到外存(磁盘)上。
- 解除挂起:当挂起进程优先级高或内存空间足够时,把位于磁盘的挂起进程(代码数据)换入到内存。
!#PCB始终在内存中。
四.进程描述
4.1操作系统的控制结构 OS构造并维护所管理的每个实体的信息表,4类
- 内存表:跟踪内存(实存)和外存(虚拟内存)。
- I/O表:管理I/O设备和通道。
- 文件表:文件属性
- 进程表:PCB集合
4.2进程控制结构PCB
- PCB:进程属性的集合。
- OS进程表中包含了所有进程的PCB
- 创建新进程时,分配进程表中的一个空闲PCB,读写属性。
PCB的索引(PID)唯一地标识该进程。PSW(程序状态字寄存器):指明CPU当前特权级别、终端屏蔽码,(中断优先级)等。
五.进程控制
5.1CPU有两种执行模式: ①系统态:只能执行非特权指令。 ②用户态:可以执行所有指令,使用所有资源以及改变CPU状态。
- 特权指令:在系统态下执行的指令(OS内核使用)。
- 非特权指令:用户态下执行(用户程序)。
?#CPU何时从用户态到系统态?
- 执行系统调用(即内核代码,由OS提供服务)时。
- 发生终端或异常时,执行中断处理程序。
?#CPU何时从系统态到用户态?
- 系统调用或终端处理完毕后,执行IRET(中断返回)指令,恢复原进程的PSW,回到用户态。
?#注意
5.2fork()在unix中,父进程通过系统调用fork()创建子进程。
- 父、子有程并发执行,且父子共享父进程的所有资源。
- 子进程复制父进程的地址空间,甚至有相同的正文段和程序计数器PC值。
- 写时复制Copy_on_Write技术可减少不必要的复制:fork时父子共用父空间,当一方试图修改时才复制。
!!#fork()有两个返回值:向父进程返回子进程的PID,向子进程返回0