进程管理
概论:
并发程序和顺序程序有本质上的差别,为了能更好地描述程序的并发执行,实现操作系统的并发性和共享性,引入“进程”的概念。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
处理器是计算机系统中最重要的资源。在现代计算机系统中,为了提高系统的资源利用率,CPU将为某一程序独占。通常采用多道程序设计技术,即允许多个程序同时进入计算机系统的内存并运行
1.任务
保证cpu正确地同时运行多道程序
2.描述
进程是系统中独立地描述运行程序的基本单位,向系统请求资源分配的单位
3.引入
程序执行:
1. 顺序执行
特性:顺序性(串行),封闭性(最终结果由给定初值决定,不受外界影响),可再现性(只要输入不变,结果就不变)
2. 并行执行:多个事件同时刻发生-需求多个cpu资源
3. 并发执行:多个事件同时段发生并运行,进程间分时交替执行,但cpu分时复用的过程
特性:间断性(交替执行),开放性(可以被中断),不可再现性
名词解释:
程序是静态的,特指代码文件执行时文件的放到内存中
作业是批处理系统要装入系统处理的一系列程序和数据
进程是可并发执行的的程序在某个数据集合上的一次执行过程时操作系统资源保护,调度,分配的基本单位。其侧重点是进程是 1.已经装入内存的 2.运行的 3.程序及其数据结构
进程特征:
1. 结构性:进程实体(进程映像)包括进程控制块(PCB),代码块,数据块,堆栈
2. 动态性:有创建产生,调度而运行,结束而消亡
相对的程序实际上就是文件,是静态的并且持久存在
3. 独立性:都有自己的运行数据集,但进程间也可数据通信,共享
4. 并发性:但cpu并发,多cpu并行
两类进程:
一.系统进程:
1.管理系统支援并行活动的并发软件
2.有操作系统自身负责
3.直接管理软硬件资源
4.优先级高
二.用户进程:
1.系统提供服务的对象
2.由用户自己负责
3.间接使用软硬件资源(必须先向系统发出请求等待系统分配和调度资源)
4.优先级低
进程实体+运行环境=>进程上下文:
1. 用户级:由进程的代码区,数据区,用户栈区和共享存储区,在编译目标文件时产生,占据进程的虚拟地址空间
2. 系统级:由进程控制块PCB,内存管理信息,进程环境块和系统栈等组成
3. 寄存器上下文:由程序转台寄存器,各类控制寄存器,地址寄存器,通用寄存器和用户栈指针等组成
当一个进程被系统调度而占有cpu是会发生cpu在新老进程中切换,切换的内容就是进程上下文,进程运行时再进程的上下文中执行的
进程状态及转换:
3个状态:
1.执行:占用cpu资源
2.就绪:占用除cpu以外的所有资源
3.阻塞:占用资源较少,一般是占用除cpu,内存以外的所有资源,只是在等待某件事情的发生 eg:等待i/o输入
状态之间的关系:
执行到就绪:1.时间片用完2.中断,优先级高的进入 进程创建时:分配到了除cpu,内存外的所有资源
进程终止时(正常结束/出现严重错误时):进入终止状态的进程不再被执行,系统将其处理后会删除它并回收占用资源补充:
由内存是否充足还可加上挂起状态,正常就绪缺内存就为挂起就绪状态,正常阻塞缺内存就为挂起阻塞状态.被挂起的进程只有被激活才能由外存调入内存处于就绪状态
4.进程控制
一.进程控制块PCB
记录描述进程当前状态及控制进程运行的信息,是进程存在的唯一标识
由于其经常被系统访问,所以PCB常驻内存
PCB中的信息有
-
进程的标识信息
(1).内部标识:用于操作系统管理进程,一般由数字表示
(2).外部标识:进程创建者提供的进程名,用于用户访问进程时的标识,一般由数字和字母组成 -
当前进程运行的现场信息,用于之后如果被中断用其恢复到运行状态
-
控制信息:程序,数据地址,进程同步,通信机制
操作系统是根据PCB来对进程控制和管理的,将所有进程的PCB集中在系统中合成PCB表,大小决定了系统的并发度,从某进程的进程控制块中查出其现行状态及优先级
进程暂停(中断时):必须将其断点处的cpu环境保存在PCB中
进程队列的组织方式:
- 线性
- 链式
- 索引
二.进程控制
1.创建进程:
通过创建原语创建
命名进程(设置进程标识符)->从PCB集合中申请空的PCB->确定优先级->
建立共享程序段链接指针->分配除CPU,内存的其他各种资源->初始化PCB->
若内存充足就加入到就绪队列中否则放到外存中等待(挂起就绪)
创建进程的事件:用户登录,作业调度,提供服务
引用请求:使用系统调用完成创建
2.通过介质:原语
1.是指若干指令所组成的用于实现某个特定功能,在执行过程中不可被中断的程序段(不可分割,不可并发)
2.是系统核心的一个组成部分,同PCB一样也是常驻内存的,通常在核心态下运行
3.两态
两态(cpu模式)
- 核心态(管态):内核代码设备驱动需核心态,无限制指令特权,自由放文内存空间有效地址,直接进行设备端口操作
- 用户态(目态):受保护模式等安全限制,普通指令,使用页表映射虚拟地址空间,访问系统允许的映射端口
中断或者系统调用时cpu模式由用户态->核心态,执行系统服务(此时进程仍在原上下文中进行)。当中断响应和系统服务完成之后通过逆向模式切换,恢复中断进程的运行
4.进程状态间的联系
- 撤销与终止进程:
找PCB ->找到->撤销该进程和其子孙进程—>释放进程工作空间和PCB空间
->没有找到->异常终止处理程序
撤销原语:撤销的是标志进程存在的进程控制块而不是进程的程序段(因为程序段可能是多个进程的一部分)
-
阻塞与唤醒进程:
阻塞是一种自主行为,唤醒是被动行为(由释放资源/触发事件调用唤醒原语)
唤醒原语:把除cpu外其他所有资源都得到的进程设为就绪状态
挂起与激活进程 -
挂起与激活进程:
挂起原语可以进程自己调用也可其他进程/系统调用,但激活原语只能由其他进程/系统调用
被挂起进程的非常驻内存部分将交换到外存(磁盘)中
5.进程互斥与同步
并发运行多程序时存在两种基本管理:竞争和协作
对资源竞争的两个极端:死锁与饥饿
- 死锁:各进程都分有/部分分有一些资源使得没有一个进程能运行
- 饥饿:被长期忽视而分配不到CPU执行
互斥:进程争夺独占资源而产生的竞争制约关系
同步:进程为共同完成任务基于某个条件来协调其运行进度,执行次序而等待,传递信号/消息而产生的协作制约关系
联系:互斥是一种特殊的同步
临界资源(独占资源):某段时间只能由一个进程使用的资源
临界区:用于访问临界资源的代码段
临界区管理:
软件:设置标志位,flag(用于进程本身,是否在临界区中)+turn(用于临界区,是否被占用)
若flag=1, turn=0则进程进入临界区同时turn=1,flag=0
turn=1则等待
硬件:1.禁止中断(缺点明显,效率降低,不能处理重要进程,多cpu下失效)2.特殊指令(也可看为是信号量的方法)
同步机制:1.有锁(类比串行执行,浪费cpu的时间)2.信号量+PV操作3.管程(把分散在各进程中的临界区集中起来管理(既便于系统管理资源又能保证互质访问)用数据结构抽象表示共享资源,防止进程有意无意做违法同步操作)
6.信号量
信号量是进程在某一特殊点上被迫停止执行(阻塞)直到接收到一个对应的特殊变量值,是资源的实体,是一个与队列有关的整型变量
信号量除了初值外,只能由PV操作修改
p(s)将资源量-1 若s<0则堵塞等待(插入到该信号量对应阻塞队列中)
v(s)将资源量+1 如内存中s<=0则唤醒其中的一个阻塞等待进程(变为就绪状态)
(当s>0时说明没有阻塞的进程不需要唤醒)
其中s为可用资源量也为信号量
互斥信号量(即资源只有一个对应的信号量)一定设为1,其他有多少设多少(但注意考虑限制条件)
信号量即可用来实现异步并行进程间的互斥还可实现同步
主要作用:
- 封锁临界区
- 进程同步
- 维护资源计数
5.进程通信
三种方法:1.消息传递 2.共享内存 3.管道通信
一.消息传递
适用于少量的数据,要求消息传递的两个进程在一次传送数据过程中相互同步
消息:进程之间以不连续的成组方式发送的信息
消息通过信息缓冲区在进程间相互传递,通信数据封装在消息中
直接通信:直接发送/接收消息
间接通信:通过邮箱发送和接收消息
邮箱是一个共享的数据结构,发送进程将消息发送到邮箱后接收进程从邮箱接收
发送进程和接收进程收发消息策略:至少有一个在等待对方,允许一方可以不等待自己先做自己的,对发送进程超时没有收到回送消息会再次发送或者放弃
对接收进程只有当有消息回复时才会去处理
二.共享内存通信
系统应该允许多个进程将共享内存映射放到自己地址空间中,这些进程对各自映射的地址段读写操作的代码放到临界区中
三.管道通信
管道实际上是一个共享文件,可借助文件系统机制实现
管道是可以连续读写的特殊文件,允许进程FIFO凡是传送数据,也能是进程同步执行操作类比邮箱,发送进程以字符流的形式将数据放入接收进程从管道接受数据
收发消息的进程间应该是同步关系,进程对管道的使用时互斥的
管道限制:
- 匿名管道:只允许父子进程之间实现数据的传递
- 命名管道:不同的进程都可以进程数据传递->通信方式:1.字节 2.消息
管道发出的每一消息必须作为一条完整的消息读入
6.进程调度
功能:通过一定的策略将CPU分配给处于就绪队列中的某个进程
一.调度模型
1.高级调度(作业调度) 在实时和分时系统中不需要,主要用于创建作业进程和为其服务的系统进程
2.中级调度(平衡调度)在内存不足是采用虚拟存储技术扩充内存-有点类似于内存分配策略
3.低级调度(进程调度)主要是为进程进行CPU资源的分配
二.调度算法
1. 先来先服务FCFS:属于非抢占式调度,优点:长作业有力,CPU繁忙型作业有利 缺点:短作业不利,IO繁忙型,要求响应时间高的不利
2. 短作业优先SJF:非抢占式调度,优点:调度性能优于FCFS但对长作业不利,忽视了作业的等待时间,如果不断的接受短作业,长作业会出现饥饿现象
3. 最短剩余时间优先SRTF:抢占式调度,优点性能优于SJF,但是需要计算剩余时间开销比较大,并且长作业仍然存在饥饿现象
4. 高响应比HRRF:非抢占式调度,是综合考虑了FCFS的没有考虑作业的运行时间和SJF的没有考虑作业等待时间,是他们之间比较折中的算法
响应比=作业现等待时间+作业估计运行时间/作业估计运行时间
5.优先权:抢占式调度,优先级越小,优先级越高
算法效率:SRJF>SJF>HRRF>FCFS
前面的算法在作业和进程中都是可以使用的
6.时间片轮转:抢占式调度,关键在于设置时间片的大小,如果太大就会退化为FCFS,如果过小就会导致频繁切换开销较大
7.多级反馈队列:抢占式调度,是基于时间片的反馈循环队列,多个就绪队列最高级就绪队列优先级最高但是获取到的时间片比较短。相反低优先级其时间片长
后两种算法都是只能用于进程中
这些算法的评价标准可以看:
算法评价
三.死锁
产生原因:并发进程对临界资源的竞争以及并发进程的推进顺序不当
四大必要条件:
- 互斥条件:资源的使用时互斥的->解决方法:使资源可以同时访问
- 占有与等待条件:已经得到资源的进程可以申请新的资源,且得到的资源不释放->解决方法:可以使用静态分配(仅当系统能满足进程资源要求且分配资源给进程后才能执行)
- 不可剥夺条件:只能由自身释放资源->解决方法:采用剥夺式调度
- 环路等待条件:存在一个有若干进程形成的环路请求链->解决方法:层次分配或者静态分配或按序分配法
死锁的避免可以使用银行家算法
死锁定理:如果进程-资源分配图无环则无死锁
如果有环且每个资源都仅有一个资源则死锁。当有多个资源是则只是环路等待的必要条件而非充分条件
死锁充分条件:当且仅当该状态下的进程-资源分配图是不可简化的时候
死锁检测:1.基于死锁定理 2.类似于银行家算法中的安全性测试算法
死锁的解除:1.重启 2.撤销 3.回滚
7.线程
见:线程
感谢看到这里的你,如果想看更多的内容,还请大家点个赞支持一下吧└(o)┘;