短作业优先调度和时间片轮转调度算法
2022年南昌工程学院软件工程专业《操作系统》科目期末试卷A(有答案)

2022年南昌工程学院软件工程专业《操作系统》科目期末试卷A(有答案)一、选择题1、假设4个作业到达系统的时刻和运行时间见表。
系统在t=2时开始作业调度。
若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是()。
A.J2、J3B.J1、J4C.J2、J4D.J1、J32、执行系统调用的过程包括如下主要操作:①返回用户态②执行陷入(trap)指令③传递系统调用参数④执行相应的服务程序正确的执行顺序是()A.②->③->①->④B.②->④->③->①C.③->②->④->①D.③->④->②->①3、银行家算法在解决死锁问题中用于()。
A.预防死锁B.死锁避免C.检测死锁D.解除死锁4、某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台打印机。
当N的取值不超过()时,系统不会发生死锁。
A.4B.5C.6D.75、若每个作业只能建立“一个进程,为了照顾短作业用户,应采用();为了照顾紧急作业用户,应采用():为了实现人机交,应采用():为了使短作业、长作业,和交互作业用户都满意,应采用()。
I.FCFS调度算法II.短作业优先调度算法,III.时间片轮转调度算法IV.多级反馈队列调度算法V.基于优先级的剥夺调度算法A. II、V、I,IVB. I、V、III、IVC. I、II、IV、IIID.II、V、III、IV6、在如下儿种类型的系统中,()采用忙等待I/O是合适的。
a.专门用来控制单1/0设备的系统b.运行…个单任务操作系统的个人计算机,c.作为一个负载很大的网络服务器的上作站A.aB.a.bC.b.cD.c7、用户程序发出磁盘1/0请求后,系统的正确处理流程是()A.用户程序→系统调用处理程序→中断处理程序→设备驱动程序B.用户程序→系统调用处理程序→设备驱动程序→中断处理程序C.用户程序→设备驱动程序→系统调用处理程序→中断处理程序D.用户程序→设备驱动程序→中断处理程序→系统调用处理程序8、在一个文件被用户进程首次打开的过程中,操作系统需做的是()A.将文件内容读到内存中B.将文件控制块读到内存中C.修改文件控制块中的读写权限D.将文件的数据缓冲区首指针返回给用户进程9、在现代操作系统中,文件系统都有效地解决了重名(即允许不同用户的文件可以具有相同的文件名)问题。
实验一、进程调度实验报告

