1)基本准则
不同的调度算法具有不同的特性,在选择调度算法时,必须考虑算法的特性。为了比较处理机调度算法的性能,人们提出了很多评价准则,下面介绍其中主要的几种:
①CPU利用率。
是计算机系统中最重要和昂贵的资源之一,所以应尽可能使 保持“忙”的状态,使这一资源利用率最高。
②系统吞吐量。表示单位时间内 完成作业的数量。长作业需要消耗较长的处理机时间,因此会降低系统的吞吐量。而对于短作业,它们所需要消耗的处理机时间较短,因此能提高系统的吞吐量。调度算法和方式的不同,也会对系统的吞吐量产生较大的影响。
③周转时间。周转时间是指从作业提交到作业完成所经历的时间,是作业等待、在就绪队
列中排队、在处理机上运行及进行输入/输出操作所花费时间的总和。
a.作业的周转时间可用公式表示如下:
周转时间 = 作业完成时间-作业提交时间
b.平均周转时间是指多个作业周转时间的平均值:
平均周转时间=(作业 的周转时间+…+作业 的周转时间)/作业数
c.带权周转时间是指作业周转时间与作业实际运行时间的比值:
带权周转时间=作业周转时间/作业实际运行时间
d.平均带权周转时间是指多个作业带权周转时间的平均值:
平均带权周转时间 =(作业 的带权周转时间+…+作业 的带权周转时间)/作业数
④等待时间
等待时间指进程处于等处理机状态的时间之和,等待时间越长,用户满意度越低。
⑤响应时间。
响应时间指从用户提交请求到系统首次产生响应所用的时间,在交互式系统中,周转时间不可能是最好的评价准则,一般采用响应时间作为衡量调度算法的重要准则之一。
2.调度算法
1)FCFS算法【谁先来谁先服务】
①算法规则。先来先服务算法(first come first server,FCFS)
按照作业/进程到达的先后顺序来进行调度。
②适用情况。可用于作业调度也可用于进程调度。
③优缺点。 优点:算法实现简单。 缺点:对长作业有利,对短作业不利。
2) SJF算法【作业短的优先级高】
①算法规则。短作业优先调度算法(short job first ,SJF)
以作业的长短来计算优先级,作业越短,其优先级越高。
②适用情况。可用于作业调度及进程调度。
③优缺点
优点:“最短的”平均等待时间及平均周转时间。
缺点:a. 必须先知道作业的运行时间。
b. 对长作业不利,会出现饥饿现象。
c. 没有考虑作业的紧迫程度。
3)优先级算法(priority - scheduling algorithm)【给定优先级,优先级高的先执行】
①算法规则。基于进程(作业)的紧迫程度,由外部赋予进程相应的优先级,根据优先级进行调度。
②适用情况。可用于作业调度也可用于进程调度甚至I/O调度。
③ 类型
抢占式优先级调度算法:
只需出现另一个优先级更高的进程,调度就会发生变化。
非抢占式优先级调度算法:主动放弃。
④优先级的类型
a.静态优先级:在创建进程时确定,其在进程的整个运行期间不变。
b.动态优先级:在创建进程之初,先赋予进程一个优先级,然后动态的调整优先级。
⑤优缺点
优点:用优先级区分紧急程度,运用于实时 。
缺点:可能导致饥饿(低优先级进程的饥饿)。
4)时间片轮转算法(RR)【】
①算法思想:时间片轮转算法(Round-Robin)
公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。
②算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片。若进程未到一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
③适用情况:可用于进程调度。
④是否抢占?若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式算法。由时钟装置发出时钟中断来通知CPU时间片已到。
⑤优缺点
优点:公平;响应快,适用于分时操作系统;。
缺点:不能区分任务的紧急程度,需要进程切换,消耗较大。
5)高响应比优先算法(HRRN)
①算法思想:高响应比优先调度算法(Highest Response Ratio Next,HRRN)
综合考虑作业或进程的等待时间和要求服务的时间。
②算法规则:在每次调度前先计算各个作业或进程的响应比(优先级),选择响应比最高的作业或进程为其服务。
响应比(Rp)=(等待时间+要求服务时间)/要求服务时间
=响应时间/要求服务时间 = 1+(等待时间)/要求服务时间
③适用情况:可用于作业调度及进程调度。
④优缺点
优点:综合考虑了等待时间和运行时间,较好的实现了折中。
缺点:每次调度前都要计算响应比,会增加系统的开销。
注意:不会导致饥饿现象。
6)多级反馈队列调度算法
①算法思想: 对其他调度算法的折中权衡。
②算法规则:
a.设置多个就绪队列 。各级队列优先级从高到低,时间片从小到大。
b.每个队列都采用FCFS调度算法。
c.按队列优先级调度。只有当第1~i-1队列均空时,才会调度第 队列中的进
程。
分页存储管理方式又分为基本分页存储管理方式和请求分页存储管理方式。
1)基本分页存储管理方式
算法思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分,分页管理不会产生外部碎片。
分页存储管理的基本概念:
①页面和页面大小进程中的块称为页(page),内存中的块称为页框(Page Frame,或页帧)。外存也以同样的单位进行划分,直接称为块(Block)。进程在执行时需要申请主存空
间,即要为每个页面分配主存中的可用页框,这就产生了页和页框的一一对应。
页面大小应该适中,应为 的整数幂。
②地址结构
前一部分为页号 ,后一部分为页内偏移量 。地址长度为32位,其中0-11位为页内地址,即每页大小为4KB;12-31位为页号,地址空间最多允许2的20次方页。
③页表
为了便于在内存中找到进程每个页面所对应的物理块,系统为每个进程建立一张页表,它记录页面在内存中对应的物理块号,页表一般存放在内存中。页表是由页表项组成的,页表项由页号和物理内存中的块号组成。
④地址变换机构
a.基本的地址变换结构
地址变换机构的任务是将逻辑地址转换为内存中的物理地址。地址变换是借助于页表实现的。
变换过程计算:
设页面大小为L ,逻辑地址A 到物理地址E 的变换过程如下(逻辑地址、页号、
每页的长度都是十进制数):
Ⅰ.计算页号P(P=A/L)和页内偏移量W(W=A%L)。
Ⅱ.比较页号P 和页表长度M ,若P>M,则产生越界中断,否则继续执行。
Ⅲ.页表中页号P对应的页表项地址=页表始址F + 页号P* 页表项长度,取出b该页表项内容 ,即为物理块号。要注意区分页表长度和页表项长度。页表长度的值是指一共有多少页,页表项长度是指页地址占多大的存储空间。
Ⅳ.计算E=b*L+W,用得到的物理地地上E去访问内存。
题 1.若页面大小L为1KB ,页号2对应的物理块为b=8 ,计算逻辑地址A=2500的物理地址
二进制算法:
A = 2500 (十进制)= 1001 1100 0100 (二进制)
L = 1KB = 1024 B
页号P = A / L = 砍一刀 L 砍 10 位 1001 1100 0100
10代表2 01 1100 0100代表452
页号2转换为块号8 即 1000
物理地址为 1000 01 1100 0100
十进制算法:
A = 2500
L = 1KB = 1024B
P = A/L = 2500/1K = 2500/1024 = 2
W = A%L = 2500%1024 = 425
物理地址 为 8*1024+425
分页管理方式的两个主要问题:
Ⅰ.每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低;
Ⅱ.每个进程引入页表,用于存储映射机制,页表不能太大,否则内存利用率会会降低。
b.具有快表的地址变换机构
快表,又称联想奇存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。
引入快表后,地址的变换过程:
页面置换算法
常见的置换算法有以下五种:
1)最佳(OPT)置换算法
算法思想:选择以后永不使用的页面淘汰或者在最长时间内不再被访问的页面,
以保证获得最低的缺页率。
2)先进先出(FIFO)页面置换算法
算法思想:优先淘汰最早进入内存的页面,即在内存中驻留时间最久的页面。
3)最近最久未使用(LRU)置换算法
算法思想:选择最近最久时间未访问过的页面予以淘汰。
4)时钟(CLOCK)置换算法
LUR算法的性能接近于OPT算法,但实现起来比较困难,且开销大:FIFO算法实现简单,但性能差。因此,操作系统的设计者尝试了很多算法,试图用比较小的开销接近 算法的性能,这类算法都是LUR算法的变体。因为算法要循环扫描缓冲区,像时钟的指针一样转动,所以称为CLOCK算法,又称最近未用(NRU)算法。
简单算法实现方法:
5)最少使用(LFU)置换算法
选择到当前时间为止被访问次数最少的页面被置换; 每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1; 发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零;
2.磁盘调度算法
自由空间管理 计算相对块号
按名存取文件:
上下文切换
上文:执行过的指令和数据在相关寄存器和堆栈中的内容
正文:正在执行的指令和数据在相关寄存器和堆栈的内容
下文:待执行的指令和数据在相关寄存器和堆栈的内容
上下文切换过程:先将现有的进程信息进行保存(保存这个进程执行到哪的信息),然后进行系统的调度和资源的分配(干别的事),恢复选中进程的信息(恢复保存的进程信息接着执行)
进程状态
运行 就绪 等待(阻塞) 新建 终止
运行->就绪 ①时间片轮转结束②在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出 ,该进程便由运行状态转变为就绪状态。
运行->阻塞 正在运行的进程因发生某等待事件而无法执行,则进程由运行状态变为阻塞状态,如发生了I/O请求
就绪->运行 正运行进程的时间片用完,调度就转到就绪队列中选择合适的进程分配 。
阻塞->就绪 进程所等待的事件已经完成,就进入就绪队列。
无:阻塞->运行 就绪->阻塞
进程的同步和互斥
同步:一组并发执行的进程需要相互合作、相互等待。为了保证运行正确,要求每一个进程按照一定的次序和速度执行的过程,称之为进程的同步。
互斥:一个进程正在对临界区资源进行操作时,就不允许其他进程同时进行操作
死锁发生的四个必要条件
互斥
请求与保持
不可抢占
循环等待
预防死锁
①破坏互斥条件
②破坏不剥夺条件
③破坏请求和保持条件
④破坏循环等待条件
避免死锁
银行家算法
Allocation 分配矩阵
Max 最大需求矩阵
Need 需求矩阵 Need = Max-Allocation
Available 现有资源
进程和线程的比较
拥有资源:线程是调度和分配的基本单位,进程是拥有资源的基本单位。
并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。
调度:线程上下文切换比进程要快得多
系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源导致系统的开销明显大于创建或撤消线程时的开销
通信:线程可以直接进程数据段来进行通信,进程间通过同步和互斥的手段辅助来保证数据的一致性。
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
处理机是分配给线程的,即真正在处理机上运行的是线程。
资源分配给进程,同一进程的所有线程共享该进程的所有资源。
线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体。
多级反馈队列
存在多个就绪队列,按照各自的优先级和时间片轮转进行调度
优先级越高的,时间片越小
运行进程在队列中移动
注意:当一个进程执行完一个完整的时间片后被抢占处理器,被抢占的进程 优先级降低一级而进入下级就绪队列,如此继续,直至降到进程的基 本优先级。而一个进程从阻塞态变为就绪态时要提高优先级。
效果:最后会将I/O型和交互式进程留在较高优先级队列(时间片短) 计算密集型进程会留在较低的优先级队列(时间片长)
类型:属于抢占式的算法。
优缺点:
优点:用优先级区分紧急程度,运用于实时 。
缺点:可能导致饥饿(低优先级进程的饥饿)。