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

实验进程调度实验专业: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调度算法:优先选择执行时间最短的进程执行,但可能存在饥饿现象。