操作系统的进程调度 实验报告
操作系统进程调度实验报告

实验进程调度实验专业:XXXXX 学号:XXXXX 姓名:XXX 实验日期:20XX年XX月XX日、实验目的通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。
二、实验要求编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调度。
三、实验方法内容1.算法设计思路将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。
构建一个进程调度类。
将进程调度的各种算法分装在一个类中。
类中存在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。
还有一个PCB实例。
主要保存正在运行的进程。
类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。
主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、完成容器。
当程序启动时,用户可以选择不同的调度算法。
然后用户从控制台输入各个进程的信息,这些信息保存到进程容器中。
进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。
判断进程容器中是否有新的进程可以加入就绪队列。
2.算法流程图主程序的框架:进程调度过程:3.算法中用到的数据结构struct fcfs{//先来先服务算法从这里开始char n ame[10]; float arrivetime; float servicetime; float starttime; float fini shtime; float zztime; float dqzztime; };//定义一个结构体,里面包含的有一个进程相关的信息4.主要的常量变量vector vPCE>m_ProcessQueue // 进程输入队列 vector <PCB>m_WaitQueue // 进程就绪队列 Vector <pCB>m_FinishQueue; // 完成队列 vector <PCB>:: iteratorPCB m_runProcess; //运行中的进程.为空I if ( m_WaitQueueemptyO)m_iter ; //迭代器开始判断就绪队 是否为空非空int m_ProcessCount; // 进程数float m_RunTime// 运行时间 int m_tagIsRun ;//是否在运行标志。
操作系统进程调度实验报告.

操作系统(2014年秋季学期) Array实验报告系别:计算机科学与技术班级:数媒12-1班姓名:学号:12101090105实验名称:进程调度总成绩:评语:日期:2020-2-20 3/242020-2-20 4/242020-2-20 5/24六、编译过程截图七、测试用例void fileCreate(char fileName[],int length,char fileKind[]); //创建文件void fileWrite(char fileName[]); //写文件void fileCat(char fileName[]); //读文件void fileRen(char fileName[],char rename[]); //重命名文件void fileFine(char fileName[]); //查询文件void fileDir(char UserName[]); //显示某一用户的所有文件void fileClose(char fileName[]); //关闭已打开的文件void fileDel(char fileName[]); //删除文件void chmod(char fileName[],char kind[]); //修改文件的读写方式int requestDist(int &startPostion,int maxLength); //磁盘分配查询void initDisk(); //初始化磁盘void freeDisk(int startPostion); //磁盘空间释放void diskShow(); //显示磁盘使用情况void print_userTable();//显示用户目录八、实验结果。
操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验报告实验二时间片轮转进程调度算法学号:班级:姓名:【实验题目】: 时间片轮转进程调度算法【实验目的】通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略与对系统性能的评价方法。
【实验内容】问题描述:设计程序模拟进程的时间片轮转RR 调度过程。
假设有n 个进程分别在T1, … ,Tn 时刻到达系统, 它们需要的服务时间分别为S1, … ,Sn 。
分别利用不同的时间片大小q, 采用时间片轮转RR 进程调度算法进行调度, 计算每个进程的完成时间, 周转时间和带权周转时间, 并且统计n 个进程的平均周转时间和平均带权周转时间。
程序要求如下:1)进程个数n ;每个进程的到达时间T 1, … ,T n 和服务时间S 1, … ,S n ;输入时间片大小q 。
2)要求时间片轮转法RR 调度进程运行, 计算每个进程的周转时间, 带权周转时间, 并且计算所有进程的平均周转时间, 带权平均周转时间;3)输出: 要求模拟整个调度过程, 输出每个时刻的进程运行状态, 如“时刻3: 进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间, 带权周转时间, 所有进程的平均周转时间, 带权平均周转时间。
实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:int ArrivalTime[100];int ServiceTime[100];int PServiceTime[100];int FinishTime[100];int WholeTime[100];double WeightWholeTime[100];double AverageWT,AverageWWT;bool Finished[100];➢2)进程调度的实现过程如下:➢变量初始化;➢接收用户输入n, T1, … ,Tn, S1, … ,Sn;时间片大小q;➢按照时间片轮转RR算法进行进程调度, 计算进程的完成时间、周转时间和带权周转时间;➢计算所有进程的平均周转时间和平均带权周转时间;➢按格式输出调度结果。
操作系统进程调度实验报告