实验一、进程调度实验报告一、实验目的进程调度是操作系统中的核心功能之一,其目的是合理地分配 CPU 资源给各个进程,以提高系统的整体性能和资源利用率。
通过本次实验,我们旨在深入理解进程调度的原理和算法,掌握进程状态的转换,观察不同调度策略对系统性能的影响,并通过实际编程实现来提高我们的编程能力和对操作系统概念的理解。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验原理1、进程状态进程在其生命周期中会经历不同的状态,包括就绪态、运行态和阻塞态。
就绪态表示进程已经准备好执行,只等待 CPU 分配;运行态表示进程正在 CPU 上执行;阻塞态表示进程由于等待某个事件(如 I/O操作完成)而暂时无法执行。
2、调度算法常见的进程调度算法有先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。
先来先服务算法按照进程到达的先后顺序进行调度。
短作业优先算法优先调度执行时间短的进程。
时间片轮转算法将 CPU 时间划分成固定大小的时间片,每个进程轮流获得一个时间片执行。
四、实验内容1、设计并实现一个简单的进程调度模拟器定义进程结构体,包含进程 ID、到达时间、执行时间、剩余时间等信息。
实现进程的创建、插入、删除等操作。
实现不同的调度算法。
2、对不同调度算法进行性能测试生成一组具有不同到达时间和执行时间的进程。
分别采用先来先服务、短作业优先和时间片轮转算法进行调度。
记录每个算法下的平均周转时间、平均等待时间等性能指标。
五、实验步骤1、进程结构体的定义```c++struct Process {int pid;int arrivalTime;int executionTime;int remainingTime;int finishTime;int waitingTime;int turnaroundTime;};```2、进程创建函数```c++void createProcess(Process processes, int& numProcesses, int pid, int arrivalTime, int executionTime) {processesnumProcessespid = pid;processesnumProcessesarrivalTime = arrivalTime;processesnumProcessesexecutionTime = executionTime;processesnumProcessesremainingTime = executionTime;numProcesses++;}```3、先来先服务调度算法实现```c++void fcfsScheduling(Process processes, int numProcesses) {int currentTime = 0;for (int i = 0; i < numProcesses; i++){if (currentTime < processesiarrivalTime) {currentTime = processesiarrivalTime;}processesistartTime = currentTime;currentTime += processesiexecutionTime;processesifinishTime = currentTime;processesiwaitingTime = processesistartTime processesiarrivalTime;processesiturnaroundTime = processesifinishTime processesiarrivalTime;}}```4、短作业优先调度算法实现```c++void sjfScheduling(Process processes, int numProcesses) {int currentTime = 0;int minExecutionTime, selectedProcess;bool found;while (true) {found = false;minExecutionTime = INT_MAX;selectedProcess =-1;for (int i = 0; i < numProcesses; i++){if (processesiarrivalTime <= currentTime &&processesiremainingTime < minExecutionTime &&processesiremainingTime > 0) {found = true;minExecutionTime = processesiremainingTime;selectedProcess = i;}}if (!found) {break;}processesselectedProcessstartTime = currentTime;currentTime += processesselectedProcessremainingTime;processesselectedProcessfinishTime = currentTime;processesselectedProcesswaitingTime =processesselectedProcessstartTime processesselectedProcessarrivalTime;processesselectedProcessturnaroundTime =processesselectedProcessfinishTime processesselectedProcessarrivalTime;processesselectedProcessremainingTime = 0;}}```5、时间片轮转调度算法实现```c++void rrScheduling(Process processes, int numProcesses, int timeSlice) {int currentTime = 0;Queue<int> readyQueue;for (int i = 0; i < numProcesses; i++){readyQueueenqueue(i);}while (!readyQueueisEmpty()){int currentProcess = readyQueuedequeue();if (processescurrentProcessarrivalTime > currentTime) {currentTime = processescurrentProcessarrivalTime;}if (processescurrentProcessremainingTime <= timeSlice) {currentTime += processescurrentProcessremainingTime;processescurrentProcessfinishTime = currentTime;processescurrentProcesswaitingTime =processescurrentProcessstartTime processescurrentProcessarrivalTime;processescurrentProcessturnaroundTime =processescurrentProcessfinishTime processescurrentProcessarrivalTime;processescurrentProcessremainingTime = 0;} else {currentTime += timeSlice;processescurrentProcessremainingTime = timeSlice;readyQueueenqueue(currentProcess);}}}```6、性能指标计算函数```c++void calculatePerformanceMetrics(Process processes, int numProcesses, double& averageWaitingTime, double& averageTurnaroundTime) {double totalWaitingTime = 0, totalTurnaroundTime = 0;for (int i = 0; i < numProcesses; i++){totalWaitingTime += processesiwaitingTime;totalTurnaroundTime += processesiturnaroundTime;}averageWaitingTime = totalWaitingTime / numProcesses; averageTurnaroundTime = totalTurnaroundTime / numProcesses;}```7、主函数```c++int main(){Process processes100;int numProcesses = 0;//创建进程createProcess(processes, numProcesses, 1, 0, 5);createProcess(processes, numProcesses, 2, 1, 3);createProcess(processes, numProcesses, 3, 2, 4);createProcess(processes, numProcesses, 4, 3, 2);//先来先服务调度fcfsScheduling(processes, numProcesses);double fcfsAverageWaitingTime, fcfsAverageTurnaroundTime;calculatePerformanceMetrics(processes, numProcesses, fcfsAverageWaitingTime, fcfsAverageTurnaroundTime);cout <<"先来先服务调度的平均等待时间:"<<fcfsAverageWaitingTime << endl;cout <<"先来先服务调度的平均周转时间:"<<fcfsAverageTurnaroundTime << endl;//短作业优先调度sjfScheduling(processes, numProcesses);double sjfAverageWaitingTime, sjfAverageTurnaroundTime;calculatePerformanceMetrics(processes, numProcesses, sjfAverageWaitingTime, sjfAverageTurnaroundTime);cout <<"短作业优先调度的平均等待时间:"<<sjfAverageWaitingTime << endl;cout <<"短作业优先调度的平均周转时间:"<<sjfAverageTurnaroundTime << endl;//时间片轮转调度(时间片为 2)rrScheduling(processes, numProcesses, 2);double rrAverageWaitingTime, rrAverageTurnaroundTime;calculatePerformanceMetrics(processes, numProcesses, rrAverageWaitingTime, rrAverageTurnaroundTime);cout <<"时间片轮转调度(时间片为 2)的平均等待时间:"<< rrAverageWaitingTime << endl;cout <<"时间片轮转调度(时间片为 2)的平均周转时间:"<< rrAverageTurnaroundTime << endl;return 0;}```六、实验结果与分析1、先来先服务调度平均等待时间:40平均周转时间:85分析:先来先服务调度算法简单直观,但对于短作业可能会造成较长的等待时间,导致平均等待时间和平均周转时间较长。
操作系统原理-进程调度

