进程控制
操作系统内核
-
核心态:具有较高的特权能够执行一切命令,访问所有寄存器和存储区
-
用户态:具有较低特权,只能执行规定的命令访问指定的寄存器和存储区。
内核与原语
-
内核:
-
硬件的第一次延伸
-
系统将一些与硬件紧密相关的模块放在内核
- 中断处理
- 时钟处理
-
内核在执行某些操作时,往往是利用原语操作实现的。
-
-
原语:
- 原语由若干条指令构成、用于完成一定功能的过程。
- 原语是“原子操作”。即一个操作中的所有动作,要么全做,要么全不做。换言之,原子操作是一个不可分割的操作。
进程的创建与撤销
进程的创建
引入进程的事件
- 用户登录
- 新作业进入系统
- 提供服务
- 应用请求++++
创建原语要做的工作
-
申请空白PCB
-
为进程分配资源
-
初始化PCB
- 初始化进程描述信息
- 初始化处理机状态信息
- 初始化进程控制信息
-
将新进程插入就绪队列
进程的撤销
引起进程撤销的事件
- 进程正常结束
- 进程异常结束
- 外界干预
撤销原语要做的工作
- 查找撤销进程的PCB
- 若进程处于执行状态,终止之,并进行进程调度
- 若有子孙,予以终止
- 归还资源
- 从所在对列移出
进程的阻塞与唤醒
引起进程阻塞的事件
- 请求系统服务
- 启动某种操作
- 数据尚未到达
- 无新工作可做
阻塞原语要做的工作
- 停止进程的执行
- 将进程插入阻塞队列,改变进程在PCB中的状态
- 重新调度
唤醒原语要做的工作
- 将进程从阻塞队列解下
- 将进程插入到就绪队列
- 改变进程在PCB中的状态
进程的挂起与激活
挂起原语要做的工作
- 检查被挂起进程的状态
- 如被挂起处于就绪状态,将进程从就绪状态变为就绪挂起状态。
- 如进程处于阻塞状态,将进程从阻塞状态变为阻塞挂起状态
- 如果进程正在进行,将进程变为就绪挂起状态,并重新调度
激活原语要做的工作
- 检查被激活进程的状态
- 如进程处于就绪挂起状态,将进程从就绪挂起状态变为就绪状态
- 如进程处于阻塞挂起状态,将进程从阻塞挂起状态变为阻塞状态
- 若系统为抢占式系统,则进行进程调度
线程
线程的引入
进程有两个基本属性:
-
进程是拥有资源的独立单位
-
进程是独立调度和分派的基本单位
由于进程是资源的拥有者,因而在进程的创建、撤销和切换中系统必须为之付出较大的时间、空间开销。因此,系统中所设置的进程的数目不宜过多,进程切换的频率不宜过高。这就限制了进程并发程度的提高。
进程与线程的关系
线程的定义
线程是进程中的一个实体,是系统独立调度和分派的基本单位
线程的组成
每个线程有一个线程控制块(TCB),用于保存自己的私有信息。
线程由TCB和属于该线程的用户栈和核心组成。
进程模型
- 进程是资源的拥有者
- 线程不拥有资源,只有TCB及堆栈
进程和线程的比较
-
调度
- 线程调度快,需要空间小
- 进程因拥有资源,调度时因负担过重而缓慢
-
并发行
- 在引入线程的操作系统中不仅进程之间可以并发执行,一个进程中的多个线程之间亦可以并发执行。
-
拥有资源
- 进程是资源的拥有者
-
系统开销
- 进程的开销远大于线程切换的开销,线程的切换省去了资源的回收。
线程的实现
用户级线程
- 线程的创建、撤销和切换,都不利用系统调用来实现。线程与内核无关,内核也不知道线程的存在
内核级线程
- 依赖于内核,线程的创建、撤销和切换都由核实现。在内核中有线程控制块(TCB),内核根据TCB感知线程的存在,并对线程进行控制
组合的办法
- 由内核支持的用户线程。一个进程可以有一个或多个轻量级线程,每个轻量级线程由一个单独的内核线程来支持。
—笔记摘自课上PPT