实验进程调度实验专业:XXXXX学号:XXXXX姓名:XXX 实验日期:20XX年XX月XX日一、实验目的通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。
二、实验要求编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调度。
三、实验方法内容1. 算法设计思路将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。
构建一个进程调度类。
将进程调度的各种算法分装在一个类中。
类中存在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。
还有一个PCB实例。
主要保存正在运行的进程。
类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。
主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、完成容器。
当程序启动时,用户可以选择不同的调度算法。
然后用户从控制台输入各个进程的信息,这些信息保存到进程容器中。
进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。
判断进程容器中是否有新的进程可以加入就绪队列。
2. 算法流程图主程序的框架:根据设定的调度算法从就 绪队列中调入一个进程并执行(此时进程从就绪队列中删除,赋值到表示运行中的成员变量中) void FCFS); //先来先服务 void SJF(); //最短进程优先调度 void RR); //简单时间片轮转 void PD); //最高优先数优先进程调度过程:为空 开始 非空是否为空 if ( m_WaitQueueempty()) I ProcessRunQ ] 进程运行一个时间片心..停止运行的条件 Y ▼ 否达到该进程 如进程已完成,或者分得的时 间片个数已到 一..选入的进程状态 <••是否为“完成”/> 进程未完成,将进 程优先数减一,并 放回到就绪队列中 vector <PCOm_WaitQueue //进程就绪队歹『 设置进程完成时 间,将该进程放入 完成队列 vector <PCOm_FinishQueue; //完成队列 结束 3. 算法中用到的数据结构 struct fcfs{ 〃先来先服务算法从这里开始 char name[10]; float arrivetime; float servicetime; float starttime; float finishtime; float zztime; float dqzztime; }; 〃定义一个结构体,里面包含的有一个进程相关的信息 4. 主要的常量变量 vector <PCf>m ProcessQueue // 进程输入队列 vector <PCBm_WaitQueue // 进程就绪队列 <PCBm_FinishQueue; // 完成队列 vector <PCB>:: iterator vector m iter ; //迭代器PCB m_runProcess; //运行中的进程让系统等待一个时间片 I TimePastOint m_ProcessCount; // 进程数float m_RunTime// 运行时间int m tagIsRun ;//是否在运行标志。
操作系统进程调度实验报告

一、实验目的无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。
这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一进程,以使之执行。
进程调度是处理机管理的核心内容。
本实验要求采用调度算法编写和调试一个简单的进程调度程序。
通过本实验可以加深理解有关进程控制块、进程队列、阻塞队列、就绪队列等的概念。
并了解CPU分配资源的方式。
二、实验要求调试一个进程调度程序,对程序进行注释,理解每条语句的用意,掌握CPU对进城进程分配资源的方式,以加深对进程概念及进程调度算法的理解。
三、实验内容1.进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。
2.进程控制块每个进程有一个进程控制块( PCB)表示。
进程控制块可以包含如下信息:进程ID、进程IP、进程指令(优先级数)、运行时间、阻塞时间、阻塞状况、占用资源情况等。
进程的优先数及需要的运行时间可以事先人为地指定,即输入进程的执行指令。
进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪、运行和阻塞三种状态之一。
3.资源资源包括资源ID、资源状态(是否被占用)、使用资源的进程ID、进程指针以及使用时间。
程序规定CPU资源数为1,既所有进程只能请求同一资源,如果所请求资源已被占用,则进程进入阻塞队列等待资源。
4.CPUCPU包括执行中的进程指针、就绪队列、阻塞队列、CPU资源、进程数、阻塞进程数以及CPU运行时间。
就绪进程获得 CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
操作系统进程调度实验报告

