欢迎来到天天文库
浏览记录
ID:56772052
大小:268.00 KB
页数:17页
时间:2020-07-08
《实验一、进程调度实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、广东技术师范学院实验报告学院:计算机科学学院专业:计算机科学与技术(师范)班级:成绩:姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:预习情况操作情况考勤情况数据处理情况实验名称:实验一、进程调度实验一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解二、实验类别综合性实验。综合高级语言编程、进程调度模型、进程调度算法及数据结构等多方面的知识三、实验内容和步骤1.编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中
2、优先数最高的进程。 静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等该题根据老师给的代码用VisualC++运行,结果以及分析如下:结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程cc最先调度进程cc的状态为运行态,需要执行的时间为10当前就绪队列状态为:进程aa先级比较高,处于就绪队列前面,而进程bb先级是三者中最低的,所以处于就绪
3、队列的最后。而此时这两个进程的状态都为就绪态。结果分析:当进程cc了一个时间片之后而它已占用CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程aa按照这种方式一直运行下去:直到:结果分析:当进程bb的CPU占用时间等于它需要的执行时间时,进程bb度完成。则这时进程调度中还有两个进程:进程aa进程cc结果分析:当调度进程中只剩下进程aa程cc这时根据进程优先级的大小,进程aa入运行态。当进程aa调度时,进程调度程序中直剩下进程cc这时进程cc进入运行态,而当前
4、就绪队列将为空。直到:结果分析:当进程i的CPU占用时间等于所需要的执行时间时,进程cc调度完成,则这时进程调度中已经没有需要调度的进程了,则整个进程调度完成。2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。 轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。简单轮转法的基本思想是:所有就绪进程按FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。将老师给的源程序修改
5、成简单的时间片轮转法流程图如下:进程完成,撤消该进程就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1运行进程已占用CPU时间已达到所需的运行时间把运行进程插入到下一个队列的队尾插入新的进程开始初始化PCB,输入进程信息所有队列都为空各进程按FCFS原则排队等待调度时间片轮转法#include#include#include#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0#defineTIME2//时间片长度////////
6、/////typedefstructpcb{//////进程管理块charname[10];///////进程名字charstate;///////进程状态intqueue;//////进程所在的队列intntime;/////进程需要运行的时间intrtime;//////进程已经运行的时间intetime;////进程在本队列可运行的时间片structpcb*link;}PCB;PCB*ready=NULL,*pinsert=NULL,*pfend=NULL,*p=NULL;/*就绪队列,进程插入位置的变量*/intgeti()//使用户仅能输入整数{
7、charch;inti=0;fflush(stdin);ch=getchar();while(ch==''){printf("tf输入不能为空..请重新输入");fflush(stdin);ch=getchar();}while(ch!=''){if(ch>'9'
8、
9、ch<'0'){printf("t输入有误!!输入只能为正整数,请重新输入...");fflush(stdin);i=0;ch=getchar();}else{i=i*10+(ch-'0');ch=getchar();}}returni;}voidfindpos()////
10、///更新状态量{PCB*ps=pfend;if(!ps
11、
12、!ps
此文档下载收益归作者所有