2.1.1前趋图
1.前趋图是指有向无循环图用于描述进程之间执行的先后顺序
在前趋图中,把没有前趋的节点称为初始节点(P1),把没有后继的节点称为终止节点(P9);
![](https://i-blog.csdnimg.cn/blog_migrate/480c4e62286ad22a7c4e9de59ee5c5e1.png)
前趋图中是不允许有循环的,否则必然会产生无法实现的前趋关系
程序执行的特征:
顺序性:严格按照程序规定执行语句;
封闭性:程序执行时独占全机资源;
可再现性:只要程序执行时的环境和初始条件相同,重复执行程序,都可获得相同的结果;
2.1.3程序并发执行
并发执行时的前趋图
I1→C1→P1;I2→C2→P2;
(I为输入;C为计算;P为输出)
(图中虚线为正在运行的三个程序)
![](https://i-blog.csdnimg.cn/blog_migrate/397be0f785c5a1bad53d23d77fc372a4.png)
并发执行的特征:
间断性 相互制约关系将导致并发程序具有"执行→暂停→执行"间断性的活动规律;
失去封闭性 系统中存在多个并发执行的程序时,系统中的资源将共享,资源中的状态由程序决定,所以程序与程序之间受资源影响,就缺失了封闭性;(非官方)
不可再现性 程序在并发执行时,失去封闭性会导致失去可再现性;
2.2进程的描述
2.2.1 进程的定义与特征
进程控制块(PCB) 使参与并发执行的每个程序都能独立地运行的一个专门的数据结构
进程是程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位
(PS:进程的定义还有很多种,这里只记录较不同的一种)
进程同程序的比较
进程是动态的,程序是静态的;(最根本的)
进程是暂时的,程序是永久的;
进程和程序的组成不同:进程是由程序,数据和进程控制块三部分组成的;
进程和程序的对应关系:同一个程序可以对应多个进程,同一个进程也可以对应多个程序;
进程的特征
结构特征(进程实体):由程序段,数据段,进程控制模块三部分组成
动态性:进程的实质是程序的一次执行过程;
并发性:多个进程可同存于内存中,能在同一段时间内同时运行;
独立性:独立运行的基本单位,独立获得资源和和调度的基本单位
异步性:各进程按各自独立的不可预知的速度向前推进
进程三种基本状态
就绪状态
执行状态
阻塞状态
三种基本状态的转换图
![](https://i-blog.csdnimg.cn/blog_migrate/d701c7b09f8efcebac777c1bd506dc7c.png)
运行(执行)只能有一个;
就绪可以有N个;
阻塞可以有M个;(M不等于N)
五种基本状态及其转换状态(后续补充原语)
![](https://i-blog.csdnimg.cn/blog_migrate/57b93b0d5d45102baadf74e36cd78bd3.png)
2.2.3挂起操作与进程状态的转换
挂起操作:是将进程从内存移至外存(只移程序段和数据段,不移PCB);
![](https://i-blog.csdnimg.cn/blog_migrate/fd3ab1715af1d5f241d76f8fa345f701.png)
引入挂起操作的步骤:
活动就绪→静止就绪;
活动阻塞→静止阻塞;
引起激活操作的步骤:
静止就绪→活动就绪;
静止阻塞→活动阻塞;
PCB介绍及其特征和作用
PCB是进程控制模块(process control block)的简称
PCB是进程存在的唯一标准
(PCB相当于一个载体运行完后变为空白来接受下一个程序(相当于水车的漏斗转一圈的过程中由空变为实在变为空))
PCB的作用:
作为独立运行基本单位的标志
实现间断性运行方式
提供进程管理所需的信息
提供进程调度所需的信息
实现与其他进程的同步与通信
PCB中的信息
![](https://i-blog.csdnimg.cn/blog_migrate/9b86dd9d4a4ce47194c0b8e026e86568.png)
优先级作为进程调度参考优先级高者优先
PCB的组织方式
线性方式
链式方式
索引方式(可以随意查找PCB的地址)
2.3进程控制介绍
1.进程控制:是进程管理中最基本的功能,它用来创建和撤销进程,并对进程在整个生命周期中各种状态之间的转换进行有效控制
进程控制是由操作系统的内核通过原语来实现的.
原语:系统状态下执行某些具有特定功能的程序段称为原语;操作系统中有一组常称为特殊系统调用的程序原语,它不能被系统中断。
(原语的执行具有原子性,执行时不可分割)
进程的控制主要包括:
创建进程,阻塞进程,唤醒进程,挂起进程,激活进程,终止进程,撤销进程;
2.进程图:描述进程关系的有向树
3.进程的创建:
申请空白PCB;
为新进程分配资源;
初始化进程控制块;
将新程序插入就绪队列;
创建新进程通过进程创建原语creat()来完成;
进程创建原语的主要任务是进程创建控制块PCB;
创建原语的流程图(创建进程的流程图(自认为))
最重要的是是否有空PCB?
![](https://i-blog.csdnimg.cn/blog_migrate/1365d4acd88870791b5188f230fc5921.png)
2.3.2进程终止
实质是回收PCB;
引起进程终止的事件
正常结束
异常结束
超时终止,终止时间超过预计时间
内存不足,无法为进程分配所需的内存空间
越界访问(预先申请了一块内存,但在使用这块内存的时候超出了申请的范围从而引发越界。)(超过了预期内存)
企图使用未被允许使用的数据,或操作方式错误
计算错误,如除零,或企图存储硬件设备的最大数
超时等待某事件发生
I/O失败,如找不到文件,或多次重试仍无法读写文件,或无效操作;
无效指令,企图执行不存在的指令
特权指令,企图执行特权指令
数据类型不符,或未初始化
外界干预
操作员或OS干预,如发生死锁
父进程请求: 子进程完成父进程所要求的任务,父进程便可结束子进程
父进程终止:父进程终止,子进程也应终止
进程的终止
OS通过调用进程终止原语完成进程的终止
第一步:根据被终止进程的标识符,从PCB集合中查找对应进程控制块并读出该进程的状态
第二步:若进程还有子孙进程,应将其所有子孙进程终止,以防止他们成为不可控的
第三步:将该进程所占的资源全部释放(还给父进程或系统),释放进程控制块(若该进程为执行态,要进行进程调度)
![](https://i-blog.csdnimg.cn/blog_migrate/bfe887f9910db4bd5c4079fd6c4d6194.png)
2.3.3进程的阻塞与唤醒
1.进程的阻塞
进程的阻塞是进程的主动行为,通过阻塞原语block()来完成;
阻塞具体的操作过程
停止进程的执行
将其状态改为阻塞状态
把他的PCB插入相应的阻塞队列
转调度程序进行重新调度
![](https://i-blog.csdnimg.cn/blog_migrate/297006646b892601e734ebfe9df91f33.png)
2.进程的唤醒
唤醒的具体操作过程
在等待进程中移出该进程的PCB
将其置成就绪状态
把他插入就绪状态
![](https://i-blog.csdnimg.cn/blog_migrate/b32b955a9c89bb6d7e4b81cdc5348b01.png)
2.3.4进程的挂起与激活
1.挂起:系统通过挂起原语suspend()将指定进程挂起
挂起具体的操作过程
检查被挂起进程的状态,如果处于活动就绪状态转换为静止就绪状态;如果处于活动阻塞状态转换为静止阻塞状态;
将PCB复制到指定的内存区域供用户和父进程考查,若挂起进程正在执行,则转调度程序进行重新调度;
2.激活:系统利用激活原语active()将指定进程激活
激活具体的操作过程
若进程处于静止阻塞状态,将其转换为活动阻塞状态,否则转换成活动就绪状态;
若进程转换成活动就绪状态,而系统又采用抢占调度策略,则应检查该进程是否有权抢占CPU,若有则应进行进程调度;
具有原语的进程状态图
![](https://i-blog.csdnimg.cn/blog_migrate/fd0591b11c9dd77080dfb4f5e40b4fcd.png)
2.4进程同步
进程同步是指对多个相关进程在执行次序上进行协调
进程同步的主要任务是使并发执行的诸进程之间能有效的共享资源和相互合作,从而使程序的执行具有可再现性;
两种形式的制约方式:
直接相互制约关系和间接相互制约关系
直接:同步关系,相互合作关系;
间接:互斥关系,资源共享关系;
临界资源:一次仅允许一个进程访问的资源(可以是硬件也可以是软件),并发程序对临界资源必须进行限制防止出错(车票等);
临界区:进程中访问临界资源的代码称为临界区
互斥的实质就是同步,(互斥是同步的一种特殊形式)
实现互斥的同步机制的四则准则
空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态应允许1个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源;
忙则等待:但已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问;
有限等待:对于要求访问临界资源的进程,应保证其在有限的时间内不能进入自己的临界区,以免陷入"死等"状态;
让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入"忙等"状态;(只释放CPU不释放资源:转换到阻塞状态)
2.4.2信号量机制(不是很懂就直接放PPT了)
整型信号量(没做到"让权等待")
![](https://i-blog.csdnimg.cn/blog_migrate/d7b8a3074862deb88101ddb343a41ca9.png)
记录型信号量
![](https://i-blog.csdnimg.cn/blog_migrate/00119bac1447d0e22d433dd5c8401e53.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f96809867c9aebb814138000c5ee9fdc.png)
2.6进程通信
低级通信(只传送少量信息)
高级通信(大量数据)
2.6.1进程通信的类型(高级通信)
共享存储器系统
相互通讯的进程通过共享数据结构和共享存储区进行通讯
基于共享数据结构的通信方式
基于共享存储区的共享方式
2.信息传递系统
直接通信方式(发送进程可直接把消息发送给目标进程)
间接通信方式/信箱通信(进程间发送消息通过信箱进行,消息可理解为信件)
3.管道通信系统(pipe)(管程)
管道的实质是一个共享文件
管道通信系统必须提供三方面的协调能力:互斥,同步和确定对方是否存在
![](https://i-blog.csdnimg.cn/blog_migrate/fc6538da580cc67dfeeddfc6b40a0c5f.png)
2.7线程
线程是比进程更小的基本单位
2.7.1线程的引入
引入进程是为了使多个程序能够并发执行以提高资源利用率和系统吞吐量
引入线程是为了减少程序在并发执行时所付出的时间和空间开销,以使操作系统(OS)具有更好的并发性
进程是程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位
线程是进程中的一个实体,是被系统独立调度和分派的基本单位;
进程的两个基本属性
进程是一个可拥有资源的独立单位
进程同时又是一个可独立调度和分派的基本单位
线程被称为轻型进程或进程原,传统进程被称为重型进程
2.7.3线性的状态和线性控制块
线程运行的三状态:
执行状态
就绪状态
阻塞状态
线程控制块TCB
如同每一个进程有一个进程控制块一样,系统也为每一个线程配置了一个线程控制块TCB将用于控制和管理线程的信息记录在线程控制块中;
多线程操作系统(OS)的属性
进程是一个可拥有资源的基本单位
多线程可并发执行
进程已不是可执行的实体
2.7.4线程的实现
1.内核支持线程(KST)(大多数OS)都支持内核支持线程
主要优点:
在多处理器系统中,内核能够同时调度同一进程的多个线程并执行
如果进程中一个线程被阻塞了,内核可以调度进程中的其他线程占有处理器运行,也可以运行其他进程中的线程
内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小;
内核本身可以采用多线程技术,可以提高系统的速度和效率
主要缺点
对用户的线程切换而言,其模式切换开销较大,而线程调度和管理是在内核实现的,系统开销大
2.用户级线程(一个线程阻塞会阻塞整个进程)
用户级线程ULT仅存于用户空间中;
优点:
线程不需要切换到内核空间,节省了模式切换的开销
调度算法可以是进程专用
用户级的实现与操作系统平台无关
缺点:
系统调用的阻塞问题
多线程应用不能利用多处理机进行多重处理的缺点
第二章习题(含同步)
由于等待某些事件发生,进程主动进入阻塞状态。
我的答案错误
设与某资源关联的信号量初值为3,当前值为-1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是( )。
A、0、1
B、1、2
C、2、0
D、1、0
我的答案D
当已有进程进入自己对应于某临界资源的临界区时,所有企图进入该临界资源所对应临界区的进程必须等待,这称之为( )。
A、空闲让进
B、让权等待
C、忙则等待
D、有限等待
我的答案C
下列关于线程的叙述中,正确的是( )。
A、每个线程有自己独立的地址空间
B、线程可以独立执行
C、进程只能包含一个线程
D、线程之间的通信必须使用系统调用函数
我的答案A
进程之间的同步,主要源于进程之间的资源竞争,是指对多个相关进程在执行次序上的协调。
我的答案正确
用户级线程执行时,同一进程不同线程的切换不需要内核支持。
我的答案正确
在引入线程的系统中,进程仍是资源分配和调度的基本单位。
我的答案错误
下列选项中不属于进程高级通信的是( )。
A、管道通信
B、共享存储器系统
C、消息传递系统
D、信号量机制
我的答案D
进程的运行具有异步性,因此进程执行的速度不能由进程自己控制。
我的答案正确
在多个用户级线程对应一个内核支持线程的模型中,当一个多线程进程中的某个线程被阻塞后,( )。
A、该进程的其他线程仍可继续运行
B、整个进程都将阻塞
C、该阻塞线程将被撤销
D、该阻塞线程将永远不可能再执行
我的答案A
信号量是解决进程同步与互斥问题的唯一手段。
我的答案错误
( )不是在创建进程中所完成的工作。
A、为被创建进程建立一个PCB
B、获取初始状态参数填入PCB
C、把PCB分别插入就绪队列和进程家族中
D、为进程调度CPU使用权
我的答案D
进程和程序最根本的区别是( )
A、对资源的占有类型和数量
B、进程是动态的,程序是静态的
C、是否能够并发地在处理机上运行
D、进程规模小,程序规模较大
我的答案B
( )操作不是wait操作可完成的。
A、为进程分配处理机
B、使信号量的值变小
C、可用于进程的同步
D、使进程进入阻塞状态
我的答案A
关于记录型信号量机制,如下说法不准确的是( )。
A、记录型信号量的队列分量用来表示因申请对应资源失败而受阻的进程阻塞队列
B、记录型信号量的signal操作不仅执行资源的释放,还会唤醒相应进程阻塞队列的队首进程
C、记录型信号量的wait操作在进程申请对应资源未果的情况下,将把当前进程插入到相应的进程阻塞队列
D、记录型信号量的整型分量用来表示系统当前可用对应资源的数量
我的答案D
一段时间内仅允许一个进程访问的空间称为临界区。
我的答案正确
中断是OS内核最基本的功能。
我的答案错误
下面关于PCB的说法中,错误的是( )
A、每个进程只有1个PCB
B、1个PCB只对应1个进程
C、PCB位于内存中
D、PCB的索引组织方式比链式组织方式好
我的答案A
关于整型信号量机制,下列说法不正确的是( )。
A、整型信号量用来表示系统当前可用对应资源的数量
B、整型信号量机制无法满足空闲让进的准则
C、整型信号量机制无法满足让权等待的准则
D、整型信号量机制提供有资源申请操作和资源释放操作,也即PV操作
我的答案B
下列特性中,哪一个不是进程的特性( )
A、异步性
B、并发性
C、静态性
D、动态性
我的答案C
为使进程由静止就绪变为活动就绪,应利用( )原语。
A、wakeup
B、suspend
C、active
D、block
我的答案C
PV操作是对信号量执行减1操作,意味着释放一个单位资源,加1后如果信号量的值小于等于零,则从等待队列中唤醒一个进程。
我的答案错误
对于管程而言,为区别不同的等待原因而引入了( )的概念,并分别为之设立相应的进程等待队列。
A、信号量
B、互斥锁
C、条件变量
D、线程
我的答案B
下列进程状态的转换中,哪一个是不正确的( )
A、就绪->运行
B、运行->就绪
C、就绪->阻塞
D、阻塞->就绪
我的答案B
某个运行中的进程要申请打印机,它将变为( )
A、就绪态
B、阻塞态
C、创建态
D、撤销态
我的答案A
并发进程是指( )
A、不可中断的进程
B、可并发执行的进程
C、可同一时刻执行的进程
D、可同时执行的进程
我的答案B
如果某一进程在运行时,因等待数据输入,此时将脱离运行状态,进入( )
A、就绪状态
B、阻塞状态
C、挂起状态
D、终止状态
我的答案A
进程同步机制应遵循让权等待准则,故当一个进程不能进入自己的临界区时,应当释放( )。
A、内存空间
B、处理器
C、I/O设备
D、外存空间
我的答案A
操作系统中有一组常称为特殊系统调用的程序( ),它不能被系统中断。
A、初始化程序
B、原语
C、信号量
D、控制模块
我的答案
B
一个程序对应一个进程。错误