学生实验报告姓名:年级专业班级学号成绩
【实验结果或总结】(对实验结果进行相应分析,或总结实验的心得体会,并提出实验的改进意
1.三种进程调度算法的执行结果如下。
(1)FCFS算法
(2)高优先权优先调度算法
(3)时间片轮转调度算法
2.以上三个程序能较好地实现进程的三种调度算法。
(1)用数组元素的顺序输入输出能实现进程的FCFS算法。
(2)用优先权的变化规律描述和冒泡法排序能模拟实现优先权调度算法。
(3)通过数组的运算和利用中间数组能实现时间片轮转调度算法。
3. 虽然以上三个程序能较直观的体现进程基本的三种调度算法,但还是存在一些不足。
(1)如在高优先权调度算中,当同时出现多个进程优先权相同的情况时,程序可能对这些不能选择正确的执行顺序。
改进的方法为添加一个判断,当多个进程的优先权相同时,按FCFS算法执行。
即在程序中表现为按数组元素下标的增大顺序排序。
(2)在时间片轮转算法中,不能一次性的输出进程的调度程度,而要通过多次的输入时间片。
改进的方法为把时间片设置为全局变量,在每次循环时都执行一次。
指导教师签名:
20 年月日
【备注。
进程调度实验报告答案(3篇)

第1篇一、实验目的通过本次实验,加深对操作系统进程调度过程的理解,掌握三种基本调度算法(先来先服务(FCFS)、时间片轮转、动态优先级调度)的原理和实现方法,并能够通过编程模拟进程调度过程,分析不同调度算法的性能特点。
二、实验环境1. 操作系统:Linux/Windows2. 编程语言:C/C++3. 开发环境:Visual Studio、Code::Blocks等三、实验内容1. 实现三种基本调度算法:FCFS、时间片轮转、动态优先级调度。
2. 编写代码模拟进程调度过程,包括进程创建、进程调度、进程运行、进程结束等环节。
3. 每次调度后,打印当前运行的进程、就绪队列以及所有进程的PCB信息。
4. 编写实验报告,描述数据结构、算法流程,展示实验结果,并总结心得。
四、实验步骤1. 定义进程控制块(PCB)结构体,包含进程名、到达时间、服务时间、已用时间、优先数、进程状态等信息。
2. 实现进程调度函数,根据所选调度算法进行进程调度。
3. 编写主函数,初始化进程信息,选择调度算法,并模拟进程调度过程。
4. 每次调度后,打印当前运行的进程、就绪队列以及所有进程的PCB信息。
5. 编写实验报告,描述数据结构、算法流程,展示实验结果,并总结心得。
五、实验结果与分析1. FCFS调度算法实验结果:按照进程到达时间依次调度,每个进程结束后,调度下一个进程。
分析:FCFS调度算法简单,易于实现,但可能会导致进程的响应时间较长,特别是当有大量进程到达时,后到达的进程可能会长时间等待。
2. 时间片轮转调度算法实验结果:每个进程完成一个时间片后,放弃处理机,转到就绪队列队尾。
分析:时间片轮转调度算法能够保证每个进程都能得到一定的运行时间,但可能会出现进程饥饿现象,即某些进程长时间得不到运行。
3. 动态优先级调度算法实验结果:每个进程完成一个时间片后,优先级减1,插入到就绪队列相关位置。
分析:动态优先级调度算法能够根据进程的运行情况动态调整优先级,使得优先级高的进程能够得到更多的运行时间,从而提高系统的响应速度。
学生进程调度实验报告(3篇)

第1篇一、实验目的本次实验旨在通过模拟操作系统中的进程调度过程,加深对进程调度算法的理解,提高程序设计能力。
通过实现不同调度算法,学习如何根据进程的优先级、到达时间和服务时间等因素,合理分配CPU资源,提高系统的吞吐量和响应速度。
二、实验内容1. 实验环境:Windows操作系统,C/C++编程环境。
2. 实验内容:(1)设计进程调度算法:FCFS(先来先服务)、SJF(最短作业优先)、RR(轮转法)和优先级调度算法。
(2)实现进程控制块(PCB)数据结构,包括进程名、到达时间、服务时间、优先级、状态等信息。
(3)模拟进程调度过程,根据调度算法选择合适的进程运行。
(4)打印进程调度结果,包括运行进程、就绪队列和完成进程等信息。
三、实验原理1. 进程调度算法(1)FCFS:按照进程到达时间顺序进行调度,先到达的进程先执行。
(2)SJF:优先选择执行时间最短的进程执行。
(3)RR:将CPU时间划分为若干个时间片,每个进程运行一个时间片,然后根据进程优先级重新排队。
(4)优先级调度算法:优先选择优先级最高的进程执行。
2. 进程控制块(PCB)PCB是进程的实体,用于描述进程的状态、控制信息和资源等信息。
PCB主要包括以下内容:(1)进程名:唯一标识进程。
(2)到达时间:进程进入就绪队列的时间。
(3)服务时间:进程执行所需的时间。
(4)优先级:表示进程的优先程度。
(5)状态:表示进程的当前状态,如就绪、运行、阻塞等。
四、实验步骤1. 定义PCB数据结构,包括进程名、到达时间、服务时间、优先级、状态等信息。
2. 设计调度算法,实现进程调度功能。
3. 模拟进程调度过程,包括进程到达、就绪、运行、阻塞和完成等状态转换。
4. 打印进程调度结果,包括运行进程、就绪队列和完成进程等信息。
五、实验结果与分析1. FCFS调度算法:按照进程到达时间顺序进行调度,可能导致短作业等待时间过长。
2. SJF调度算法:优先选择执行时间最短的进程执行,但可能存在饥饿现象。
操作系统综合性实验报告~进程调度(含代码)

XXXXXX计算机系综合性实验实验报告课程名称操作系统B实验学期XXXX 至XXXX 学年第X 学期学生所在系部计算机系年级XXXX 专业班级XXXXXX学生姓名XXXX 学号XXXXXXXXXXXX任课教师XXX实验成绩计算机系制《操作系统B 》课程综合性实验报告开课实验室:年月日附代码:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{char name[10]; //进程的名字int round; //一次分配CPU的时间片int cputime; //CPU已执行时间int needtime; //进程执行所需要的时间char state; //进程的状态,W-就绪态,R-执行态,F-完成态int count; //记录进程执行的次数struct node *next; //队列指针}PCB;PCB *ready=NULL,*run=NULL,*finish=NULL; //定义三个队列,就绪队列,执行队列和完成队列int num;void GetFirst(); //从就绪队列取得第一个节点void Output(); //输出各队列信息void InsertTime(PCB *in); //插入就绪片队列void InsertFinish(PCB *in); //插入完成队列void TimeCreate(); //时间片输入函数void RoundRun(); //时间片轮转调度void main(){printf("\n****** 欢迎光临指导******\n");printf("\n****** 时间片轮转进程调度算法******\n");printf("\n****** 计科B082 韩友******\n");printf("\n****** 200807014225 ******\n");printf("\n****** 2011年5月15日******\n");printf("\n请输入要创建的进程数目:\n");scanf("%d",&num);getchar(); //吸收回车符号TimeCreate();RoundRun();Output();}void GetFirst() //取得第一个就绪队列节点{run = ready;if(ready!=NULL){run ->state = 'R';ready = ready ->next;run ->next = NULL;}}void Output() //输出队列信息{PCB *p;p = ready;printf("进程轮数cpu时间需要时间进程状态计数器\n");while(p!=NULL){printf("%s\t%d\t%d\t%d\t%c\t%d\n",p->name,p->round,p->cputime,p->needtime,p->state,p->count);p = p->next;}p = finish;while(p!=NULL){printf("%s\t%d\t%d\t%d\t%c\t%d\n",p->name,p->round,p->cputime,p->needtime,p->state,p->count);p = p->next;}p = run;while(p!=NULL){printf("%s\t%d\t%d\t%d\t%c\t%d\n",p->name,p->round,p->cputime,p->needtime,p->state,p->count);p = p->next;}}void InsertTime(PCB *in) //将进程插入到就绪队列尾部{PCB *fst;fst = ready;if(ready == NULL){in->next = ready;ready = in;}{while(fst->next != NULL){fst = fst->next;}in ->next = fst ->next;fst ->next = in;}}void InsertFinish(PCB *in) //将进程插入到完成队列尾部{PCB *fst;fst = finish;if(finish == NULL){in->next = finish;finish = in;}else{while(fst->next != NULL)fst = fst->next;}in ->next = fst ->next;fst ->next = in;}}void TimeCreate() //时间片轮转输入函数{PCB *tmp;int i;printf("输入进程名字和进程时间片所需时间:\n");for(i = 0;i < num; i++){if((tmp = (PCB *)malloc(sizeof(PCB)))==NULL){perror("malloc");exit(1);}scanf("%s",tmp->name);getchar();scanf("%d",&(tmp->needtime));tmp ->cputime = 0;tmp ->state ='W';tmp ->round = 2; //假设每个进程所分配的时间片是2tmp ->count = 0;InsertTime(tmp);}}void RoundRun() //时间片轮转调度算法{int flag = 1;GetFirst();while(run != NULL){Output();while(flag){run->count++;run->cputime++;run->needtime--;if(run->needtime == 0) //进程执行完毕{run ->state = 'F';InsertFinish(run);flag = 0;}else if(run->count == run->round)//时间片用完{run->state = 'W';run->count = 0; //计数器清零,为下次做准备InsertTime(run);flag = 0;}}flag = 1;GetFirst();}}。
进程调度实验报告

进程调度实验报告1. 引言进程调度是操作系统中一个重要的概念,它决定了各个进程在CPU上运行的次序和时间长度。
合理的进程调度能够提高系统的运行效率和响应速度。
本实验旨在研究不同的进程调度算法对系统性能的影响,并通过实验结果对比评估各个算法的优劣。
2. 实验过程2.1 实验环境搭建在进行实验之前,我们需要搭建一个适合的实验环境。
首先,选择一种操作系统作为实验的基础环境,在这个环境上进行后续步骤。
其次,选择一种编程语言或工具来实现不同的进程调度算法。
最后,准备一组测试用例,包含不同类型的进程和不同长度的时间片等。
2.2 实验步骤以下是实验的具体步骤: 1. 首先,选择合适的进程调度算法,如FCFS、SJF、RR 等。
2. 实现所选算法,并将其应用于测试用例上。
3. 模拟进程的运行过程,记录每个进程的等待时间、周转时间等指标。
4. 重复步骤1~3,使用不同的进程调度算法进行对比实验。
5. 分析实验结果,总结每种算法的优缺点。
2.3 实验数据分析根据实验得到的数据,我们可以对不同的进程调度算法进行分析。
可以从以下几个方面对算法的性能进行评估: - 平均等待时间:衡量了进程等待的时间长度,可以用来评估系统的效率和响应速度。
- 平均周转时间:衡量了进程从被提交到完成执行所经历的时间长度,可以用来评估系统的性能。
- CPU利用率:衡量了CPU 的利用效率,高CPU利用率意味着系统负载较高,可能导致响应速度下降。
- 算法复杂度:考虑到实际应用中所需的计算量,评估进程调度算法的复杂度。
3. 实验结果与讨论3.1 FCFS算法FCFS(First-Come, First-Serve)是最简单的进程调度算法,按照进程提交的顺序进行调度。
它的优点是简单易懂,适用于长作业时间的进程。
然而,它也存在着一些问题,如可能导致饥饿现象和平均周转时间较长。
3.2 SJF算法SJF(Shortest Job First)算法按照进程执行时间的长度进行调度,执行时间最短的进程先执行。
操作系统进程调度实验报告

操作系统进程调度实验报告一.实验目的用高级语言编写和调试一个进程调度程序~以加深对进程的概念及进程调度算法的解(进程调度时进程管理的主要内容之一~通过设计~编制~调试一个简单的进程调度模拟系统~对进程调度~进程运行状态变换加深理解和掌握。
模拟计算机操作系统的进程调度,建立进程控制块PCB,要包含有关进程的描述信息,控制信息以及资源信息.模拟系统根据PCB感知进程的存在和通过PCB中所包含的各项变量的变化,掌握进程所处的状态以达到控制进程活动的目的.要实现进程的状态及其转换,进程的创建与撤消,进程的阻塞与唤醒.用P,V原语操作实现进程互斥.二.实验要求建立进程控制块PCB,用PCB实现进程在运行过程中的一切状态,未创建、就绪、运行、等待、退出.以完成资源的共享,实现进程的同步与互斥.程序要求用p,v操作实现进程互斥. 三.实验平台Windows XP 下的Microsoft vitual c++平台四.所用语言Microsoft Visual C++语言五.机器要求Microsoft Windows XP Professional版本 2002Service Pack256MB内存SVGA(800×600分辨率~256色或更高级的显示卡鼠标或其他相容设备六.系统分析设计建立四个进程,模拟模拟批处理多道操作系统的进程调度,进程调度算法,采用最高优先数优先的调度算法.每个进程有一个进程控制块, PCB,表示。
进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定,也可以由随机数产生,。
进程的到达时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪 W,Wait,、运行R,Run,、或完成F,Finish,三种状态之一。
就绪进程获得 CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
操作系统进程调度实验报告

实验报告课程名称计算机操作系统实验名称进程及其管理班级学号姓名成绩指导教师赵安科实验日期2015年5月21日一.实验题目:进程及其管理二.实验内容:设计一个简单的进程调度算法,模拟OS 中的进程调度过程 三.实验要求:① 进程数不少于5个;② 进程调度算法任选;最好选用动态优先数法,每运行一个时间片优先数减3 ③ 用C++(或C )语言编程; ④ 程序运行时显示进程调度过程。
四.实验步骤:① 设计PCB 及其数据结构: 进程标识数:ID进程优先数:PRIORITY (优先数越大,优先级越高) 进程已占用时间片:CPUTIME进程尚需时间片:ALLTIME (一旦运行完毕,ALLTIME 为0) 进程队列指针:NEXT ,用来将PCB 排成队列 进程状态:STATE (一般为就绪,不用) ② 设计进程就绪队列及数据结构;③ 设计进程调度算法,并画出程序流程图; ④ 设计输入数据和输出格式; 结构格式:当前正运行的进程:0 当前就绪队列:2,1,3,4 ⑤ 编程上机,验证结果。
五.实验说明:假设调度前,系统中有5个进程,其初始状态如下: ID 0 1 2 3 4 可否考虑用二维数组去实现PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 ALLTIME 3 3 6 3 4 STATE readyreadyreadyreadyready① 以时间片为单位调度运行;② 每次总是从ALLTIME 中不为0,且PRIORITY 最大的进程调度运行一个时间片;③上述进程运行后其优先数减3,再修改其CPUTIME和ALLTIME,重复②,③④直到所有进程的ALLTIME均变为0。
六.程序中所用数据结构及说明:程序中定义了一个二维数组pc用于存储5个进程对应的属性,在程序动态执行的过程中随时修改各个进程对应的属性,直到所有进程消耗完时间片为止,同时为了更方便的了解进程执行的过程,添加了一个priority函数,用于动态的显示就绪队列进程的优先数(由大到小排列),以及对应的进程ID号,这样在程序执行的过程中,能清楚下一步该运行的就绪队列中的进程,更方便检查程序执行的过程中进程的调度是否有错误。
进程调度实验报告

进程调度实验报告引言:进程调度是操作系统中一个重要的概念,它决定了一个进程何时开始执行、何时暂停、何时唤醒等等。
一个良好的进程调度算法可以提高系统的效率和响应时间。
在这次实验中,我们将对不同的进程调度算法进行测试和对比分析,旨在探究不同算法对系统性能的影响。
实验步骤:1. 实验准备在实验开始前,我们需要准备一个充分复杂的测试环境,包括不同类型的进程、不同进程的优先级、进程执行时间等参数。
这些参数的设置将影响我们对不同调度算法的评估。
2. 先来先服务调度算法(FCFS)先来先服务调度算法是最简单的一种调度算法,按照进程到达CPU的顺序依次执行。
在这个实验中,我们首先对先来先服务调度算法进行测试。
结果显示,对于短时进程,FCFS算法效果较好,但在遇到长时进程时,会出现“饥饿”现象,易导致优先级较低的进程无法获得CPU时间。
3. 短作业优先调度算法(SJF)短作业优先调度算法根据进程执行时间的长短来进行调度。
在实验中,我们通过设置不同长度的进程来对SJF算法进行测试。
结果显示,SJF算法能够较好地避免“饥饿”现象,但如果长作业在一个时间片内到达,就会导致短作业等待时间过长。
4. 优先级调度算法(Priority)优先级调度算法通过为每个进程指定一个优先级来进行调度,优先级高的进程先执行。
在实验中,我们设置不同优先级的进程,测试Priority算法的效果。
结果显示,Priority算法能够合理地根据优先级分配CPU时间,但如果优先级的划分不合理,可能导致某些进程优先级一直很低,影响整体系统性能。
5. 时间片轮转调度算法(Round Robin)时间片轮转调度算法是一种较为公平的调度算法,每个进程被分配一个时间片,在时间片用完后,进程暂停执行,并被放置于“就绪队列”尾部,等待下一个时间片。
在测试中,我们可以通过设置不同的时间片长度来观察时间片轮转算法的效果。
结果显示,时间片轮转算法能够较好地平衡进程的等待时间和执行时间。