【重要考点】
1. 进程与线程
进程与线程的基本概念
进程与线程的状态 转换 ——五态图,七态图
线程的实现: 内核级 用户级
进程与线程的组织和控制
进程间通信IPC: 共享内存、消息传递、管道
2.CPU调度与上下文切换
调度的基本概念
调度的实现
典型调度算法
上下文切换机制
3.同步与互斥
同步与互斥的基本概念
基本实现方法
锁、信号量、条件变量
经典同步问题
4.死锁
死锁的基本概念
形成死锁的四个条件
死锁的 预防,检测 ,避免,解除策略
2.1 进程与线程
1.进程的概念与特征
概念 :
引入进程的原因:
多道程序环境下,程序并发执行,程序失去封闭性,并具有间断性和不可再现性,进程的引入,更好的描述和控制了程序的并发执行,实现操作系统的
并发性和 共享性。( 回忆:操作系统四大特性:并发,异步,虚拟,共享。国外教材喜欢从 Concurrency ,Virtualization,persistence 三大特征入手,参考《操作系统导论》一书 )。
进程实体的结构:
一个进程的实体 ,称之为进程映像,它由:PCB ,程序段,数据段三部分构成。
进程实体是静态的,进程是动态的(一次运行、执行)。
进程映像反应了进程的某一时刻的状态。
[进程某一时刻的进程映像 ——图片来自王道]
进程的创建 实际上就是PCB的创建,进程的撤销,就是撤销进程的PCB。
进程的关键描述:
关于进程的定义,有很多种表述,但是我们记住这么一句话,面试和自己理解,都是最佳的:
进程是进程实体的运行过程,进程是系统进行资源分配调度的独立单位。
这些系统资源,可以是CPU时间片,可以是共享资源,可以是内存空间等等。
特征:
-
动态性
进程是程序的一次执行,它有这 创建、活动、暂停 终止等过程,具有生命后期,是动态产生变化和消亡的。进程的动态性是它的最基本特征。 -
并发性
多个进程可以同时存在于内存空间,可以对CPU等系统资源进行并发的使用。 -
独立性
指进程是一个能独立运行、独立获取资源和独立接受调度的基本单位,PCB是进程存在的唯一标识符,没有创建PCB的程序,都不能作为一个独立单位参与运行 -
异步性
由于进程的相互制约,使得各个进程按照各自独立的、不可预知的速度向前推进,异步性会导致程序执行结果的不可再现(每个准确的结果对多个进程来说,都需要一个固定的执行顺序,但是由于多个线程并发争抢资源,这个顺序往往就是由于异步性,导致不可确定)。
2.1.2 进程状态的转换
进程五态图
-
运行态:进程在处理机上运行。单处理机中,每一时刻只有一个进程在运行。
-
就绪态:进程获得了除了 处理机以外的一切所需资源,一旦得到虚拟机,可立刻运行。
由于系统中 可能有多个进程都处于就绪态,通常将他们排成一个队列,称为——就绪队列。 -
阻塞态 :又称 等待态。进程正在等待某一事件而暂停运行。注意一点:即使等待到资源、事件,也并不能直接运行,而是转换为就绪态。阻塞的进程因为阻塞的原因,会形成各种阻塞原因的阻塞队列。凡是请求某一设备而未获得满足的,在设备管理中的 DCT表中设备队列的队首指针,就是指向该请求队列的队首PCB。
-
创建态:进程正在被创建,尚未转为就绪态。
创建进程需要多个步骤:首先申请一个空白PCB,并向PCB中填入用于控制、管理进程的信息;然后为该进程分哦欸运行所需的必要的资源;最后把该进程转入就绪态,插入就绪队列。但是如果进程所需资源尚不能满足,则创建工作尚未完成,此时进程就是创建态。 -
终止态
进程正在从系统中消失,可能是正常结束,也可能是一场退出。进程需要结束运行时,系统先将进程置为终止态,再处理资源释放和回收工作。
【注意点】
进程从运行态 变为 阻塞态 是主动的行为,从 阻塞态 转换为 就绪态 是被动行为。
如何理解上面这句话?
运行态—>阻塞态:
进程请求某一资源(如外设)的使用和分配,或等待某一事件的发生(如IO操作的完成)时,它就从运行态转换为阻塞态。 进程以系统调用的形式请求操作系统提供服务,这是一种特殊的由运行用户态调用操作系统内核过程的形式。
简而言之: 进程 通过 请求 某一设备、资源,系统服务的过程,由于资源尚未准备好,请求未果,只能等待。请求的动作,是主动发生的。
一个问题:
进程A请求打印机,打印机正忙,我们知道进程此时是阻塞态。那么如果进程A请求到了打印机,打印机正在打印A的内容呢?此时进程是什么状态?
此时进程是 阻塞态。
这个问题涉及到设备管理,进程A发起打印请求,是通过CPU执行指令的过程中触发对IO设备的请求的,当这个请求被发出,CPU此时会把A的现场保存在PCB中,维持现场。此时A的PCB进入打印机的DCT表的等待队列中,A变为阻塞态。如果设备控制策略是中断式、DMA或通道的,CPU会继续执行其他进程,A进程等待打印机,如果是程序直接控制,则CPU会一直轮询设备控制器的状态寄存器。
当打印机资源就绪,会从控制寄存器中读到cpu对A的打印请求,当打印完成,会触发中断,让CPU保存当前·正在执行的进程,转而去把A进程读入内存,转为就绪态,根据CPU时间片资源或优先级,分配给A进程CPU执行权,让它继续执行。
//TODO 七态在调度篇补充
2.1.3 进程的组成
1.进程控制块 PCB
进程创建时,操作系统为其创建PCB,PCB会常驻内存,任意时刻可以存取。进程结束将其删除。
PCB是进程存在的唯一标志。
2.程序段
3.数据段