导图社区 进程管理
计算机考研操作系统第二章进程管理,内容有进程、线程、处理剂调度、进程死锁、进程同步等方面,希望对你有所帮助!
编辑于2021-12-08 21:43:56进程管理
进程
概念
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。(不同于程序)
PCB:用来描述进程的基本情况、运行状态
特征
动态性
并发性
独立性
异步性:进程按各自独立的、不可预知的速度运行,会导致结果的不可再现性,后期要引入进程同步机制
结构性
状态与装换
运行、就绪、阻塞、创建、结束
状态的转换
进程控制
创建:1.进程可以创建自己的子进程
1.分配唯一标识,申请1个空白PCB
2.分配资源(若资源不足则出于阻塞态)
3.初始化PCB(标志信息、状态信息、处理机控制信息、设置优先级……)
4.等待调度或插入就绪队列
终止:正常结束、异常结束、外界干预
阻塞、唤醒
进程切换(注意切换与调度的区别)
调度:决定资源分配给哪个进程的行为(决策)
切换:实际分配的行为
进程的组织(结构)
进程控制块PCB
进程描述信息(进程标识符【身份证号】、用户标识符
进程管理信息(当前状态、优先级……)
资源分配清单(有关地址空间的状况、所打开的文件列表、使用的输I/O设备信息)
处理机相关信息(各寄存器的值)
程序段(能被进程调度到CPU中运行的程序代码段)
数据段(对应程序加工处理的原始数据、程序执行时产生的数据
进程的通信
共享存储(对共享空间的读/写操作来实现)分为基于数据结构的和基于存储区的
消息传递(分为直接通信和间接通信)
管道通信
管道:用于连接1个读进程和1个写进程,以实现两进程之间通信的共享文件
管道机制必须提供的3个能力:互斥、同步、确定对方存在
线程
概念
“轻量级进程”、基本的CPU执行单元、程序执行流的最小单元
组成
线程ID、程序计数器、寄存器集合、堆栈
特点
是进程中的1个实体,是被系统独立调度和分派的最小单位
自己不用有系统资源
可与属于同一个进程的其它线程红线该进程拥有的全部资源
同一进程中的多个线程之间可以鬓发执行
属性
每个线程拥有唯一的标识符和线程控制块
实现方式
用户级线程:创建、撤销、切换等都由应用程序完成
内核级线程:管理工作由内合完成
多线程模型
多对一
一对一
多对多
处理剂调度
概念
从就绪队列中按照一定的算法,选择一个进程并将处理机分配给他运行,实现进程的并发执行
调度的层次
作业调度(从外存上挑选1或多个个处于后备状态的作业,给他分配内存、I/O设备等资源
中级调度(将暂时不能运行的进程调至外存等待【挂起态】,当其具备运行条件且内存有空闲时,将其插入内存的就绪队列【就绪态】)
进程调度(按照某种方法策略,从就绪队列中挑选1个进程,把处理机分配给他)
调度时机
不能进行调度和切换的时机
1.在处理中断的过程中 2.进程在临界区中 3.其它需要屏蔽中断的原子操作过程中
应当进行调度和切换的时机
1.发生引起调度条件且当前进程无法继续运行时 2.中断/自陷处理结束后,返回被中断进程的用户态程序执行现场前
调度方式
非剥夺式
剥夺式
调度的基本准则
CPU利用率(尽可能使CPU处于“忙”的状态
系统吞吐量(单位时间内CPU完成的作业数量)
周转时间T
T=作业完成时间-作业提交时间
平均周转时间=(作业1周转时间+……+作业n周转时间)/n
带权周转时间Td=T/作业实际运行时间
平均带权周转时间=(Td1+Td2+...+Tdn)/n
等待时间=进程处于等待处理机的时间总和(衡量调度算法优劣常常只需要考虑这个)
响应时间=用户提交请求到系统首次做出响应的时间
典型调度算法
先来先服务FCSF
短作业优先SJF
优先级调度
非剥夺式
剥夺式
静态优先级
动态优先级
高相应比优先
时间片轮转
多级反馈队列
多个就绪队列,从前至后优先级依次降低
各个队列中进程执行时间片大小不同,从前至后时间片一次增长
新进程进入后首先将它放在1级队列末尾,按照FCFS进行调度,若1个时间片完后尚未完成运行,则移入第2级队列继续以相同的方式进行调度,以此类推)
仅当第1级队列运行完毕后为空之后,调度程序才对第2级队列的进程进行调度
进程同步
基本概念
临界资源(1次只允许1个进程使用的资源)
进入区
临界区
退出区
剩余区
同步
2个或多个进程之间存在相互制约、相互依赖的关系
互斥
2个进程存在单独占用同类资源的关系,1个资源占用,另一个资源就必须等待
同步机制
1.空闲让进
2.忙则等待(临界区已有进程,其他进程必须等待)
3.有限等待(等待时间有限)
4.让权等待(当进程无法进入临界区,则必须释放CPU)
临界区互斥基本方法
软件实现法
单标志法
公用整形变量turn=0用于表示进入临界区的进程编号
双标志先检查法
设置数据flag[i],值为false表示Pi未进入临界区,值为true,表示Pi进入临界区
双标志后检查法
进入之前先将自己的标志(flag[i])设置为TRUE,再检查对方的标志(flag[j])若对方的标志为TRUE,则等待,否则进入
Peterson's Algorithm
每个进程先设置自己的标志后再设置turn标志,而后同时检测另一个进程的状态标志(flag[j])和不允许进入标志turn
硬件实现法
中断屏蔽法
硬件指令法
信号量
是一种解决互斥同步问题的机制
只能被两个标准原语【wait(S)和signal(S)】访问(P/V操作)
原语是一种可完成某种功能且不可分割、不可被中断执行的操作序列
信号量分类
整形信号量(一般表示空闲临界资源的数量)
记录型信号量(1个用于代表资源数目的整形变量value+1个进程链表)
利用信号量实现的功能
同步
互斥
前驱关系
怎样分析进程之间同步和互斥的关系
管程
定义
代表共享资源的数据结构
以及由对该共享数据结构实施操作的1组过程所组成的资源管理程序
组成
管程名称
局部于管程内部的共享结构数据说明
对该数据结构进行操作的一组过程
对局部于管程内部的共享数据设置初值的语句
特征
把对共享资源的操作封装起来
每次只允许1个进程进入管程,实现进程互斥
经典进程同步问题
生产者/消费者问题
一般问题的信号量设置
互斥信号量:mutex=1
记录“满”缓冲区个数:full=0
记录“空”缓冲区个数:empty=n
较复杂问题的信号量设置(吃苹果问题)
互斥信号量:plant=1
盘子里是否有苹果:apple=0
盘子里是否有橘子:orange=0
读者/写者问题
信号量设置
记录当前读者数量的计数器:count=0
互斥信号量(保护count跟新权):mutex
互斥信号量(读者写者互斥访问):rw
互斥信号量(保证写进程优先,不会无限等待):w
哲学家进餐问题
信号量设置
互斥信号量数组chopsticks{1,1,1,1,1}
问题精髓
不仅考虑眼前的一步,而且考虑下一步
吸烟者问题
代表三种资源:offer1、offer2、offer3
互斥执行抽烟动作,告诉供应者抽完了:finish
进程死锁
死锁的概念
死锁的定义
多个程序因竞争同一资源而造成的僵局
产生死锁的原因
系统资源竞争
进程推进顺序非法
必要条件
互斥
不剥夺
请求并保持
循环等待
死锁处理策略
死锁预防
破坏条件
避免死锁(分配资源前先进行监测,防止系统进入不安全状态)
系统安全状态
若能找出一个进程运行序列(安全序列),使得资源分配顺利进行,则当前系统处于安全状态
银行家算法
利用资源分配表进行分析
死锁监测、排除
利用资源分配图
解除方法
资源剥夺
撤销进程
进程回退