一、进程的定义及特征
进程的定义
由程序、数据、进程控制块三部分组成
为了使程序可以并发执行,且可以对并发执行的程序加以描述和控制。
不同角度的定义:
进程是程序的一次执行;
进程是一个程序及其数据在处理机上顺序执行时所发生的活动;
进程是系统进行资源分配和调度的一个独立单位。
传统OS中的进程定义为:
进程是程序的执行过程,是系统进行资源分配和调度的一个独立单位。
为使参与并发执行的每个程序(含数据)都能独立地运行,在OS中为之配置一个专门的数据结构,称之为 进程控制块(PCB)
进程的特征
具有程序没有的PCB
动态性(最基本)
并发性:多个进程共存于内存中,能在一段时间内同时执行。
独立性:是一个能够独立执行、独立获得资源、独立接受调度的基本单位。
异步性:按各自独立、不可预知的速度向前推进。
二、进程三态及转换、五态和七态图
(一)三态及转换
三态:
运行态:进程占有CPU,并在CPU上运行
就绪态:一个进程已经具备运行条件,但由于无CPU暂时不能运行的状态(当
调度给其CPU时,立即可以运行)
等待态:进程因等待某种事件的发生而暂时不能运行的状态(即使CPU空闲,该进程也不可运行)
进程状态转换:
在进程运行过程中,由于进程自身进展情况及外界环境的变化,这三种基本状态可以依据一定的条件相互转换
就绪-->运行:
调度程序选择一个新的进程运行
运行-->就绪:
运行进程用完了时间片
运行进程被中断,因为一高优先级进程处于就绪状态
运行-->等待:
当一个进程必须等待时:
操作系统尚未完成服务
对一资源的访问尚不能进行
初始化I/O 且必须等待结果
等待某一进程提供输入 (IPC)
等待-->就绪:
当所等待的事件发生时
五态模型
进程挂起:
(1)由于进程的不断创建,系统的资源已经不能满足进程运行的要求,这个时候就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。
挂起进程被换出内存,不参与进程调度直到它们被对换进主存。
(2)挂起进程具有如下特征:
该进程不能立即被执行
进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行
结束进程挂起状态的命令只能通过操作系统或父进程发出
(3)引起进程挂起的原因有:
①操作系统中的进程均处于等待状态,处理器空闲,此时需要把一些进程对换出去,以腾出②足够的内存装入就绪进程运行
③进程竞争资源,导致系统资源不足,负荷过重,此时需要挂起部分进程以调整系统负荷
④把一些定期执行的进程(如审计程序、监控程序、记账程序)对换出去,以减轻系统负荷
用户要求挂起自己的进程,以根据中间执行情况和中间结果进行某些调试、检查和改正
七态图
三、PCB
一 .PCB的定义、作用
定义
系统为了管理进程设置的一个专门的数据结构,记录进程的外部特征,描述进程的运动变化过程
系统利用PCB来控制和管理进程
PCB是系统感知进程存在的唯一标志
进程与PCB是一一对应的
作用
PCB是OS中最重要的记录型数据结构
①作为独立运行基本单位的标志
②实现间断性运行方式
③提供进程管理所需要的信息
④提供进程调度所需要的信息
⑤实现与其他进程的同步与通信
二.PCB结构体包含的内容
进程描述信息
进程标识符,唯一,通常是一个整数
进程名,通常基于可执行文件名(不唯一)
用户标识符
进程组关系
进程控制信息
当前状态;优先级;代码执行入口地址;程序的外存地址;
运行统计信息(执行时间、页面调度);进程间同步和通信;阻塞原因
进程的队列指针;进程的消息队列指针
所拥有的资源和使用情况
虚拟地址空间的现状;打开文件列表
CPU现场保护信息
寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针)
指向赋予该进程的段/页表的指针
三. PCB的组织方式
线性方式
所有PCB组织在一个连续的表中
索引方式
对具有相同状态的进程,分别设置各自的PCB索引表,表明PCB在PCB表中的地址
链接方式
同一状态进程的PCB组成一个链表,不同状态对应多个不同的链表
就绪链表、阻塞链表
四、进程的创建与终止
一 创建
申请空白PCB
为新进程分配其运行所需资源
初始化PCB,分配一个唯一的进程标识符,初始化PSW
新进程插入就绪队列
通知OS的某些模块
二.终止
根据进程标识符,找到它的PCB
将该进程拥有的资源归还给父进程或OS
该进程拥有子进程,先撤销所有子孙进程
被撤销的进程出队,归还PCB
五、同步、互斥
同步
直接相互制约。一个进程运行到某一点时要求另一进程为它提供消息,未获得消息则一直等待,获得消息被唤醒进入就绪。
互斥
间接相互制约。各进程要求共享资源,有些资源需要互斥使用,各进程竞争使用这些资源。
临界资源:某些资源一次只允许一个进程使用。
临界区:在进程中涉及到临界资源的程序段
使用临界资源的原则:用空让进、无空等待、多中择一、有限等待、让权等待
六、信号量及物理意义、P V操作
(生产者-消费者、读者-写者)
一 .信号量
一个数据结构,值仅能由P、V原语改变
structsemaphore
{
int value;
pointer_PCBqueue;
}
物理意义:
S>0:表示有|S|个资源可用
S=0:无资源可用
S<0:S等待队列中的进程个数
P(S):申请一个资源
V(S):释放一个资源
信号量初值大于0
二.P、V
P操作:
P(S){
S = S - 1;
if ( S < 0){
该进程状态置为等待状态;
将该进程的PCB插入相应的等待队列末尾;
}
}
V操作
V(S){
S = S + 1;
if (S < =0){
唤醒相应等待队列中等待的一个进程;
改变其状态为就绪态,并将其插入就绪队列;
}
}
P,V操作必须成对出现
互斥时,它们处于同一进程中
同步时,它们不在同一进程中
同步的P操作在互斥P操作前
七、生产者-消费者问题
两个信号量(表示缓冲区状态):empty(初值为n)、full(0)
一个(保障互斥):mutex(1)
n个缓冲区、m个生产者、k个消费者
八、读者-写者问题
互斥的思想解决同步问题。读写互斥,写者之间互斥
读者:
while (true) {
P(mutex);
readcount =readcount +1;
if(readcount==1)//如果是第一个读者
P (write); //锁住临界区,write初值为1
V(mutex);
读
P(mutex); //互斥访问
readcount =readcount -1;
if (readcount==0)//最后一个读者
V(write);
V(mutex);
};
如果写者进程先进,第一个读者会等待在write信号量上,第二个及以后的读者会等待在mutex上,因为mutex计数器未释放。
九、高级通讯原语
共享内存、消息传递、管道通信
十、线程
线程实现方式(论述分析)
内核支持线程KST
优点:
①多cpu,内核可以调度同一进程中的多个线程并行运行。
②若进程中一个线程被阻塞,内核可以调度进程中的其他线程占用处理机运行,也可运行其他进程中的线程。
③切换开销小
④内核也可采用多线程技术,提高系统执行速度和效率
缺点:
①对对用户的线程切换开销较大
②同一进程中,从一个线程切换到另一线程需要从用户态转到内核态进行。
用户级线程ULT(功能无须内核支持)
优点:
①线程切换不需要切到内核
②调度算法可以是进程专用
③实现与OS平台无关
缺点:
①线程执行一个系统调用时,进程内所有线程均会被阻塞。
②进程中仅有一个线程能执行
混合方式
ULT与KST的连接方式不同,分为 多对一模型、一对一模型、多对多模型
十一、进程调度
一 .三级调度
二. 调度与进程状态转换关系(论述分析)
三 .评价调度算法性能的指标
资源利用率
响应时间
周转时间
吞吐率
公平性
四.调度算法(综合应用、论述分析)
FCFS (先来先服务)有利于长作业,不利于短作业
SJF(短作业优先)有利于短作业,不利于长作业
HRRN(最高相应比优先)
响应比=1+已等待时间/估计运行时间
不会发生饥饿现象
RR(时间片轮转)
十二、死锁
定义:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的事件,则称一组进程或系统此时发生了死锁。
四个必要条件
①互斥
②请求和保持条件:进程已经占有了一个资源,但又提出新的资源请求,该资源被其他进程占用,请求进程被阻塞,对自己已占有的资源不释放。
③不可抢占条件:进程已获得的资源在未使用完前不能被抢占。
④循环等待:形成等待环路
!!如何打破?
①打破“请求与保持”:
1、 一次性申请运行过程中所需全部资源
2、进程只获得运行初期所需的资源后,便开始运行。运行过程中逐步释放已分配给自己的、已用完的全部资源。
②打破“不可抢占”:
一个已经有了一些不可抢占资源的进程提出新的资源请求而不能得到满足时,必须释放已经保持的所有资源,以后需要时再申请。
③打破“循环等待”:
对系统所有资源类型进行线性排序,赋予它们不同的序号。
银行家算法(综合应用、论述分析)
避免死锁
缺点:对资源分配过于保守,计算太多,缺乏实用价值;
若所有客户都申请希望得到最大贷款额,而银行家无法满足任何一个要求则发生死锁。
死锁的检测与解锁(论述分析)
检测
①进程-资源分配图无环路,没发生死锁
②有环路,每个资源类中仅有一个资源,则死锁,环路是充要条件。
③资源类中有多个资源,环路是必要条件。
解锁
①结束所有进程的执行,重新启动操作系统。
②撤销死锁的所有进程。
③逐个撤销陷于死锁的进程,回收资源,直至死锁解除。
④剥夺死锁进程占用的资源,但不撤销,直至死锁解除。
⑤让所有进程回退,直至死锁解除。
⑥将未卷入死锁的进程建立一些新的抑制进程执行到结束。