6.3.1 进程调度的功能
6.3.1 进程调度的功能
进程调度的功能 根据一定的调度策略或指标遍历所有的就绪进程, 从中选择一个最合适的进程。 选择该进程的过程实际是用户按特定指标对所有进 程进行排队的过程。
6.3.2 进程调度的时机
6.3.2 进程调度的时机
1.时钟中断 时钟中断是最频繁且周期性地引发进程调度的事件之一。
作业
大小 进入时刻 开始时刻 结束时刻
周转 时间
带权周 转时间
平均周 转时间
平均带权周 转时间
A 20
0
0
20
20 1.00
B 40
10
50
90
80 2.00
C 30
15
20
50
35 1.17 43.75
2.04
D 10
60
90
100
40 4.00
6.4.3 响应比高者优先调度算法
6.4.3 响应比高者优先调度算法
6.3.3 进程调度的方式
进程调度的方式
非抢占方式又称非剥夺式调度
它是指进程调度程序一旦把CPU分配给某进程后,该进程 可以一直运行下去,在它的时间片用完之前,或任务完成 之前,或因为I/O请求被阻塞之前,决不允许其他进程抢走 它的CPU。
抢占方式又称剥夺式调度
抢占方式允许进程调度程序根据某种策略终止当前正在运 行的进程,将其移入就绪队列,再根据某种调度算法选择 另一个进程投入运行。
6.4.1 先来先服务调度算法
先来先服务(First Come First Service,FCFS)
例子:假设系统中有4个作业先后投入,它们的作业 大小和进入时间如表(作业大小和时间单位分钟)
2022年黑龙江八一农垦大学计算机科学与技术专业《操作系统》科目期末试卷A(有答案)

