进程调度算法设计(短进程优先算法SPF)
- 格式:doc
- 大小:70.00 KB
- 文档页数:8
进程调度模拟算法进程调度是操作系统中的重要组成部分之一,它负责决定在多道程序环境下,哪个进程将获得CPU的使用权。
进程调度模拟算法是为了研究和评估不同调度策略的性能而开发的一种仿真方法。
在实际系统中,调度算法会受到多种因素的影响,如进程优先级、进程的I/O需求、进程的实际执行时间等。
通过模拟这些因素,可以更好地理解不同调度算法之间的差异,并选择最合适的算法来满足特定需求。
下面介绍两种常见的进程调度模拟算法:先来先服务(FCFS)和最短作业优先(SJF)算法。
1. 先来先服务(FCFS)算法:该算法按照进程到达的顺序来调度任务。
当一个进程完成或阻塞时,下一个已到达的进程将获得CPU的使用权。
这种算法非常简单,但是不适用于长作业时间和短作业时间交替出现的情况。
在短作业启动时,长作业仍然在运行,使得短作业的等待时间增加。
2. 最短作业优先(SJF)算法:该算法根据任务的执行时间来调度进程。
在该算法中,每个进程的执行时间都是已知的,并且操作系统根据已知的执行时间来决定哪个进程获得CPU的使用权。
在短作业优先算法中,短作业将会先被调度,这样有助于减少平均周转时间和等待时间。
但是,短作业优先算法容易产生“饥饿”现象,即长作业可能会一直等待,而短作业一直得到CPU的使用权。
除了以上两种算法,还有其他的进程调度模拟算法。
例如:- 时间片轮转(RR)调度算法:使用固定的时间片来调度进程,当时间片用完后,该进程被放入就绪队列的末尾。
- 优先级调度算法:每个进程都拥有一个优先级,优先级越高的进程越早被调度。
这种方法可以根据不同进程的紧迫程度和重要性来进行调度。
- 多级反馈队列调度算法:将就绪队列划分为多个队列,并根据进程的性质和优先级将进程放入不同的队列。
每个队列都有不同的优先级和时间片大小,进程可以通过提高优先级或时间片大小来提高被调度的机会。
在实际应用中,需要根据系统需求和性能指标选择合适的调度算法。
常用的性能指标包括平均周转时间、平均等待时间、CPU利用率等。
操作系统:进程调度算法详解之FCFS和SPF篇前⾔:在学习操作系统的时候,总是可以听到⼀些与“调度”相关的东西。
记得刚学计算机操作系统的时候,总是觉得调试是⼀个很⾼⼤上的东西,不敢太深⼊地去接触。
这可能是因为学⽣时代的我在算法⽅⾯并不强,⽽这些调度过程⼜常以算法的形式出现在课本上。
本⾝上这确实是⼀些算法。
我对这些算法有⼀些抗拒,可能当时是被DotA给迷惑了吧。
现在倒真是感觉算法是⼀个迷⼈的东西,有时在没有学到某⼀种算法,⾃⼰也可以在已有的⼀些算法思维的基础上想出个⼀⼆来,这让⼈很爽。
本⽂也是我在温习《计算机操作系统》这本书时候,想着来⽤代码的形式来描述这些迷⼈的东西。
概述:我们在编码开发的时候,就是在跟进程打交道。
不过,可能由于⼀些⾼级语⾔的封装,我们在开发的过程可能感觉不到我们的代码对进程的创建或调⽤过程。
当然,这也不是本⽂的重点。
但是,操作系统却不能不理会进程。
下⾯我就使⽤Java开发语⾔来模拟⼀下进程在操作系统中的调度过程。
进程调度算法:1.FCFS:FCFS的意思是先来先服务(First Come First Service)。
顾名思义就是按照进程被添加到等待队列的先后顺序来进⾏调⽤的。
这⾥可以先来看⼀张FCFS的算法过程图:图-1 进程FCFS调度过程从上⾯的过程图中就可以清楚地知道,进程在整个过程被调度的顺序及过程。
不过,不知道读者有没有注意到⼀个问题,那就是上⾯的图中,我们是让进程(矩形)紧紧挨着的。
那么有没有什么情况是让这些矩形不在⼀起紧挨着呢?如果你是⼀个注意细节的⼈,我想你已经注意到了这⼀点吧。
说到这⾥,我想问另⼀个问题,如果当我们的队列中的进程都运⾏完成,⽽等待队列中已经没有进程了,那么这个时候要怎么处理?在这种情况下CPU⼀直是处于空闲的状态,直到等待队列中出现了⼀个进程请求处理机来运⾏。
所以,在模拟程序⾥我们就可以直接让时间跳过这⼀段。
关于上⾯的⼀点,在我们的代码⾥也要考虑到。
操作系统常⽤调度算法在操作系统中存在多种调度算法,其中有的调度算法适⽤于作业调度,有的调度算法适⽤于进程调度,有的调度算法两者都适⽤。
下⾯介绍⼏种常⽤的调度算法。
先来先服务(FCFS)调度算法FCFS调度算法是⼀种最简单的调度算法,该调度算法既可以⽤于作业调度也可以⽤于进程调度。
在作业调度中,算法每次从后备作业队列中选择最先进⼊该队列的⼀个或⼏个作业,将它们调⼊内存,分配必要的资源,创建进程并放⼊就绪队列。
在进程调度中,FCFS调度算法每次从就绪队列中选择最先进⼊该队列的进程,将处理机分配给它,使之投⼊运⾏,直到完成或因某种原因⽽阻塞时才释放处理机。
下⾯通过⼀个实例来说明FCFS调度算法的性能。
假设系统中有4个作业,它们的提交时间分别是8、8.4、8.8、9,运⾏时间依次是2、1、0.5、0.2,系统⾤⽤FCFS调度算法,这组作业的平均等待时间、平均周转时间和平均带权周转时间见表2-3。
表2-3 FCFS调度算法的性能作业号提交时间运⾏时间开始时间等待时间完成时间周转时间带权周转时间18280102128.4110 1.611 2.6 2.638.80.511 2.211.5 2.7 5.4490.211.5 2.511.7 2.713.5平均等待时间 t = (0+1.6+2.2+2.5)/4=1.575平均周转时间 T = (2+2.6+2.7+2.7)/4=2.5平均带权周转时间 W = (1+2.6+5.牡13.5)/4=5.625FCFS调度算法属于不可剥夺算法。
从表⾯上看,它对所有作业都是公平的,但若⼀个长作业先到达系统,就会使后⾯许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。
但它常被结合在其他调度策略中使⽤。
例如,在使⽤优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按FCFS原则处理。
FCFS调度算法的特点是算法简单,但效率低;对长作业⽐较有利,但对短作业不利(相对SJF和⾼响应⽐);有利于CPU繁忙型作业,⽽不利于I/O繁忙型作业。
操作系统实验报告(二)实验题目:进程调度算法实验环境:C++实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较各种算法的性能优劣。
实验内容:编程实现如下算法:1.先来先服务算法;2.短进程优先算法;3.时间片轮转调度算法。
设计分析:程序流程图:1.先来先服务算法2.短进程优先算法3.时间片轮转调度算法实验代码:1.先来先服务算法#include <iostream.h>#define n 20typedef struct{int id; //进程名int atime; //进程到达时间int runtime; //进程运行时间}fcs;void main(){int amount,i,j,diao,huan;fcs f[n];cout<<"请输入进程个数:"<<endl;cin>>amount;for(i=0;i<amount;i++){cout<<"请输入进程名,进程到达时间,进程运行时间:"<<endl; cin>>f[i].id;cin>>f[i].atime;cin>>f[i].runtime;}for(i=0;i<amount;i++) //按进程到达时间的先后排序{ //如果两个进程同时到达,按在屏幕先输入的先运行for(j=0;j<amount-i-1;j++){ if(f[j].atime>f[j+1].atime){diao=f[j].atime;f[j].atime=f[j+1].atime;f[j+1].atime=diao;huan=f[j].id;f[j].id=f[j+1].id;f[j+1].id=huan;}}}for(i=0;i<amount;i++){cout<<"进程:"<<f[i].id<<"从"<<f[i].atime<<"开始"<<","<<"在"<<f[i].atime+f[i].runtime<<"之前结束。
几种操作系统调度算法操作系统调度算法是操作系统中用于确定进程执行的顺序和优先级的一种方法。
不同的调度算法有不同的优缺点,适用于不同的场景和需求。
下面将介绍几种常见的操作系统调度算法:1.先来先服务(FCFS)调度算法:先来先服务调度算法是最简单的调度算法之一、按照进程到达的顺序进行调度,首先到达的进程先执行,在CPU空闲时执行下一个进程。
这种算法实现简单,并且公平。
但是,由于没有考虑进程的执行时间,可能会导致长作业时间的进程占用CPU资源较长时间,从而影响其他进程的响应时间。
2.短作业优先(SJF)调度算法:短作业优先调度算法是根据进程的执行时间进行排序,并按照执行时间最短的进程优先执行。
这种算法可以减少平均等待时间,提高系统的吞吐量。
然而,对于长作业时间的进程来说,等待时间会相对较长。
3.优先级调度算法:优先级调度算法是根据每个进程的优先级来决定执行顺序的。
优先级可以由用户设置或者是根据进程的重要性、紧迫程度等因素自动确定。
具有较高优先级的进程将具有更高的执行优先级。
这种算法可以根据不同情况进行灵活调度,但是如果不恰当地设置优先级,可能会导致低优先级的进程长时间等待。
4.时间片轮转(RR)调度算法:时间片轮转调度算法将一个固定的时间片分配给每个进程,当一个进程的时间片用完时,将该进程挂起,调度下一个进程运行。
这种算法可以确保每个进程获得一定的CPU时间,提高系统的公平性和响应速度。
但是,对于长时间运行的进程来说,可能会引起频繁的上下文切换,导致额外的开销。
5.多级反馈队列(MFQ)调度算法:多级反馈队列调度算法将进程队列划分为多个优先级队列,每个队列有不同的时间片大小和优先级。
新到达的进程被插入到最高优先级队列,如果进程在时间片内没有完成,则被移到下一个较低优先级队列。
这种算法可以根据进程的执行表现自动调整优先级和时间片,更好地适应动态变化的环境。
以上是几种常见的操作系统调度算法,每种算法都有其优缺点和适用场景。
常用的进程调度算法
常用的进程调度算法有:
1. 先来先服务(FCFS):按照进程到达的顺序进行调度,先
到达的进程先执行。
2. 短作业优先(SJF):按照进程执行时间的长短进行调度,
先执行执行时间短的进程。
3. 优先级调度:每个进程都有一个优先级,按照优先级进行调度,优先级高的先执行。
4. 轮转调度(RR):按照进程到达的顺序进行调度,每个进
程执行一个时间片(时间片大小可以设定),然后进行切换。
5. 多级反馈队列调度:将进程分为多个队列,每个队列具有不同的优先级,每个队列都按照先来先服务的原则进行调度,当一个进程运行时间超过一个时间片时,将其放入下一个优先级更低的队列中。
6. 最短剩余时间优先(SRTF):在短作业优先算法的基础上,每次发生进程切换时,都会比较剩余运行时间,优先执行剩余时间最短的进程。
7. 最高响应比优先(HRRN):按照响应比(等待时间+执行
时间/执行时间)进行调度,响应比越高,优先级越高。
8. 最早截止时间优先(EDF):按照进程的截止时间进行调度,优先执行截止时间最早的进程。
这些算法适用于不同的场景和需求,可以根据具体的情况选择合适的调度算法来提高系统性能。
进程调度模拟程序实验实验报告一、实验目的进程调度是操作系统的核心功能之一,它负责合理地分配 CPU 资源给各个进程,以提高系统的性能和效率。
本次实验的目的是通过编写和模拟进程调度程序,深入理解不同的进程调度算法的原理和特点,并比较它们在不同情况下的性能表现。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
操作系统为 Windows 10。
三、实验原理1、先来先服务(FCFS)调度算法先来先服务调度算法按照进程到达的先后顺序进行调度,先到达的进程先获得 CPU 资源。
2、短作业优先(SJF)调度算法短作业优先调度算法优先调度执行时间短的进程。
3、时间片轮转(RR)调度算法时间片轮转调度算法将 CPU 时间划分为固定大小的时间片,每个进程轮流获得一个时间片的 CPU 资源。
四、实验设计1、进程类的设计创建一个进程类,包含进程 ID、到达时间、服务时间、剩余服务时间等属性,以及用于更新剩余服务时间和判断进程是否完成的方法。
2、调度算法实现分别实现先来先服务、短作业优先和时间片轮转三种调度算法。
3、模拟流程(1)初始化进程列表。
(2)按照选定的调度算法进行进程调度。
(3)计算每个进程的等待时间、周转时间等性能指标。
五、实验步骤1、定义进程类```pythonclass Process:def __init__(self, pid, arrival_time, service_time):selfpid = pidselfarrival_time = arrival_timeselfservice_time = service_timeselfremaining_service_time = service_time```2、先来先服务调度算法实现```pythondef fcfs_scheduling(process_list):current_time = 0total_waiting_time = 0total_turnaround_time = 0for process in process_list:if current_time < processarrival_time:current_time = processarrival_timewaiting_time = current_time processarrival_timetotal_waiting_time += waiting_timecurrent_time += processservice_timeturnaround_time = current_time processarrival_timetotal_turnaround_time += turnaround_timeaverage_waiting_time = total_waiting_time / len(process_list)average_turnaround_time = total_turnaround_time / len(process_list) print("先来先服务调度算法的平均等待时间:",average_waiting_time)print("先来先服务调度算法的平均周转时间:",average_turnaround_time)```3、短作业优先调度算法实现```pythondef sjf_scheduling(process_list):current_time = 0total_waiting_time = 0total_turnaround_time = 0sorted_process_list = sorted(process_list, key=lambda x: xservice_time) for process in sorted_process_list:if current_time < processarrival_time:current_time = processarrival_timewaiting_time = current_time processarrival_timetotal_waiting_time += waiting_timecurrent_time += processservice_timeturnaround_time = current_time processarrival_timetotal_turnaround_time += turnaround_timeaverage_waiting_time = total_waiting_time / len(process_list)average_turnaround_time = total_turnaround_time / len(process_list) print("短作业优先调度算法的平均等待时间:",average_waiting_time)print("短作业优先调度算法的平均周转时间:",average_turnaround_time)```4、时间片轮转调度算法实现```pythondef rr_scheduling(process_list, time_slice):current_time = 0total_waiting_time = 0total_turnaround_time = 0ready_queue =while len(process_list) > 0 or len(ready_queue) > 0:for process in process_list:if processarrival_time <= current_time:ready_queueappend(process)process_listremove(process)if len(ready_queue) == 0:current_time += 1continueprocess = ready_queuepop(0)if processremaining_service_time <= time_slice: waiting_time = current_time processarrival_time total_waiting_time += waiting_timecurrent_time += processremaining_service_time turnaround_time = current_time processarrival_time total_turnaround_time += turnaround_time processremaining_service_time = 0else:waiting_time = current_time processarrival_time total_waiting_time += waiting_timecurrent_time += time_sliceprocessremaining_service_time = time_sliceready_queueappend(process)average_waiting_time = total_waiting_time / len(process_list)average_turnaround_time = total_turnaround_time / len(process_list) print("时间片轮转调度算法(时间片大小为", time_slice, ")的平均等待时间:", average_waiting_time)print("时间片轮转调度算法(时间片大小为", time_slice, ")的平均周转时间:", average_turnaround_time)```5、主函数```pythonif __name__ =="__main__":process_list =Process(1, 0, 5),Process(2, 1, 3),Process(3, 2, 8),Process(4, 3, 6)print("先来先服务调度算法:")fcfs_scheduling(process_list)print("短作业优先调度算法:")sjf_scheduling(process_list)time_slice = 2print("时间片轮转调度算法(时间片大小为",time_slice, "):")rr_scheduling(process_list, time_slice)```六、实验结果与分析1、先来先服务调度算法平均等待时间为 575,平均周转时间为 1275。
一、优先级调度算法原理优先级调度算法是一种用于操作系统中的进程调度的算法。
该算法根据每个进程的优先级来决定它在CPU上的执行顺序。
优先级通常是一个整数值,较小的优先级值表示较高的优先级。
当一个进程需要被调度时,系统会选择具有最高优先级的进程来执行。
1.1 优先级调度算法的工作原理在优先级调度算法中,每个进程被分配一个优先级值。
当系统需要选择一个进程来执行时,它会选择具有最高优先级的进程。
如果有多个进程具有相同的最高优先级,那么系统可能会根据其他因素来进行决策,比如先到先服务(FIFO)的原则。
1.2 优先级调度算法的特点优先级调度算法的特点是能够根据进程的优先级来进行调度,从而有效地提高系统的响应速度。
然而,如果进程的优先级分配不合理,可能会导致低优先级的进程长时间得不到执行的机会,造成饥饿现象。
1.3 优先级调度算法的应用场景优先级调度算法通常适用于对实时性要求较高的系统,比如多媒体应用或者交互式应用。
在这些系统中,需要优先处理一些关键的任务,以确保系统的响应速度和稳定性。
二、短进程优先调度算法原理短进程优先调度算法是一种按照进程需要的CPU时间长度进行调度的算法。
该算法先选择需要运行时间最短的进程来执行,从而能够有效地提高系统的吞吐量和响应速度。
2.1 短进程优先调度算法的工作原理在短进程优先调度算法中,系统会根据每个进程需要运行的时间长度来进行调度。
当系统需要选择一个进程来执行时,它会选择需要运行时间最短的进程。
这样可以确保每个进程都能够及时得到执行,并且能够有效地提高系统的吞吐量和响应速度。
2.2 短进程优先调度算法的特点短进程优先调度算法的特点是能够有效地提高系统的吞吐量和响应速度。
由于选择运行时间最短的进程来执行,可以确保每个进程都能够及时得到执行,从而减少了平均等待时间和平均周转时间。
2.3 短进程优先调度算法的应用场景短进程优先调度算法通常适用于需要平衡系统的吞吐量和响应速度的场景,比如多用户系统或者交互式系统。
计算机操作系统的进程调度算法计算机操作系统是指控制和管理计算机硬件与软件资源的系统软件。
在操作系统中,进程调度算法起着至关重要的作用,它决定了系统中各个进程的执行顺序,合理的调度算法可以提高系统的性能和效率。
本文将对常见的进程调度算法进行介绍和分析。
一、先来先服务调度算法(First-Come, First-Served,FCFS)先来先服务调度算法是最简单的调度算法之一。
按照进程到达的先后顺序依次执行,即抢占后只有等待其他进程执行完毕才能执行。
该算法的优点是简单易实现,但缺点是平均等待时间较长,无法满足实时性要求,容易产生“饥饿”现象。
二、短作业优先调度算法(Shortest Job First,SJF)短作业优先调度算法是通过预测进程执行时间的长短来进行调度的。
当有多个进程同时到达时,选择执行时间最短的进程先执行。
该算法的优点是能够最大限度地减少平均等待时间,但缺点是无法应对长作业的到来,可能导致长作业的等待时间过长。
三、优先级调度算法(Priority Scheduling)优先级调度算法根据进程的优先级来进行调度,优先级高的进程先执行。
该算法可以根据实际需要为不同的进程设置不同的优先级。
该算法的优点是能够满足实时性要求,但缺点是可能导致优先级低的进程长时间等待,产生“饥饿”现象。
四、轮转调度算法(Round Robin,RR)轮转调度算法是一种按照时间片轮流分配CPU的调度算法。
每个进程被分配一个固定的时间片,当时间片用完时,进程被剥夺CPU,并放入就绪队列的末尾等待下一次调度。
该算法的优点是能够公平地分配CPU时间,避免长作业的等待时间过长,缺点是可能导致平均等待时间较长,无法满足实时性要求。
五、多级反馈队列调度算法(Multilevel Feedback Queue,MLFQ)多级反馈队列调度算法是一种综合利用多个调度算法的调度策略。
它将进程划分为多个队列,每个队列采用不同的调度算法。
电子科技大学
实验报告
学生姓名:满博学号:2823103017 指导教师:罗惠琼
一、实验室名称:软件实验室A2412
二、实验项目名称:进程调度算法的设计(短进程优先调度SPF)
三、实验原理:
在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。
对调度的处理又都可采用不同的调度方式和调度算法。
调度算法是指:根据系统的资源分配策略所规定的资源分配算法。
短进程优先调度算法是指对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
四、实验目的:
通过实现SPF算法深入了解进程调度机制,加深理解。
五、实验内容:
1. 编写SPF算法:
●进程通过定义一个进程控制块的数据结构(PCB)来表示;
●每个进程需要赋予进程ID、进程到达时间、进程需要运行的总时间的属性;
2. 调试无误后运行;
3. 输入需要请求调入的页号;
4. 查看执行结果,根据执行结果判断实验是否成功;
六、实验器材(设备、元器件):
1.基本环境要求
①宽敞整洁专用实验室
②必备的基本实验工具
2.最低设备要求
①计算机CPU不小于800MHZ;
②计算机内存不小于128M;
3.软硬件要求
①实验平台Visual c++ 6.0
七、实验步骤:
代码如下:
#include<stdio.h>
#define n 5
#define num 5
#define max 65535
typedef struct pro
{
int PRO_ID;
int arrive_time;
int sum_time;
int flag;
}Pro;
//整数排序
int bubble(int temp[])
{
int i,j,tem=0;
for(i=1;i<num;i++)
{
int lastX=1;
for(j=0;j<num-i;j++)
{
if(temp[j]>temp[j+1])
{
tem=temp[j];
temp[j]=temp[j+1];
temp[j+1]=tem;
lastX=0;
}
}
if(lastX==1) break;
}
return temp[0];
}
//进程排序
Pro bubble(Pro p[])
{
int i,j;
Pro temp={0};
Pro s[num];
for(i=0;i<num;i++){
s[i]=p[i];
}
for(i=1;i<num;i++)
{
int lastX=1;
for(j=0;j<num-i;j++)
{
if(s[j].sum_time>s[j+1].sum_time)
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
lastX=0;
}
}
if(lastX==1) break;
}
return s[0];
}
void SPF(int p)
{
if(n>0)
{
int i,j,k,l,tc=0;
Pro seq[n];
Pro temp_seq[n];
printf("短进程优先调度算法SPF\n");
printf("请依次输入5个进程的进程号、到达时间和执行时间\n");
printf("成员变量用逗号隔开;进程间用回车隔开\n");
for(i=0;i<n;i++){
scanf("%d,%d,%d",&seq[i].PRO_ID,&seq[i].arrive_time,&seq[i].sum_time);
}
printf("调度顺序是:\n");
//初始化tc
int temp[num];
for(i=0;i<num;i++)
{
temp[i]=seq[i].arrive_time;
}
tc=bubble(temp);//tc是断点啊
//flag 表示对应i的pro的队列情况
//-1表示未进入过队列,0表示在队列中,1表示被清除了for(i=0;i<n;i++){
seq[i].flag=-1;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(seq[j].flag!=1&&seq[j].arrive_time<=tc){
seq[j].flag=0;
}
}
for(j=0;j<n;j++){
temp_seq[j]=seq[j];
if(seq[j].flag!=0){
temp_seq[j].sum_time=max;
}
}
l=bubble(temp_seq).PRO_ID;
for(j=0;j<n;j++){
if(l==seq[j].PRO_ID){
k=j;
}
}
tc=tc+bubble(temp_seq).sum_time;
seq[k].flag=1;
printf("%d",l);
}
printf("\n");
}
}
void main()
{
SPF(n);
}
结果截图:
实例1
实例2
八、实验数据及结果分析:
/*
算法详细设计:
进程(PRO_ID,arrive_time,sum_time,flag)
1.比较停顿时间点,小于等于当前停顿时间点tc的到达时间点seq[i].arrive_time的进程seq[i]的PRO_ID加入到队列中;
2.在现有更新后的队列temp_seq中,用bubble选出最短执行时间的进程的PRO_ID;
3.选进程(算法核心L=bubble(int temp[])),更新下一个停顿时间点tc 就是当前停顿时间点tc+L的执行时间sum_time;
4.将X踢出队列。
seq[i].flag,-1表示未进入过队列,0表示在队列中,1表示被踢了;
设当前时间点为tc,对pro.arr<=tc且seq[i].flag!=1的seq[i],将seq[i].flag 标记为0;
创建临时变量temp_seq[]=seq[];
对所有flag[i]==0的temp_seq[i],bubble(temp_seq),返回的是Pro进程类型。
将tc更新,tc==tc+ bubble(temp_seq).sum_time;
找出该bubble(temp_seq)对应的原来seq[i],标记为1。
这步最容易错,注意下标和PRO_ID并不是一回事。
怎么选第一个tc:设tc=0;如果出现最小的pro.arr不是0的话,那么
初始化:bubble seq[i].arrive_time tc=min{ seq[i].arrive_time }
Bubble么,就不用我说了。
*/
使用了教材上的例子和自己的实例,结果与笔算相同。
九、实验结论:
成功的实现了短进程优先调度算法(SPF),实验结果验证无误。
十、总结及心得体会:
通过本次试验,我熟悉了短进程优先调度算法的原理,代码实现了其功能,收获很大。
十一、对本实验过程及方法、手段的改进建议:
若C++编程可用函数重载,避免bubble因参数不同造成的代码无法重用。
报告评分:
指导教师签字:。