导图社区 《计算机操作系统》第二章:进程的描述与控制
计算机操作系统的第二章:进程的描述与控制,属于重点章节,进程是计算机操作系统中分配资源的一个基本单位,在后面的章节后常用到它。
编辑于2020-09-22 15:54:44第二章 进程的描述与控制
2.1 前趋图和程序执行
引言
目的:探讨一下程序的执行顺序
进程:是处理机分配和控制的最小单位
2.1.1 前趋图
概念:指一个有向无环图,记作DAG,用来描述进程之间的执行先后顺序
前趋:指的是进程A必须在进程B之前结束,则A就是B的前趋,前趋关系关系表示为A→B
2.1.2 程序的顺序执行
支持顺序执行的系统:早期未配置OS的系统和单道批处理系统
特征
顺序性:指处理机严格按照程序规定的顺序执行,即每一个操作必须在下一个操作之前结束
封闭性:指的是封闭的环境,即程序运行时独占全机资源
导致系统资源利用率极低
可再现性:指只要程序执行的环境和初始条件相同,重复执行后都可获得同样的效果
2.1.3 程序的并发执行
支持并发执行的系统:多道程序批处理系统
特征
间断性:指并发执行的程序执行时总是“执行-暂停-执行”
失去封闭性:环境不再封闭,即并发程序共享所有资源
不可再现性:即使程序执行的环境和初始条件相同,但是由于并发程序执行的速度不同,重复执行后获得的结果不一定相同
2.2 进程的描述
2.2.1 进程的定义和特征
定义
进程控制块:一种数据结构,用来描述进程的基本情况和活动过程
进程实体:指程序段、相关数据段和PCB
进程:是进程实体的运行过程,是程序的一次执行,是系统资源分配和调度的一个独立单位
特征
1、动态性:即进程实体有一定的生命周期。程序只是一组指令的有序集合,并存放在某一介质中
2、并发性:多个进程实体能够同存内存中并发执行
3、独立性:进程实体是一个能独立运行、独立获得资源和调度的基本单位
4、异步性:进程按照异步方式运行,即各自独立、不可预知的速度运行
2.2.2 进程的基本状态及转换
基本状态
就绪状态(Ready):以获得所有需要的资源就差获得CPU就可以运行了
执行状态(Running):进程以获得CPU,正在运行中
阻塞状态(Block):运行的进程由于某些时间暂时无法继续执行
认识基本状态之间的转换
为满足PCB对操作完整性和管理添加的状态
创建状态:为进程申请空白PCB,填写控制和管理进程的信息,为进程分配运行的资源,然后就转入到就绪状态
终止状态:首先,等待操作系统善后处理,最后将PCB清零
2.2.3 挂起操作和进程状态的转换
挂起操作(Suspend)引入的原因:终端用户的需要、父进程的请求、载荷调节、操作系统的需要
挂起操作(Suspend)与激活操作(Active)下的进程状态转换
活动就绪(Readya)与静止就绪(Readys)
活动柱塞(Blockeda)与静止阻塞(Blockeds)
状态的变换
重要!!
2.2.4 进程管理中的数据结构
操作系统中用于管理控制的数据结构一般分为四类:内存表、设备表、文件表、进程表
PCB的作用:使一个在多道程序下不能运行的程序变为一个可以独立运行的解不了单位,一个可以并发执行的进程
1、作为独立运行单元的标志:处理机实际上通过感知PCB确认是否有进程
2、能够实现间断性运行:PCB能够用来保存和恢复CPU现场信息,确保间断性运行前后的环境是一样
3、存储进程管理的信息
4、存储进程调度的信息
5、实现同步与通信
PCB中存储的信息
1、进程标识符,用于唯一标识一个进程
2、处理机状态:即处理机的上下文,主要是处理机中寄存器的数据
3、进程调度(优先级、进程状态、调度其他信息、事件)
4、控制信息(程序和数据的地址、进程同步和通信机制、资源清单、联接指针)
所有PCB的组织方式:线性式、链接方式、索引方式
2.3 进程控制
2.3.1 操作系统的内核
处理机的执行的状态
用户态:目态,具有较低的执行等级特权
系统态(管态、内核态):具有最高的执行等级特权,能够执行一切指令
大多数OS至少支持的两大功能
1、支撑功能
中断处理和时钟管理:例如响应中断、请求中断程序、分配时间片等都需这两个
原语操作:指的若干条指令的组成,用于完成一定功能的过程
重点是:具有不可分割性
2、资源(进程、存储器、设备)管理
2.3.2 进程的创建(创建状态)
引起事件:用户登陆、作业调度、提供服务、应用请求
创建过程
1、申请空白PCB,为进程获得唯一的数字标识符
2、为进程分配运行所需的资源
3、初始化PCB,填写PCB需要的控制、调度等信息
4、如果进程就绪队列有空余的,就将其插入到就绪队列中
2.3.3 进程的终止(终止状态)
引起事件
1、正常终止:程序的最后附上Holt指令,当处理机读取到该指令就正常终止
2、异常终止:引发异常终止的事件很多,例如非法指令、试图读取非法空间等等
3、外界干预:用户或者父进程提出的终止要求
终止过程
1、根据终止进程的标识符,从PCB集合中检索出改进程的PCB
2、若终止进程还在运行,就立即终止,并让调度标志为真
3、若有子孙进程,也应将所有子孙进程关闭
4、归还资源给父进程或系统
5、撤销掉PCB
2.3.4 进程的阻塞和唤醒
阻塞过程
1、发生了阻塞事件后,调用block原语,从执行状态变为阻塞状态
唤醒过程
1、阻塞进程所期待的事件发生后,调用wakeup原语,从阻塞状态变为就绪状态
2.3.5 进程的挂起和激活
挂起过程
1、发生了引发挂起事件后,调用suspend原语,从活动状态变为静止状态
激活过程
1、发生激活进程的事件后,调用active原语,将指定进程激活,从静止状态变为活动状态
2.4 进程同步
进程同步机制:使并发执行的进程之间协调工作,保证多个进程能有条不紊的进行
2.4.1 进程同步的基本概念
制约
制约原因:多道程序系统的异步性会给系统造成混乱,造成结果的不可再现性,为防止这种现象,异步的进程收到两种限制
制约关系
1、间接相互制约关系:由进程间的资源引起(互斥使用)
2、直接相互制约关系:由进程间的相互合作引起(同步关系)
临界资源
概念:指一段时间中只允许一个进程使用该资源,与共享资源区分开来
进程访问临界资源的循环代码
1、进入区:用于做临界资源是否有人使用的检查代码
2、临界区:每个进程中访问临界资源的代码段
3、退出区:用于将临界区访问的资源的访问标识恢复为未访问标识
4、剩余区:其余部分的代码区
同步机制应该遵守的规则:空闲让进、忙则等待、有限等待、让权等待
有限等待:指对要求访问临界资源的进程,应保证在有限时间能进入自己的临界区,而不是“死等”
让权等待:当进程在有限时间无法进入临界区,就需要将立即将处理机释放,避免“忙等”
进程同步机制:硬件同步机制、信号量机制、管程机制
2.4.2 硬件同步机制
作用:解决进程互斥进入临界区的问题,当然也可以使用其他软件方式解决进程互斥
方法
1、关中断
2、利用Test-and-Set指令实现互斥
2.4.3 信号量机制
作用:进程同步的工具
信号量的发展
1、整型信号量
概念:用一个资源数目的整型量S
PV操作
wait(S)请求一个资源
signal(S)释放一个资源
2、记录型信号量
问题:整型信号量种,在P操作由S小于等于0后,容易造成死等现象,即处理机一直在做失败的测试,由此引入记录型信号量
引入:在整型信号量作为值的基础上,添加了一个进程表指针list来记录所有等待进程
记录的由来:采用了记录型的数据结构
PV操作
P操作加入了block原语,帮助将等待进程加入list指向的链表中
V操作中加入了wakeup原语,有了空闲资源时,将等待进程的队伍中等待进程唤醒
3、AND型信号量
引入:避免死锁问题而提出AND型
基本思想:将进程在整个运行过程中需要的所有资源,一次性的分配给进程,使用完后,一起释放出来
pv操作
在PV操作加入了and条件
4、信号量集
问题:wait(s)和signal(S)只能一次对信号量进行减一操作,遇到一次需要申请N个同种资源时,效率就会底下
PV操作:Swait(S,t,d...)和Ssignal(S,d...)
S表示现有的可用资源量,t表示资源分配的下限量,d表示本次分配出去的资源量
2.4.5 管程机制
问题:信号量机制虽然是很好的进程同步机制,但是每个要访问临界资源的进程都要有同步操作wait与signal,很容易由于操作顺序的问题,导致死锁,同时不利于OS的管理
管程的定义
管程的实现思想:利用共享数据结构抽象地表示系统中地共享资源
管程的概念:代表共享资源的数据结构以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序
进程互斥的实现:所有进程要访问临界资源时,都只能通过管程提供的过程来间接调用,而管程每次只允许一个进程进入管程
条件变量
问题:当一个进程调用了管程,在管程中被阻塞或挂起,在此期间,管程是无法被其他进程使用的
方法:使用条件变量
概念:一种抽象数据类型
其中为每个条件变量保存了一个链表,记录由该条件变量引起阻塞的进程
同时提供两个操作x.wait、x.signal
2.5 经典进程的同步问题
常见的:生产者-消费者问题、读者-写者问题、哲学家进餐问题
2.6 进程通信
引言
概念:进程之间的信息交换
分类
低级通信:效率低、通信对用户不透明
高级通信:效率高,能传输大量数据,通信透明
2.6.1 进程通信的类型
高级通信机制可归结为4类
1、共享存储器系统:相互通信的进程通过共享某些数据结构和共享存储区,通过这些空间通信
2、管道通信系统:指利用读进程和写进程建立一个通信的链接管道,即pipe文件
3、消息的传递机制:指通过封装原始的信息,再通过操作系统提供的一组通信命令来进行信息传递
4、客户机-服务器系统:主要用于网络环境的各种应用中通信
1、套接字类型
2、远程过程调用
2.6.2 消息传递通信的实现方式
1、直接消息传递系统(直接的):指发送进程利用OS提供的发送原语,直接把消息发送给目标进程
2、邮箱通信(间接的):指进程间的通信是利用邮箱进行的
send与receive操作
2.7 线程的基本概念
2.7.1 线程的引入
回顾进程的两个属性
1、资源的独立单位
2、可独立调度与分派的单位
线程的引入
问题:进程作为资源的拥有者,因此创建、撤销、切换进程带来的时空开销较大,限制了进程的数目,也就限制了并发程度
方法:将进程的两个属性分开,进程只作为资源的拥有者,而分配和调度的单位是线程,这样线程再进行创建、撤销、切换的时空开销就会变小
2.7.2 线程与进程的比较
1、调度的基本单位
传统的OS:进程时调度的基本单位
引入线程的OS:线程是调度的基本单位
2、并发性
都支持
3、拥有资源
进程:作为系统拥有资源的一个基本单位
线程:本身并不拥有系统资源,只有少量资源。同时,同一进程下的线程具有相同的地址空间,因为同一个进程下的线程基本上都是合作关系,所以需要共享空间
4、独立性
进程:进程之间都是独立的,因为设置了内存保护
线程:同一个进程下的线程独立性比不同进程下的线程独立性低的多
5、系统开销
在传统的OS中:进程带来的系统开销大
在引入线程的OS中,线程带来的系统开销小
6、并行性
传统的OS:单线程的进程,不管有多少处理机,该进程只可以运行在一个处理机上
在引入线程后的OS:同一进程的多个线程,可以并行的运行在多个处理机上
2.7.3 线程的状态和线程控制块
TCB与PCB没多大区别,状态基本一致
2.8 线程的实现
2.8.1 线程的实现方式
线程的类型
内核支持线程
内核支持线程是在内核空间中实现
对线程的操作:需要内核支持
调度单位:线程
优点
1、进程中的一个线程阻塞后该进程的其他线程能够继续在处理机上运行
2、支持多线程应用在多处理机下并行处理
缺点
1、对用户的线程切换而言,模式切换的开销较大,即需要从用户态转到核心态
用户级线程
用户级线程是在用户空间中实现
对线程的操作:不需要内核支持
调度单位:进程
优点
1、用户的线程切换,不需要转到内核空间
缺点
1、进程中的一个线程阻塞后该进程就相当于阻塞了
2、多线程应用即使在多处理机下,也只能利用一个处理机
组合方式
模式:一对一、多对一、多对多
2.8.2 线程的实现
线程的实现:都必须直接或间接地获取内核地支持
1、内核支持线程的实现(容易)
重点:内核在内核空间中分配了一块统一管理所有的TCB的任务数据区
2、用户级线程的实现(困难)
方法:通过中间系统来实现
1、运行时系统
实质:用于管理和控制线程的函数集合
用户级线程和内核的沟通:运行时系统作为用户及线程和内核之间的接口
注意:资源都是由内核控制的
1、在传统的OS中,进程利用系统调用来请求系统资源
2、在用户级线程中,通过将请求资源传送给运行时系统处理,运行时系统再利用系统调用和内核通信
2、内核控制线程LWP
实质;LWP可通过系统调用获得内核服务
过程:只要用户级线程运行将它链接到一个LWP上,此时它便具有内核支持线程的所有属性
线程池:就是LWP的缓冲池
2.8.3 线程的创建和终止
线程也是有生命周期
记住“由创建而产生、由调度而执行、由终止而消亡”
类似进程的创建与终止