2022年黑龙江八一农垦大学计算机科学与技术专业《操作系统》科目期末试卷A(有答案)一、选择题1、若8个字(字长32位)组成的位示图管理内存,假定用户归还一个块号为100的内,存块,它对应位示图的位置为()。
假定字号、位号、块号均从1开始算起,而不是从0开始。
A.字号为3,位号为5B.字号为4,位号为4C.字号为3,位号为4D.字号为4,位号为52、文件系统中设立打开(open)系统调用的卡要目的是()。
A.把文件从辅存读到内存B.把文件的控制信息从辅存读到内存C.把文件的FAT表信息从辅存读到内存D.把磁盘文件系统的控制管理信息从辅存读到内存3、系统中有3个不同的临界资源R1,R2和R3,被4个进程pl,p2,p3 及p4共享。
各进程对资源的需求为:pl申请RI和R2,p2申请R2和R3,p3申请R1和R3,p4申请R2。
若系统出现死锁,则处于死锁状态的进程数至少是()。
A.1B.2C.3D.44、若每个作业只能建立“一个进程,为了照顾短作业用户,应采用();为了照顾紧急作业用户,应采用():为了实现人机交,应采用():为了使短作业、长作业,和交互作业用户都满意,应采用()。
I.FCFS调度算法II.短作业优先调度算法,III.时间片轮转调度算法IV.多级反馈队列调度算法V.基于优先级的剥夺调度算法A. II、V、I,IVB. I、V、III、IVC. I、II、IV、IIID.II、V、III、IV5、下面哪个不会引起进程创建()A.用户登录B.作业调度C.设备分配D.应用请求6、系统为某进程分配了4个页框,该进程已访问的页号序列为2,0,2,9,3,4,2,8,2,4,8,4,5,若进程要访问的下页的页号为7,依据LRU算法,应淘汰页的页号是()A.2B.3C.4D.87、在一个操作系统中对内存采用页式存储管理方法,则所划分的页面大小()。
A.要依据内存大小而定B.必须相同C.要依据CPU的地址结构而定D.要依据内存和外存而定8、计算机开机后,操作系统最终被加载到()。
各类作业调度算法

各类作业调度算法作业调度算法是操作系统中的重要概念,用于决定计算机系统中各类作业的执行顺序。
它能够优化系统资源利用,提高作业处理效率和用户体验。
本文将介绍各类常见的作业调度算法。
1.先来先服务(FCFS)先来先服务是最简单、最直观的作业调度算法,按照作业到达的顺序来执行。
即当一个作业进入系统后,它将会被放入作业队列的末尾等待执行。
这种算法的优点是简单易懂,缺点是没有考虑作业的执行时间,可能导致长作业占用系统资源时间过长,等待时间较长。
2.最短作业优先(SJF)最短作业优先算法根据每个作业的执行时间来安排执行顺序,执行时间短的作业优先执行。
该算法能够最大限度地缩短作业的等待时间,提高系统的作业处理效率。
然而,这种算法可能会导致长作业饥饿,即长作业始终无法执行,因为每次都有短作业到达系统。
3.最高响应比优先(HRRN)最高响应比优先算法考虑了作业的等待时间和执行时间,通过响应比来确定作业的执行顺序。
响应比定义为(等待时间+执行时间)/执行时间。
该算法能够综合考虑作业的等待时间和执行时间,避免长作业饥饿问题,提高系统的整体响应性能。
4.时间片轮转(RR)时间片轮转算法将系统的执行时间划分为若干个固定大小的时间片,并按照顺序依次分配给作业执行。
每个作业只能在一个时间片内执行,当时间片用完后,如果作业还没有执行完,就需要重新排队等待执行。
时间片轮转算法能够公平地分配系统资源,降低长作业占用系统资源的情况,但也可能导致较大的上下文切换开销。
5.多级队列调度(MLQ)多级队列调度算法将作业划分成多个队列,每个队列具有不同的优先级。
作业首先进入高优先级队列执行,如果执行完后还未完成,就降低其优先级,放入低优先级队列执行。
这样能够确保高优先级作业得到及时执行,同时避免低优先级作业饥饿。
多级队列调度算法常用于实时系统中。
总结来说,作业调度算法有先来先服务、最短作业优先、最高响应比优先、时间片轮转和多级队列调度等。
不同的算法有不同的特点和适用场景,选取合适的作业调度算法能够优化系统资源利用和提高作业处理效率。
计算机操作完整系统期末复习题(带答案)

