2.4 进程同步机制
同步与互斥的引入:
1、操作系统引入进程后,由于进程的异步性,可能会导致程序执行结果的不确定性,使程序执行时出现不可再现性。
2、进程互斥与同步的主要任务是使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
2.4.1 进程同步的基本概念
同步:指多个进程中发生的事件存在着某种时序关系,它们必须按规定时序执行,以共同完成一项任务 。
互斥:多个进程不能同时使用同一资源。
临界资源:某段时间内仅允许一个进程使用的资源。
临界区:每个进程中访问临界资源的那段代码。
2.4.2 进程同步机制应遵循的原则
所有的同步机制都要遵循以下四条原则
(1)空闲让进
当无进程处于临界区时,临界资源处于空闲状态。此时允许进程进入临界区。
(2)忙则等待
当已有进程进入临界区时,临界资源正在被访问,其他想进入临界区的进程必须等待。
(3)有限等待
对于要求访问临界资源的进程,应保证在有效的时间内进入,以免进入“死等”状态。
(4)有权等待
当进程不能进入自己的临界区时,应立即释放处理器,以免陷入“忙等”。(把cpu让出来)
2.4.3 进程同步机制------锁
1. 锁的概念
在同步机制中,常用一个变量来代表临界资源的状态,称它为锁。通常用“0”表示资源可用,相当于锁打开。用“1”表示资源已被占用,相当于锁闭合。
2. 对锁的操作
对锁的操作有两种,一种的关锁操作,另一种是解锁操作。
2.4.4 进程同步机制——信号量
1、信号量的概念
信号量是一种特殊变量,它用来表示系统中资源的使用情况。
整型信号量就是一个整型变量。当其值大于“0”时,表示系统中对应可用资源的数目;当其值小于“0”时,其绝对值表示因该类资源而被等待的进程的数目;当其值等于“0”时,表示系统中对应资源已经用完,并且没有因该类资源而被等待的进程。
2、信号量的物理意义
从资源的观点看信号灯的意义:
● S的初值表示系统中某种资源数目。
● P(s)表示要申请一个资源。(P操作在进入临界区前执行)
● V(s)表示要释放一个资源。(V操作在退出临界区后执行)
● 信号量 <0时,|s.value|表示等待队列的进程数。
2.4.6、利用信号量实现进程互斥
进程互斥的原因是竞争临界资源。
2.4.7 利用信号量实现进程同步的方法
2.5 进程通信
进程通信:进程间的信息交换。
进程通信被分为:低级通信和高级通信
低级通信:进程的同步与互斥
高级通信:是指用户直接利用操作系统提供的一组通信命令。
低级通信机制:信号灯
高级通信机制:共享存储器系统,消息传递系统及管道通信系统。
信号灯作为进程同步和互斥工具是卓有成效的。但作为通信工具就不够理想。其原因为:
●效率低——一次只传一条消息。
●通信对用户不透明。
因此必须引入高级通信工具,解决进程之间大量的信息传递问题。
2.5.1 共享存储器系统
1、共享数据结构方式(用于传少量数据)
2、共享存储区方式(用于传较多数据)
2.5.2 消息传递系统
1、直接通信方式
发送进程使用发送原语直接将消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。接收进程使用接收原语从消息缓冲队列中取出消息。
2、间接通信方式
发送进程与接收进程通过中间实体——信箱来完成通信,既可以实现实时通信,又可以实现非实时通信。
2.5.3 管道通信系统(共享文件)
所谓管道是指连接读进程和写进程的,用于实现它们之间通信的共享文件。向管道提供输入的发送进程(写进程)以字符流的形式将大量数据送入管道,而接受管道输出的接收进程(读进程)可以从管道中接收数据。由于发送进程和接收进程是利用管道进行通信的,故称为管道通信方式。这种方式首创于UNIX系统,因为它能传送大量的数据,又非常有效,所以又被引入到许多操作系统中。
2.6 处理机调度
2.6.1 进程调度算法的选取原则
(1)面向用户原则
1、周转时间短:
周转时间:作业从提交到完成的时间间隔。
2、优先权准则
3、截止时间的保证
4、响应时间快
(2)面向系统的准则
1、系统吞吐量
系统吞吐量:是指系统在单位时间内所完成的进程数量。
2、处理机利用率
资源利用率越高,空闲时间越短。
3、各类资源平衡利用
公平
2.6.2 常用的进程调度算法(五大调度算法 重点难点)
周转时间定义
完成时间=开始时间+运行时间 带权周转时间=周转时间/运行时间
周转时间=完成时间-提交时间 平均周转时间=周转时间/n
1、先来先服务调度算法(FCFS)
算法思想:
①对于作业调度,从后备作业中选择最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
②对于进程调度,从就绪队列中选择最先进入该队列的进程,分配处理机,使之运行。
特点:
①易于实现
②有利用长作业,短作业不满。
2、短作业(进程)优先调度算法(SPF)
算法思想
优点:有效降低进程的平均等待时间,提高了系统的吞吐量
3、时间片轮转调度算法(RR)
算法思想
进程按FCFS在就绪队列排队,调度程序把CPU分配给队首进程,令其执行一个时间片,一个时间片执行完毕将进程排在队尾。
时间片大小的确定:
响应时间T=用户数目N*时间片q
●响应时间T
当N一定,T与q成正比。T若要求快,则q也要小。
●就绪队列的进程数N
T一定, q与N成反比。N越多, q要小。
●系统的处理能力
保证用户键入的常用命令能在一个时间片内处理完毕。
4、响应比高者优先调度算法(HRRN)
响应比高者优先调度算法是一个比较折中的算法,它是从就绪队列中选择一个响应比最高的进程,让其获得处理器并运行,直到该进程完成或因等待某种事件而退出处理器为止。
响应比高者优先调度算法的裁决模式是非抢占式的,优先权函数=响应比,仲裁规则是随机或按照先后次序。这种调度算法既照顾了短进程,又考虑了进程到达的先后次序,也不会使长进程长时间得不到服务。因此,它是一个考虑比较全面的算法。但是每次进行调度时,它都需要对各个进程计算响应比,所以系统开销很大,比较复杂。
5、优先权调度算法
算法思想
●优先权类型
●特点:综合考虑各种情况
6、多级反馈队列调度算法(MLF)
算法思想
●根据作业的性质和类型不同,将就绪队列再分为若干个子队列,每个进程分属于一个队列。
●在多级队列的基础上,不但设多个队列,且为每个队列赋予不同的优先权,第一个队列的优先权最高,第二个队列次之,其余队列的优先权逐个降低。
●各个队列中的进程执行时间片大小逐渐增大。
●新进程投入第一个队列。
●调度从第一个队列进行,仅当第一个队列为空时,才调度第二个队列中的进程。
2.7 进程死锁
2.7.1 死锁的基本概念
概念:死锁是指多个进程因竞争资源而造成的一种僵局现象。(一组竞争系统资源或相互通信的进程相互的“永久”阻塞。若无外力作用,这组进程将永远不能继续执行。)
原因:
●竞争资源:资源数 < 要求该种资源的进程数
●进程的推进顺序非法
3、产生死锁的四个必要条件
4、处理死锁的基本方法
2.7.2 死锁的预防
1、破坏“不剥夺”条件
2、破坏“请求和保持”条件
采用预先静态分配方法
3、破坏“环路等待”条件
2.7.3 死锁避免
避免死锁是通过明智的选择,确保系统永远不会到达死锁点 。即动态地决定是否分配资源给进程!
安全状态—与—不安全状态
1、利用银行家算法避免死锁
2.7.4 死锁的检测与解除
1、死锁的检测
2、死锁的解除
2.8 处理器管理新技术
1. 线程的概念
线程是进程中的一个实体,是被系统独立调度和运行的基本单位。线程自己基本上不拥有系统资源,只拥有少量在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可以与同属于一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发运行。线程之间也会相互制约,使其在运行中呈现异步性。因此,线程同样具有就绪、运行、等待三种基本状态。
2. 线程与进程的比较