这种抢占式的优先权调度算法
- 格式:ppt
- 大小:244.51 KB
- 文档页数:19
第2章处理机管理(2)一、单项选择题1.操作系统中的三级调度是指。
A.处理机调度、资源调度和网络调度 B.CPU调度、设备调度和存储器调度C.作业调度、进程调度和资源调度 D.作业调度、进程调度和中级调度解:操作系统中的三级调度是指高级调度、中级调度和低级调度。
高级调度就是作业调度,低级调度就是进程调度,中级调度将进程的程序和数据在内、外存间进行交换。
本题答案为D。
2.当一进程运行时,系统可基于某种原则强行将其撤下,把处理机分配给其他进程,这种调度方式是。
A.非剥夺方式 B.剥夺方式 C.中断方式 D.查找方式解:剥夺方式也称抢占式优先权调度方式,系统是把CPU分配给优先权最高的进程,主之执行,但在其执行期间,只要又出现了另一个优先权更高的进程,进程调度程序就立即停止当前进程的执行,重新将CPU分配给新到的优先权最高的进程。
本题答案为B。
3.从进程提交给系统开始到进程完成为止的时间间隔称为。
A.进程周转时间 B.进程运行时间C.进程响应时间 D.进程等待时间解:进程周转时间等于进程等待时间加上进程运行时间。
本题答案为A。
4.以下算法与作业的运行时间有关。
A.优先级调度 B.时间片轮转C.短作业优先 D.先来先服务解:短作业优先与作业的运行时间有关,运行时间越少越优先运行。
本题答案为C。
5.现有3个同时到达的作业J1、J2和J3,它们的执行时间分别为T1、T2和T3,且T1<T2<T3。
系统按单道方式运行且采用短作业优先算法,则平均周转时间是。
A.TI+T2+T3 B.(Tl+T2+T3)/3C.(3T1+2T2+T3)/3 D.(Tl+2T2+3T3)/3解:系统采用短作业优先算法调度时,执行顺序为J1、J2和J3。
J1等待时间为0,执行时间为T1,J2等待时间为T1,执行时间为T2,J3等待时间为TI+T2,执行时间为T3,则平均周转时间=(T1+T1+T2+T1+T2+T3)/3=(3Tl+2T2+T3)/3。
操作系统概论考试题含参考答案一、单选题(共90题,每题1分,共90分)1、将一个进程的逻辑地址空间分成若干个大小相等的片,称为A、页表B、页框C、页D、页内碎片正确答案:C2、【】的优点是空闲区分布均匀、查找开销较小。
A、循环首次适应算法B、首次适应算法C、最快适应算法D、最佳适应算法正确答案:A3、操作系统内核的资源管理功能不包括A、设备管理B、进程管理C、存储器管理D、时钟管理正确答案:D4、自调度算法的缺点不包括A、瓶颈问题B、低效性C、线程切换频繁D、不利于提高CPU的利用率正确答案:D5、现代操作系统的特征不包括A、并发B、共享C、虚拟D、同步性正确答案:D6、【】是用于管理文件的系统文件。
A、目录文件B、字符设备文件C、正规文件D、块设备文件正确答案:A7、下列关于静态优先权的说法中,错误的是A、静态优先权调度算法可以使系统获得更好的调度性能B、静态优先权在创建时确定C、静态优先权值通常可以根据进程的类型、进程需要的资源数量和户的要求来设定D、静态优先权在进程的整个运行期间保持不变正确答案:A8、进程的基本状态不包括A、完成态B、就绪态C、执行态D、阻塞态正确答案:A9、下列关于进程的说法中,错误的是A、进程是由正文段和进程控制块共同组成的执行环境B、进程是允许并发执行的程序在某个数据集合上的运行过程C、正文段存放被执行的机器指令D、进程控制块存放程序的运行环境正确答案:A10、下列关于内存中地址映射的说法中,错误的是A、地址映射是指把程序的逻辑地址转变为物理地址的过程B、地址映射应在硬件的支持下完成C、在多道程序系统中,地址空间中的逻辑地址和内存中的物理地址是一致的D、由内存中的一系列单元所限定的地址范围称为内存空间,其中的地址称为物理地址正确答案:C11、进程切换使当前正在执行的进程成为被替换进程,出让其所使用的CPU,以运行被进程调度程序选中的新进程。
进程切换的第一个步骤是A、更新被替换进程的进程控制块B、将被替换进程的进程控制块移到就绪队列或阻塞队列C、修改进程状态,把执行态改为就绪态或者阻塞态D、保存包括程序计数器和其他寄存器在内的CPU上下文环境正确答案:D12、单道批处理系统的特点不包括A、顺序性B、自动性C、复杂性D、单道性正确答案:C13、在存储器的层次结构中,L3层是A、寄存器B、主存储器C、本地二级存储D、高速缓存正确答案:B14、下列关于进程状态的转换的说法中,错误的是A、进程状态可由执行态直接变为就绪态B、进程状态可以由就绪态直接变为执行态C、进程状态可以由阻塞态直接变为执行态D、进程状态可以由执行态直接变为阻塞态正确答案:C15、进程之间的高级通信机制不包括A、管道通信系统B、共享存储器系统C、共享处理器系统D、消息传递系统正确答案:C16、MS-DOS使用的磁盘分配方法是A、使用磁盘的链接表分配B、连续分配C、不连续分配D、使用内存的链接表分配正确答案:D17、下列关于存储器的说法中,错误的是A、主存暂时存放存储容量更大、速度更慢的磁盘上的数据B、主存的容量一般比高速缓存存储器大C、高速缓存存储器保存最常用的数据D、高速缓存存储器作为主存中数据和指令子集的缓冲区正确答案:C18、下列关于I/O通道的说法中,错误的是A、I/O通道是一种特殊的处理机B、I/O通道具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作C、通道是中小型主机系统中专门用于I/O的专用计算机D、引入通道能够使CPU从控制I/O的任务中解脱,使CPU与I/O并行工作正确答案:C19、下列关于实时计算的说法中,正确的是A、实时计算的正确性仅依赖于系统计算的逻辑结果B、实时计算的正确性不仅依赖于系统计算的逻辑结果,还依赖于产生正确结果的时间C、实时计算的正确性不仅依赖于系统计算的逻辑结果,还依赖于系统计算所需要的存储空间D、实时计算的正确性仅依赖于系统计算产生正确结果的时间正确答案:B20、产生死锁的必要条件不包括A、不剥夺条件B、环路等待条件C、同步条件D、请求和保持条件正确答案:C21、通常,可执行程序以【】可执行文件的形式存储在磁盘上A、二进制B、十六进制C、八进制D、十进制正确答案:A22、【】用于接收从CPU发来的I/O命令或有关控制信息、设备状态。
操作系统作业(第一章—第四章)一、单项选择1 在计算机系统中配置操作系统的目的是【】。
A 增强计算机系统的功能B 提高系统资源的利用率C 合理组织工作流程以提高系统吞吐量D 提高系统的运行速度2 在操作系统中采用多道程序设计技术,能有效提高CPU、内存和I/O设备的【】。
A 灵活性B 可靠性C 兼容性D 利用率3 在操作系统中,并发性是指若干事件【】发生。
A 在同一时刻B 一定不在同一时刻C 在某一时间间隔内D 依次在不同时间间隔内4 以下不属于衡量操作系统性能指标的是【】。
A 作业的大小B 资源利用率C 吞吐量D 周转时间5 下列选项中,操作系统提供给应用程序的接口是【】。
A 系统调用B 中断C 函数D 原语6 在分时系统中,当用户数为50时,为了保证响应时间不超过1s,选取的时间片最大值为【】。
A 10msB 20msC 50msD 100ms7 假设就绪队列中有10个就绪进程,以时间片轮转方式进行进程调度,如果时间片为180ms,切换开销为20ms。
如果将就绪进程增加到30个,则系统开销所占的比率为【】。
A 10%B 20%C 30%D 90%8 中断系统一般由相应的【】组成。
A 硬件B 软件C 硬件和软件D 固件9 以下工作中,【】不是创建进程所必须的。
A 创建进程的PCB B 为进程分配内存C 为进程分配CPUD 将PCB插入就绪队列10 系统中有5个用户进程且CPU工作于用户态,则处于就绪状态或阻塞状态的进程数最多分别为【】。
A 5,4B 4,0C 0,5D 4,511 如果系统中有n个进程,则就绪队列中进程的个数最多为【】。
A 1B n-1C nD n+112 一次I/O操作的结束,有可能导致一个或几个进程【】。
A 由阻塞变为就绪B 由运行变为就绪C 由阻塞变为运行D 由就绪变为运行13 某个运行中的进程要申请打印机,则它的状态变为【】。
A 就绪B 阻塞C 创建D 挂起14 【】必然会引起进程切换。
优先权调度算法的类型
1.非抢占式优先权调度算法:
非抢占式优先权调度算法是指一旦一个进程开始执行,其他进程无法抢占其CPU资源,直到该进程完成或主动释放CPU。
这种类型的优先权调度算法具有简单和易于实现的特点,但容易导致饥饿问题,即一些低优先级的进程可能永远无法执行。
2.抢占式优先权调度算法:
抢占式优先权调度算法允许进程在执行过程中被其他优先级更高的进程抢占CPU资源。
这种类型的优先权调度算法可以有效解决饥饿问题,但实现相对复杂,需要考虑进程状态保存和恢复的问题。
3.静态优先权调度算法:
静态优先权调度算法是在进程创建时就给予每个进程一个优先级,之后不再改变。
这种类型的优先权调度算法适用于优先级相对固定、难以变化的场景。
但是,静态优先权调度算法可能导致低优先级进程无法获得足够的CPU使用时间。
4.动态优先权调度算法:
动态优先权调度算法是根据一定规则和策略不断调整进程的优先级。
这种类型的优先权调度算法可以根据进程的行为和状态来调整优先级,有助于提高系统的性能和公平性。
5.多级队列优先权调度算法:
多级队列优先权调度算法将进程按优先级划分为多个队列,每个队列拥有不同的优先级范围。
进程首先进入最高优先级队列,只有在该队列中
没有可运行的进程时,才会调度下一个优先级较低的队列。
这种类型的优先权调度算法可以根据不同的优先级范围进行调度,提高系统的资源利用率和响应速度。
综上所述,优先权调度算法可以根据是否抢占、是否静态、是否动态以及是否多级队列来进行划分。
不同类型的优先权调度算法在不同的场景下有各自的优势和适用性,选择合适的算法可以提高系统的性能和用户体验。
操作系统:进程调度算法详解之FCFS和SPF篇前⾔:在学习操作系统的时候,总是可以听到⼀些与“调度”相关的东西。
记得刚学计算机操作系统的时候,总是觉得调试是⼀个很⾼⼤上的东西,不敢太深⼊地去接触。
这可能是因为学⽣时代的我在算法⽅⾯并不强,⽽这些调度过程⼜常以算法的形式出现在课本上。
本⾝上这确实是⼀些算法。
我对这些算法有⼀些抗拒,可能当时是被DotA给迷惑了吧。
现在倒真是感觉算法是⼀个迷⼈的东西,有时在没有学到某⼀种算法,⾃⼰也可以在已有的⼀些算法思维的基础上想出个⼀⼆来,这让⼈很爽。
本⽂也是我在温习《计算机操作系统》这本书时候,想着来⽤代码的形式来描述这些迷⼈的东西。
概述:我们在编码开发的时候,就是在跟进程打交道。
不过,可能由于⼀些⾼级语⾔的封装,我们在开发的过程可能感觉不到我们的代码对进程的创建或调⽤过程。
当然,这也不是本⽂的重点。
但是,操作系统却不能不理会进程。
下⾯我就使⽤Java开发语⾔来模拟⼀下进程在操作系统中的调度过程。
进程调度算法:1.FCFS:FCFS的意思是先来先服务(First Come First Service)。
顾名思义就是按照进程被添加到等待队列的先后顺序来进⾏调⽤的。
这⾥可以先来看⼀张FCFS的算法过程图:图-1 进程FCFS调度过程从上⾯的过程图中就可以清楚地知道,进程在整个过程被调度的顺序及过程。
不过,不知道读者有没有注意到⼀个问题,那就是上⾯的图中,我们是让进程(矩形)紧紧挨着的。
那么有没有什么情况是让这些矩形不在⼀起紧挨着呢?如果你是⼀个注意细节的⼈,我想你已经注意到了这⼀点吧。
说到这⾥,我想问另⼀个问题,如果当我们的队列中的进程都运⾏完成,⽽等待队列中已经没有进程了,那么这个时候要怎么处理?在这种情况下CPU⼀直是处于空闲的状态,直到等待队列中出现了⼀个进程请求处理机来运⾏。
所以,在模拟程序⾥我们就可以直接让时间跳过这⼀段。
关于上⾯的⼀点,在我们的代码⾥也要考虑到。
处理机调度和死锁习题第一部分:处理机的调度一、单项选择题1.时间片轮转调度算法是为了()。
A.多个终端能够得到系统及时响应B.使系统变得高效C.优先级较高的进程得到及时响应D.需要CPU时间最少的进程最先做2.在单处理器的多进程系统中,进程什么时候占用处理器以及决定占用时间的长短是由()决定的。
A.进程相应的代码长度B.进程总共需要运行的时间C.进程特点和进程调度策略D.进程完成什么功能3.()有利于CPU繁忙型的作业,而不利于}/0繁忙型的作业。
A.时间片轮转调度算法B.先来先服务调度算法C.短作业(进程)优先算法D.优先权调度算法4.下面有关选择进程调度算法的准则中不正确的是()。
A.尽快响应交互式用户的请求B.尽量提高处理器利用率C.尽可能提高系统吞吐量D.适当增长进程就绪队列的等待时间5.设有4个作业同时到达,每个作业的执行时间均为2h,它们在一台处理器上按单道运行,则平均周转时间为()。
A.1h B.5h C.2.5h D.8h6.若每个作业只能建立一个进程,为了照顾短作业用户,应采用();为了照顾紧急作业用户,应采用();为了能实现人机交互,应采用();而能使短作业.长作和交互作业用户都满意,应采用()。
A.FCFS调度算法B.短作业优先调度算法C.时间片轮转调度算法D.多级反馈队列调度算法E.剥夺式优先级调度算法7.()优先级是在创建进程时确定的,确定之后在整个运行期间不再改变。
A.先来先服务B.动态C.短作业D.静态8.现在有三个同时到达的作业J1,J2和J3,它们的执行时间分别是T1,T2,T3,且T1 <T2 <T3。
系统按单道方式运行且采用短作业优先调度算法,则平均周转时间是()。
A.T1 + T2 + T3 B.(3 x Tl+2 x T2 + T3)/3C.(T1+T2+T3)/3 D.(TI+2 x T2+3 x T3 )/39.设有三个作业,其运行时间分别是2h,5h,3h,假定它们同时到达,并在同一台处理器上以单道方式运行,则平均周转时间最小的执行顺序是()。
抢占式优先级调度算法
抢占式优先级调度算法是一种常用的操作系统进程调度算法,其主要
原理是将进程按照优先级进行排序,然后选择优先级最高的进程进行执行,同时当出现更高优先级的进程时,正在执行的进程会被抢占,优先级更高
的进程得以执行。
这种调度算法的优点是能够优先执行重要性高的进程,尤其是对于实
时性要求高的系统而言,抢占式优先级调度算法确保了高优先级进程的及
时响应和执行。
其次,该算法在实现上相对简单,容易在多处理器系统中
进行实现。
然而,抢占式优先级调度算法也存在一些缺点。
首先,由于优先级的
设置需要有明确的标准,因此可能存在优先级过多或者优先级设计不合理
的问题。
其次,由于是按优先级进行调度,较低优先级的进程容易长时间
等待执行,降低了系统的资源利用率;同时,当出现优先级较高的进程时,抢占式调度会导致正在执行的进程被强制停止,造成不必要的系统开销。
为了克服抢占式优先级调度算法的缺陷,可以采用多种方法进行改进。
一种常见的方法是将进程的优先级根据时间的长短进行动态调整,即优先
级随时间而变化。
另外,可以通过引入多级反馈队列的方式,使得低优先
级的进程能够持续得到调度和执行的机会,从而提高系统资源利用率。
此外,还可以采用不同进程之间互相协作的方式,实现更加高效的进程调度
机制。
总之,抢占式优先级调度算法是一种适用于实时性要求高的系统的进
程调度算法,但其应用存在一定的局限性。
针对不同的应用场景和要求,
可以采用不同的调度算法进行优化和改进,从而实现更加高效、快速、可靠的进程调度和执行。
抢占式优先级调度算法是什么意思系统把处理机分配给优先权最⾼的进程,使之执⾏。
但在其执⾏期间,只要⼜出现了另⼀个其优先权更⾼的进程,进程调度程序就⽴即停⽌当前进程(原优先权最⾼的进程)的执⾏,重新将处理机分配给新到的优先权最⾼的进程。
本教程操作环境:windows7系统、C++17版本、Dell G3电脑。
抢占式优先权调度算法在这种⽅式下,系统把处理机分配给优先权最⾼的进程,使之执⾏。
但在其执⾏期间,只要⼜出现了另⼀个其优先权更⾼的进程,进程调度程序就⽴即停⽌当前进程(原优先权最⾼的进程)的执⾏,重新将处理机分配给新到的优先权最⾼的进程。
因此,在采⽤这种调度算法时,是每当系统中出现⼀个新的就绪进程i 时,就将其优先权Pi与正在执⾏的进程j的优先权Pj进⾏⽐较。
如果Pi≤Pj,原进程Pj便继续执⾏;但如果是Pi>Pj,则⽴即停⽌Pj的执⾏,做进程切换,使i 进程投⼊执⾏。
显然,这种抢占式的优先权调度算法能更好地满⾜紧迫作业的要求,故⽽常⽤于要求⽐较严格的实时系统中,以及对性能要求较⾼的批处理和分时系统中。
具体代码:1 #include #include #include using namespace std;using std::cout;struct PCB23 { // 进程名45string name; // 到达时间67int arrivetime; // 运⾏时间89int runtime;1011// 仍需运⾏时间1213int resttime; // 开始时间1415int starttime; // 完成时间1617int endtime; // 运⾏次数1819int runcount; // 周转时间2021int zhouzhuangtime; // 带权周转时间(周转时间/运⾏时间)2223double weightzhouzhuangtime; // 优先级(静态)2425int priority;26272829 PCB *next;3031 };// 进程数int num_process;// 记录所有进程的总时间int totaltime;// 记录所有进程的总带权周转时间double weighttotaltime;32333435 PCB *createPCB()3637 { int i; // 定义队⾸、队尾3839 PCB *head, *rear; // 初始化4041 head = rear = NULL; // 临时指针变量4243 PCB *p; cout<<"请输⼊进程数量:"; cin>>num_process; for(i = 0; i < num_process; i++)4445 { // 初始化⼀个空间给进程4647 p = new PCB; cout<<"请依次输⼊第"<>p->name>>p->priority>>p->arrivetime>>p->runtime;4849 p->resttime = p->runtime;5051 p->runcount = 1;5253 totaltime += p->runtime;5455 p->starttime = 0;5657 p->endtime = 0;5859 p->zhouzhuangtime = 0;6061 p->weightzhouzhuangtime = 0;6263 p->next = NULL; // 存⼊链表中6465if(rear == NULL)6667 {69 head = p;7071 rear = p;7273 } else7475 {7677 rear->next = p;7879 rear = p;8081 }82838485 } return head;8687 }// 链表插⼊排序PCB *insertSort(PCB *head)8889 { /*9091 1、先在原链表中以第⼀个节点为⼀个有序链表,其余节点为待定节点;9293 2、从待定节点中取节点,插⼊到有序链表中相应位置;9495 3、实际上只有⼀条链表,在排序中,实际只增加了⼀个⽤于指向剩下需要排序节点的头指针。
很有用。
例如,在实际系统中可把处理紧急情况的报警进程赋予最高优先数,一旦有紧急事件发生时,触发报警进程就绪,进程调度就让这个报警进程抢占处理器进行紧急处理和发出警告信号。
3.画出具有快表的分页系统的地址变换图。
答:
4.简述避免死锁的银行家算法中的安全检测算法的思想。
答:设置两个向量:
Free:是一个纵向量,表示系统空闲的各类资源数
Finish:是一个纵向量,表示进程能否得到全部资源使之运行完成
执行安全算法开始时:
Free = Available,Finish[i]:=false(i=1,2,…,n)
(1)从进程集中找一个能满足下述条件的进程Pi
① Finish[i] = false(未定) ② Need[i] <= Free (资源够分)。
抢占式优先级调度算法这种调度算法的核心思想是根据任务的紧急程度和重要性来确定优先级,从而合理安排任务执行的顺序,以尽可能快地响应用户的操作。
1.首先,为每个任务分配一个优先级。
该优先级可以是一个整数值,最小为0,表示最低优先级,最大为n-1,其中n为任务总数,表示最高优先级。
2.在任务队列中,根据任务的优先级进行排序,将优先级高的任务放在队列的前面。
3.当系统调度一个任务时,它会选择队列中优先级最高的任务执行。
执行过程中,如果有具有更高优先级的任务进入队列,当前任务将被抢占,并被新的任务替代。
4.被抢占的任务将进入就绪状态,等待重新调度。
系统会根据任务的优先级再次选择一个最高优先级的任务执行。
5.当一个任务执行完毕或发生阻塞时,系统会重新选择一个最高优先级的任务执行。
1.高优先级任务的响应时间短。
根据优先级的定义,高优先级的任务会被优先执行,因此高优先级任务的响应时间相对较低,可以快速响应用户的操作。
2.可靠性较强。
由于高优先级任务会抢占低优先级任务,因此系统可以及时处理紧急任务,提高系统的可靠性。
3.可能导致低优先级任务饥饿。
由于高优先级任务会抢占低优先级任务,低优先级任务可能会一直被推迟执行,导致低优先级任务长时间无法得到执行。
为了解决这个问题,可以引入时间片轮转算法,给低优先级任务分配一定的执行时间,保证它们能够得到执行。
4.容易产生优先级反转问题。
当一个任务在执行期间需要访问共享资源时,如果它被一个优先级较低的任务阻塞,可能会导致优先级反转问题。
为了解决这个问题,可以使用优先级继承或者优先级借用的技术。
总结起来,抢占式优先级调度算法是一种简单且常用的调度算法,能够根据优先级对任务进行排序和调度,以实现任务的快速响应和系统的可靠性。
但是它也存在一些问题,如低优先级任务饥饿和优先级反转等,需要结合具体情况进行进一步的优化和改进。
第三章处理机调度与死锁1,高级调度与低级调度的主要任务是什么?为什么要引入中级调度?【解】(1)高级调度主要任务是用于决定把外存上处于后备队列中的那些作业调入内存,并为它们创建进程,分配必要的资源,然后再将新创建的进程排在就绪队列上,准备执行。
(2)低级调度主要任务是决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。
(3)引入中级调度的主要目的是为了提高内存的利用率和系统吞吐量。
为此,应使那些暂时不能运行的进程不再占用宝贵的内存空间,而将它们调至外存上去等待,称此时的进程状态为就绪驻外存状态或挂起状态。
当这些进程重又具备运行条件,且内存又稍有空闲时,由中级调度决定,将外存上的那些重又具备运行条件的就绪进程重新调入内存,并修改其状态为就绪状态,挂在就绪队列上,等待进程调度。
3、何谓作业、作业步和作业流?【解】作业包含通常的程序和数据,还配有作业说明书。
系统根据该说明书对程序的运行进行控制。
批处理系统中是以作业为基本单位从外存调入内存。
作业步是指每个作业运行期间都必须经过若干个相对独立相互关联的顺序加工的步骤。
作业流是指若干个作业进入系统后依次存放在外存上形成的输入作业流;在操作系统的控制下,逐个作业进程处理,于是形成了处理作业流。
4、在什么情冴下需要使用作业控制块JCB?其中包含了哪些内容?【解】每当作业进入系统时,系统便为每个作业建立一个作业控制块JCB,根据作业类型将它插入到相应的后备队列中。
JCB 包含的内容通常有:1) 作业标识2)用户名称3)用户账户4)作业类型(CPU 繁忙型、I/O芳名型、批量型、终端型)5)作业状态6)调度信息(优先级、作业已运行)7)资源要求8)进入系统时间9) 开始处理时间10) 作业完成时间11) 作业退出时间12) 资源使用情况等5.在作业调度中应如何确定接纳多少个作业和接纳哪些作业?【解】作业调度每次接纳进入内存的作业数,取决于多道程序度。
处理机调度和死锁习题第一部分:处理机的调度一、单项选择题1.时间片轮转调度算法是为了()。
A.多个终端能够得到系统及时响应B.使系统变得高效C.优先级较高的进程得到及时响应D.需要CPU时间最少的进程最先做2.在单处理器的多进程系统中,进程什么时候占用处理器以及决定占用时间的长短是由()决定的。
A.进程相应的代码长度B.进程总共需要运行的时间C.进程特点和进程调度策略D.进程完成什么功能3.()有利于CPU繁忙型的作业,而不利于}/0繁忙型的作业。
A.时间片轮转调度算法B.先来先服务调度算法C.短作业(进程)优先算法D.优先权调度算法4.下面有关选择进程调度算法的准则中不正确的是()。
A.尽快响应交互式用户的请求B.尽量提高处理器利用率C.尽可能提高系统吞吐量D.适当增长进程就绪队列的等待时间5.设有4个作业同时到达,每个作业的执行时间均为2h,它们在一台处理器上按单道运行,则平均周转时间为()。
A.1h B.5h C.2.5h D.8h6.若每个作业只能建立一个进程,为了照顾短作业用户,应采用();为了照顾紧急作业用户,应采用();为了能实现人机交互,应采用();而能使短作业.长作和交互作业用户都满意,应采用()。
A.FCFS调度算法B.短作业优先调度算法C.时间片轮转调度算法D.多级反馈队列调度算法E.剥夺式优先级调度算法7.()优先级是在创建进程时确定的,确定之后在整个运行期间不再改变。
A.先来先服务B.动态C.短作业D.静态8.现在有三个同时到达的作业J1, J2和J3,它们的执行时间分别是T1, T2,T3,且T1 <T2 <T3。
系统按单道方式运行且采用短作业优先调度算法,则平均周转时间是()。
A. T1 + T2 + T3 B.(3 x Tl+2 x T2 + T3)/3C.(T1+T2+T3)/3 D.(TI+2 x T2+3 x T3 )/39.设有三个作业,其运行时间分别是2h, 5h, 3h,假定它们同时到达,并在同一台处理器上以单道方式运行,则平均周转时间最小的执行顺序是()。
[整理]操作系统的三⼤调度机制及算法⽬录操作系统的三⼤调度机制,分别是「进程调度/页⾯置换/磁盘调度算法」。
进程调度算法进程调度算法也称 CPU 调度算法,毕竟进程是由 CPU 调度的。
当 CPU 空闲时,操作系统就选择内存中的某个「就绪状态」的进程,并给其分配 CPU。
什么时候会发⽣ CPU 调度呢?通常有以下情况:1. 当进程从运⾏状态转到等待状态;2. 当进程从运⾏状态转到就绪状态;3. 当进程从等待状态转到就绪状态;4. 当进程从运⾏状态转到终⽌状态;其中发⽣在 1 和 4 两种情况下的调度称为「⾮抢占式调度」,2 和 3 两种情况下发⽣的调度称为「抢占式调度」。
⾮抢占式的意思就是,当进程正在运⾏时,它就会⼀直运⾏,直到该进程完成或发⽣某个事件⽽被阻塞时,才会把 CPU 让给其他进程。
⽽抢占式调度,顾名思义就是进程正在运⾏的时,可以被打断,使其把 CPU 让给其他进程。
那抢占的原则⼀般有三种,分别是:时间⽚原则、优先权原则、短作业优先原则。
你可能会好奇为什么第 3 种情况也会发⽣ CPU 调度呢?假设有⼀个进程是处于等待状态的,但是它的优先级⽐较⾼,如果该进程等待的事件发⽣了,它就会转到就绪状态,⼀旦它转到就绪状态,如果我们的调度算法是以优先级来进⾏调度的,那么它就会⽴马抢占正在运⾏的进程,所以这个时候就会发⽣ CPU 调度。
那第 2 种状态通常是时间⽚到的情况,因为时间⽚到了就会发⽣中断,于是就会抢占正在运⾏的进程,从⽽占⽤ CPU。
调度算法影响的是等待时间(进程在就绪队列中等待调度的时间总和),⽽不能影响进程真在使⽤ CPU 的时间和 I/O 时间。
接下来,说说常见的调度算法:1. 先来先服务调度算法2. 最短作业优先调度算法3. ⾼响应⽐优先调度算法4. 时间⽚轮转调度算法5. 最⾼优先级调度算法6. 多级反馈队列调度算法先来先服务调度算法最简单的⼀个调度算法,就是⾮抢占式的先来先服务(First Come First Severd, FCFS)算法了。
一、设计目的通过CPU调度相关算法的实现,了解CPU调度的相关知识,通过实现CPU调度算法,理解CPU的管理,以及不同的CPU调度算法实现过程。
体会算法的重要性。
二、设计要求1、编写算法,实现FCFS、非抢占SJF、可抢占优先权调度2、针对模拟进程,利用CPU调度算法进行调度3、进行算法评估,计算平均周转时间和平均等待时间4、调度所需的进程参数由输入产生(手工输入或者随机数产生)5、输出调度结果6、输出算法评价指标三、设计说明1、采用数组、指针2、FCFS先来先服务调度算法是一种最简单的调度算法,当作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个最先进入该队列的作业3、非抢占SJF短作业优先调度算法,是指对短作业有限调度算法。
是从后备队列中选择一个估计运行时间最短的作业将他们调入内存。
4、可抢占优先权调度在这种方式下,系统把处理机分配给优先权最高的进程,使之执行。
但在其执行期间,只要出现另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理及分配给新到的优先权最高的进程。
四、程序流程图。
1、可抢占优先权调度算法2、FCFS3、非抢占SJF五、程序部分1、FCFS#include<>#include<>typedef struct PCB{char name[10];char state;int arrivetime;int starttime;int finishtime;int servicetime;float turnaroundtime;float weightedturnaroundtime;struct PCB *next;}pcb;int time;pcb *head=NULL,*p,*q;void run_fcfs(pcb *p1){time=p1->arrivetime>timep1->arrivetime:time;p1->starttime=time;printf("\n现在时间是%d,开始运行作业%s\n",time,p1->name);time+=p1->servicetime;p1->state="T";p1->finishtime=time;p1->turnaroundtime=p1->finishtime-p1->arrivetime;p1->weightedturnaroundtime=p1->turnaroundtime/p1->servicetime;printf(" 到达时间开始时间服务时间完成时间周转时间带权周转时间\n ");printf("%6d%10d%10d%8d%%\n",p1->arrivetime,p1->starttime,p1->servicetime,p1->finishtime,p1->turnaroundtime, p1->weightedturnaroundtime);}void fcfs(){int i,j;p=head;for(i=0;i<n;i++){if(p->state=='F'){q=p;run_fcfs(q);}p=p->next;}}void getInfo(){int num;printf("\n作业个数:");scanf("%d",&n);for(num=0;num<n;num++){p=(pcb*)malloc(sizeof(pcb));printf("依次输入:进程名到达时间服务时间\n");scanf("%s%d%d",&p->name,&p->arrivetime,&p->servicetime);if(head==NULL){head=p;q=p;time=p->arrivetime;}if(p->arrivetime<time)time=p->arrivetime;q->next=p;p->starttime=0;p->finishtime=0;p->turnaroundtime=0;p->weightedturnaroundtime=0;p->next=NULL;p->state='F';q=p;}}void main(){ system("graftabl 936");printf("先来先服务算法模拟");getInfo();p=head;fcfs();}2、非抢占SJF#include<>#include<>#define MAX 100struct jcb{char name[10];float arrivetime;float starttime;float finishtime;float servicetime;float zztime;float avezztime;};struct jcb a[MAX];void input(jcb *p,int N){ int i;printf("请分别输入\n\t进程名到达时间服务时间\n\n");for(i=0;i<=N-1;i++){printf("请输入第%d个进程信息:",i+1);scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);printf("\n");}}void Print(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float avezztime,int N){int k;printf("调度顺序:");printf("%s",p[0].name);for(k=1;k<N;k++){printf("-->%s",p[k].name);}printf("\n\n");printf("\t\t\t进程信息:\n");printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tavezz\n");for(k=0;k<=N-1;k++){printf("%s\t%\t%\t%\t%\t%\t%\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p [k].starttime,p[k].finishtime,p[k].zztime,p[k].avezztime);}}void sort(jcb *p,int N){int i,j;for(i=0;i<=N-1;i++)for(j=0;j<=i;j++)if(p[i].arrivetime<p[j].arrivetime){jcb temp;temp=p[i];p[i]=p[j];p[j]=temp;}}void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &avezztime,int N){int k;for(k=0;k<=N-1;k++){if(k==0){p[k].starttime=p[k].arrivetime;p[k].finishtime=p[k].arrivetime+p[k].servicetime;}else{p[k].starttime=p[k-1].finishtime;p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}}for(k=0;k<=N-1;k++){p[k].zztime=p[k].finishtime-p[k].arrivetime;p[k].avezztime=p[k].zztime/p[k].servicetime;}}void jcbf(jcb *p,int N){ float arrivetime=0, servicetime=0, starttime=0, finishtime=0, zztime=0, avezztime=0;int m,n,next,k,i=0;float min;sort(p,N);for(m=0;m<N-1;m++){if(m==0)p[m].finishtime=p[m].arrivetime+p[m].servicetime;elsep[m].finishtime=p[m-1].finishtime+p[m].servicetime;for( n=m+1;n<=N-1;n++){if(p[n].arrivetime<=p[m].finishtime)i++;}min=p[m+1].servicetime;next=m+1;for(k=0;k<m+i;k++){if(p[k+1].servicetime<min){min=p[k+1].servicetime;next=k+1;}}{jcb temp;temp=p[m+1];p[m+1]=p[next];p[next]=temp;}deal(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N);Print(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N);}}int main(){int N,*b; char ch;while(1){system("CLS");system("graftabl 936");printf("\t\t\t------短作业优先调度算法------\n");printf("输入进程个数:");scanf("%d",&N);if(N>MAX){printf("\t!!输入的作业数目太大,请输入不大于%d的整数\n",MAX); printf("按Q或者q退出程序,按其他任意键继续测试...");ch=getch();if(ch=='Q'||ch=='q'){break;}else continue;}input(a,N);jcb *b=a;jcbf(b,N);printf("按Q或者q退出程序,按其他任意键继续测试...");ch=getch();if(ch=='Q'||ch=='q'){break;}}return 0;getch();}3、可抢占优先权调度算法#include<>#include<>#include<>#include<>#include<>#include<>typedef char string[10];struct task{string name;int arrTime;int serTime;int waiTime;int begTime;int finTime;int turTime;int wTuTime;int priority;int finish;}JCB[10];int num;void input(){int i;system("cls");printf("\n请输入作业数量:");scanf("%d",&num);for(i=0;i<num;i++){printf("\n请输入作业NO.%d:\n",i);printf("作业名称:");scanf("%s",JCB[i].name);printf("到达时间:");scanf("%d",&JCB[i].arrTime);printf("服务时间:");scanf("%d",&JCB[i].serTime);JCB[i].priority=0;JCB[i].finish=0;}}int HRN(int pre){int current=1,i,j;for(i=0;i<num;i++){JCB[i].waiTime=JCB[pre].finTime-JCB[i].arrTime;JCB[i].priority=(JCB[i].waiTime+JCB[i].serTime)/JCB[i].serTime;}for(i=0;i<num;i++){if(!JCB[i].finish){current=i;break;}}for(j=i;j<num;j++){if(!JCB[j].finish){if(JCB[current].arrTime<=JCB[pre].finTime){if(JCB[j].arrTime<=JCB[pre].finTime&&JCB[j].priority>JCB[current].priority) current=j;}else{if(JCB[j].arrTime<JCB[current].arrTime)current=j;if(JCB[j].arrTime==JCB[current].arrTime)if(JCB[j].priority>JCB[current].priority)current=j;}}}return current;}void runing(int i,int times,int pre,int staTime,int endTime){if(times=0){JCB[i].begTime=JCB[i].arrTime;JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;JCB[i].turTime=JCB[i].serTime;JCB[i].wTuTime=;staTime=JCB[i].begTime;}else{if(JCB[i].arrTime>JCB[pre].finTime)JCB[i].begTime=JCB[i].arrTime;elseJCB[i].begTime=JCB[pre].finTime;JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;JCB[i].turTime=JCB[i].finTime-JCB[i].arrTime;JCB[i].wTuTime=JCB[i].turTime/JCB[i].serTime;}if(times==num-1)endTime=JCB[i].finTime;JCB[i].finish=1;}void print(int i,int times){if(times==0){printf("名称到达时间服务时间开始时间完成时间周转时间带权周转时间\n");}printf("%3s%9d%9d%9d%9d%9d%9d\n",JCB[i].name,JCB[i].arrTime,JCB[i].serTime,JCB[ i].begTime,JCB[i].finTime,JCB[i].turTime,JCB[i].wTuTime);}void check(){int i;int staTime,endTime,sumTurTime=,sumWTuTime=,aveturTime,aveWTuTime;int current=0,times=0,pre=0;JCB[pre].finTime=0;for(i=0;i<num;i++){JCB[i].finish=0;}staTime,endTime,sumTurTime=,sumWTuTime=,aveturTime,aveWTuTime;current=0;times=0;pre=0;printf("-------------------------------------------\n");for(i=0;i<num;i++){JCB[i].finish=0;}staTime,endTime,sumTurTime=,sumWTuTime=,aveturTime,aveWTuTime;current=0;times=0;pre=0;printf("-------HRRN-------------------------------------\n");for(times=0;times<num;times++){current=HRN(pre);runing(current,times,pre,staTime,endTime);print(current,times);pre=current;}for(i=0;i<num;i++){sumTurTime+=JCB[i].turTime;sumWTuTime+=JCB[i].wTuTime;}aveturTime=sumTurTime/num;aveWTuTime=sumWTuTime/num;printf("<计与平均值>%9d%9d%9d%9d\n",NULL,sumTurTime,aveturTime,aveWTuTime);printf("-------------------------------------------------------\n");}void main(){char again;system("graftabl 936");do{system("cls");printf("请输入4组数据:");input();check();printf("Continue...(Y/N):");do{again=getch();}while(again!='Y'&&again!='y'&&again!='N'&&again!='n');}while(again=='Y'||again=='y');getch();}六、运行结果七、实验总结1、FCFS算法,即先来先服务,就是每次从就绪队列中选择一个最先进入队列的进程,把CPU分配给它,令它运行。
抢占式优先级调度算法引言操作系统是计算机系统中最底层的软件,负责管理和协调计算机的硬件和软件资源。
其中一个重要的组成部分是任务调度算法,它决定了CPU在多个任务之间的分配和执行顺序。
抢占式优先级调度算法是一种常用的调度算法,在本文中将对其进行详细讨论。
什么是抢占式优先级调度算法抢占式优先级调度算法是一种基于任务优先级的调度算法,它可以在任何时刻中断正在执行的任务,并将CPU分配给具有更高优先级的任务。
换句话说,当有更紧急的任务到达时,抢占式优先级调度算法会中断当前正在执行的任务,将CPU分配给优先级更高的任务,从而确保紧急任务的及时执行。
抢占式优先级调度算法的实现方式抢占式优先级调度算法可以采用不同的实现方式。
以下是一些常用的实现方式:静态优先级静态优先级是在任务创建时即确定的。
每个任务被分配一个固定的优先级值,较高的值表示较高的优先级。
在执行过程中,优先级不会发生变化。
动态优先级动态优先级是在执行过程中根据任务的行为和状态动态调整的。
比如,当一个任务等待一个资源时,它的优先级可能会被降低,让其他可以执行的任务有机会运行。
抢占式优先级调度算法的特点高响应性抢占式优先级调度算法的主要目标是提供高响应性。
当有紧急任务到达时,当前正在执行的任务会被立即中断,CPU会被分配给优先级更高的任务。
这样可以确保紧急任务能够及时得到处理,提高系统的响应速度。
公平性抢占式优先级调度算法通常会给予所有任务公平的执行机会。
每个任务都有一个优先级,所有任务按照优先级顺序执行。
这种方式可以确保每个任务都有机会执行,避免某些任务长时间占用CPU,导致其他任务无法得到执行。
多级优先级抢占式优先级调度算法通常支持多级优先级。
不同的任务可以被分为多个优先级组,而每个组内部任务的优先级相同。
这样可以更好地控制任务的执行顺序,提高系统的灵活性和可控性。
抢占式优先级调度算法的应用场景实时系统实时系统对任务的响应时间要求非常高,需要尽可能减小任务的执行延迟。
抢占式优先级调度算法例题平均周转时间抢占式优先级调度算法是一种常用的调度算法,它能够有效地提高系统的响应速度和吞吐量。
下面给出一个例题,用以说明抢占式优先级调度算法的平均周转时间的计算方法。
假设有三个进程,分别为A、B、C,它们的到达时间、服务时间和优先级如下表所示:| 进程 | 到达时间 | 服务时间 | 优先级 ||------|----------|----------|--------|| A | 0 | 4 | 1 || B | 1 | 3 | 2 || C | 2 | 2 | 3 |假设时间片为1,计算平均周转时间。
按照抢占式优先级调度算法的规则,先执行优先级最高的进程A,执行完后执行优先级次高的进程B,最后执行优先级最低的进程C。
因为时间片为1,所以A进程的执行过程如下:| 时间 | 进程 ||------|------|| 0 | A || 1 | A || 2 | A || 3 | A,B || 4 | B,C || 5 | B,C || 6 | B,C |因为进程A、B、C的服务时间分别为4、3、2,所以它们的完成时间分别为4、7、9。
根据此可以计算出它们的周转时间和带权周转时间:| 进程 | 完成时间 | 周转时间 | 带权周转时间 ||------|----------|----------|--------------|| A | 4 | 4 | 4/4=1 || B | 7 | 6 | 6/3=2 || C | 9 | 7 | 7/2=3.5 | 所以,这三个进程的平均周转时间为(4+6+7)/3=5.67,平均带权周转时间为(1+2+3.5)/3=2.17。