57计算机操作系统期末复习题第一部分操作系统基本概念一、选择题(选择最确切的一个答案,将其代码填入括号中)1、多道程序设计是指( B )。
A、有多个程序同时进入CPU运行B、有多个程序同时进入主存并行运行C、程序段执行不是顺序的D、同一个程序可以对应多个不同的进程2、从总体上说,采用多道程序设计技术可以( B )单位时间的算题量,但对每一个算题,从算题开始到全部完成所需的时间比单道执行所需的时间可能要( B )。
矚慫润厲钐瘗睞枥庑赖。
A、增加减少B、增加延长C、减少延长D、减少减少3、现代操作系统的两个基本特征是(C)和资源共享。
A、多道程序设计B、中断处理C、程序的并发执行D、实现分时与实时处理-3:C4、以下(C )项功能不是操作系统具备的主要功能。
A、内存管理B、中断处理C、文档编辑D、CPU调度5、用户在一次计算过程中,或者一次事物处理中,要求计算机完成所做的工作的集合,这是指(C)。
A、进程B、程序C、作业D、系统调用6、CPU状态分为系统态和用户态,从用户态转换到系统态的唯一途径是( C )。
A、运行进程修改程序状态字B、中断屏蔽C、系统调用D、进程调度程序7、系统调用的目的是( A )。
A、请求系统服务B、终止系统服务C、申请系统资源D、释放系统资源8、为用户分配主存空间,保护主存中的程序和数据不被破坏,提高主存空间的利用率的是(B )。
A、处理器管理B、存储器管理C、文件管理D、作业管理二、填空题1、计算机操作系统是方便用户、管理和控制计算机_软硬件资源_的系统软件。
2、采用多道程序设计技术能充分发挥处理器与外围设备与外围设备之间并行工作的能力。
3、操作系统目前有五大类型:_批处理_、_分时_、_实时_、_网络_和_分布式_。
4、操作系统的五大功能是:_处理机管理_、_储存管理_、_设备管理_、_信息管理_和_用户接口_。
5、UNIX系统是多用户分时交互型操作系统,DOS系统是单用户单任务操作系统。
动态资源分配算法

动态资源分配算法一、概述动态资源分配算法是指在计算机系统中,根据当前的资源情况和任务需求,动态地分配资源,以达到最优的资源利用效果。
该算法主要应用于操作系统、数据库管理系统、网络服务器等领域。
二、静态资源分配算法与动态资源分配算法的区别静态资源分配算法是指在任务启动之前就已经确定了每个任务所需要的资源,并且将这些资源分配给相应的任务。
而动态资源分配算法则是在任务运行时根据实际需要来进行资源分配。
三、常见的动态资源分配算法1. 抢占式调度抢占式调度是指当一个进程正在执行时,另一个优先级更高的进程需要运行时,操作系统可以暂停当前进程并让更高优先级的进程运行。
这种方式可以保证高优先级进程及时得到执行,但也可能会导致低优先级进程长时间得不到执行。
2. 时间片轮转调度时间片轮转调度是指将所有就绪队列中的进程按照一定顺序排列,并为每个进程规定一个时间片。
当一个进程用完了它的时间片后,它就会被放到队列末尾等待下一次调度。
这种方式可以避免进程长时间得不到执行,但也可能会导致进程频繁地切换,影响系统性能。
3. 优先级调度优先级调度是指根据进程的优先级来进行调度。
高优先级的进程会先被执行,而低优先级的进程则需要等待高优先级进程执行完毕后才能得到执行。
这种方式可以保证高优先级进程及时得到执行,但也可能会导致低优先级进程长时间得不到执行。
4. 最短作业优先调度最短作业优先调度是指在所有就绪队列中选择需要运行的任务中,选择所需时间最短的任务进行执行。
这种方式可以保证任务能够尽快地完成,但也可能会导致长时间运行的任务得不到充分利用。
四、动态资源分配算法的应用场景1. 操作系统操作系统需要根据当前系统资源情况和用户需求来动态分配CPU、内存等资源,以达到最好的性能和用户体验。
2. 数据库管理系统数据库管理系统需要根据当前数据库负载情况和用户请求来动态分配CPU、内存、磁盘等资源,以提高数据库访问效率和可靠性。
3. 网络服务器网络服务器需要根据当前网络流量和用户请求来动态分配带宽、CPU、内存等资源,以提高服务器响应速度和稳定性。
操作系统PV操作的作业参考答案

关于调度算法【例1】下表给出作业I , 2, 3的提交时间和运行时间。
采用先来先服务调度算法和短作业优先调度算 法,试问作业调度次序和平均周转时间各为多少?(时间单位:小时,以十进制进行计算。
)作业号 提交时间 运行时间1 0.0 8.02 0.4 4.031.0 1.0分析解这样的题关键是要根据系统采用的调度算法,弄清系统中各道作业随时间的推进情况。
我们用一个作业执行时间图来形象地表示作业的执行情况,帮助我们理解此题。
采用先来先服务调度算法,是按照作业提交的先后次序挑选作业,先进入的作业优先被挑选。
然后按照排队买票”的 办法,依 次选择 作业。
其 作业执 行时间 图如下:采用短作业优先调度算法,作业调度时根据作业的运行时间,优先选择计算时间短且资源能得满足的 作业。
其作业执行时间图如下:作业提交时间 客柞业陆鳗完成时间系统中只有作业1,于是作业1先被选中。
在8.0时刻,作业1运行完成,这时系统中有两道作业在等待调度,作业2和作业3,按照短作业优先调度算法,作业 3只要运行1个时间单位,而作业 2要运行4个时 间单位,于是作业 3被优先选中,所以作业 3先运行。
待作业3运行完毕,最后运行作业 2。
作业调度的 次序是1,3,2另外,要记住以下公式:作业i 的周转时间T i =作业完成时间一作业提交时间由 于作业1,2, 3是依次 到来的,所以当 开始时作业提交时问 客作业陆续完成吋间n 1-系统中个作业的平均周转时间,其中Ti为作业i的周转时间。
解:采用先来先服务调度策略,则调度次序为I、2、3平均周转时间T =( 8 +11.6 + 12) /3= 10.53采用短作业优先调度策略,则调度次序为I、3、2平均周转时间T =( 8 +8+ 12.6) /3= 9.53思考题1请同学们判断这句话:作业一旦被作业调度程序选中,即占有了CPU o() 提示:需要清楚作业调度和进程调度的区别。
【例2】考虑下述页面走向:1,2, 3,4, 2,1, 5,6, 2,1, 2,3,7, 6,3, 2,1, 2,3, 6当内存块数量分别为3时,试问FIFO、LRU、OPT这三种置换算法的缺页次数各是多少答:缺页定义为所有内存块最初都是空的,所以第一次用到的页面都产生一次缺页。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
短作业优先调度和时间片轮转调度算法
Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT 电 子 科 技 大 学 实 验 报 告 学生姓名:胡钟文 学 号: 指导教师:罗惠琼
一、实验室名称: 主楼A2-412
二、实验项目名称:进程调度算法的设计
三、实验原理: 短作业(进程)优先调度算法:短作业调度算法是从后备队列中选择一个或者若干个估计运行时间最短的作业,将他们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或者发生某事件而被阻塞放弃处理机时再重新调度。 时间片轮转法:系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的队尾;然后,再把处理机分配给就绪队列中的新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一个给定的时间内均能获得一时间片的处理机执行时间。 四、实验目的: 通过对进程调度算法的设计,深入理解进程调度的原理 五、实验内容: 1.编写程序实现SJ(P)F算法 2.编写程序实现RR算法 六、实验器材(设备、元器件): 装有VC++的PC机一台 七、实验步骤: 1.打开VC,设计编写程序的源代码 2.编译运行程序的源代码 3.分析检验程序的结果是否正确 4.总结实验结果及结论 短进程优先调度源代码: #include "" struct sjf{ char name[10]; float arrivetime; float servicetime; float starttime; float finishtime; float zztime; float dqzztime; }; sjf a[100]; void input(sjf *p,int N) { int i; printf("intput the process's name & arrivetime & servicetime:\nfor exmple: a 0 100\n"); for(i=0;i<=N-1;i++) { printf("input the %dth process's information:\n",i+1); scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime); } } void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) {int k; printf("run order:"); printf("%s",p[0].name); for(k=1;k{printf("-->%s",p[k].name); } printf("\nthe process's information:\n"); printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\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].dqzztime); } } rrivetime { sjf temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } tarttime=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].dqzztime=p[k].zztime/p[k].servicetime; } } void sjff(sjf *p,int N) {float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;inishtime=p[m].arrivetime+p[m].servicetime; else p[m].finishtime=p[m-1].finishtime+p[m].servicetime; int i=0; for(int n=m+1;n<=N-1;n++) {if(p[n].arrivetime<=p[m].finishtime)ervicetime; int next=m+1;ervicetime {min=p[k+1].servicetime; next=k+1;} } sjf temp; temp=p[m+1]; p[m+1]=p[next]; p[next]=temp; } deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); } void main() { int N;
printf("------短作业优先调度算法------\n"); printf("input the process's number:\n"); scanf("%d",&N); input(a,N); sjf *b=a; sjf *c=a; sjff(b,N); }
时间片轮转法源代码: #include <> #define M 5 D=-1; } } int GetNum()D!=-1) { j++; } } return j; } int GetReach(int time)eachTime<=time) { a[i].ReachTime=100; return i; } } return -1; } int GetInsert()D==-1) return i; } return -1; } void Forward(int num)D=A[i+1].ID; A[i].TotalTime=A[i+1].TotalTime; } A[num-1].ID=-1; } void Process()D; K++; A[0].TotalTime--; =A[0].ID; =A[0].TotalTime; } void main() { int i; int time; int t=0; int reach; int insert; int num;
printf("RR算法\n\n"); INIT(); for(i=0;i{
printf("请输入进程ID:"); scanf("%d",&a[i].ID); printf("请输入到达时间:"); scanf("%d",&a[i].ReachTime); printf("请输入服务时间:"); scanf("%d",&a[i].TotalTime); } for(i=0;i} for(i=0;i<50;i++)D=a[reach].ID; A[insert].TotalTime=a[reach].TotalTime; num=GetNum(); if(num==1) continue;D=; A[num-1].TotalTime=; } } } elseD=-1; } } else if(num==0) continue;D=; A[num-1].TotalTime=; } } } } printf("\n");
printf("调度顺序为:\n"); Myprintf; for(i=0;i<50;i++) { if(queue[i]!=-1) printf("|%2d ",queue[i]); } printf("|\n"); Myprintf; printf("\n"); }
八、实验数据及结果分析:
短作业优先调度算法的实验结果: 时间片轮转调度算法结果: 九、实验结论: 本次实验成功的完成了短作业优先调度算法和轮转时间片调度算法的模拟,通过本次实验我们了解到短作业优先调度算法不利于长作业的处理,因为长作业将长期得不到处理,而轮转时间片调度算法则解决了这一问题。短长作业均能在每一个周期内分得一个时间片处理自己的任务。 十、总结及心得体会:
通过本次实验对短作业优先调度算法和时间片轮转调度算法有了更深入的理解,同
时,对程序算法能力有了进一步的提高,同时对模块化编程有了更深入得理解,代码的模块化会使程序的代码复用率提高,提高编程的效率。