(08信管)进程时间片轮转调度算法--操作系统实验报告.doc

上传人:scccc 文档编号:11451410 上传时间:2021-08-05 格式:DOC 页数:12 大小:148.50KB
返回 下载 相关 举报
(08信管)进程时间片轮转调度算法--操作系统实验报告.doc_第1页
第1页 / 共12页
(08信管)进程时间片轮转调度算法--操作系统实验报告.doc_第2页
第2页 / 共12页
(08信管)进程时间片轮转调度算法--操作系统实验报告.doc_第3页
第3页 / 共12页
(08信管)进程时间片轮转调度算法--操作系统实验报告.doc_第4页
第4页 / 共12页
(08信管)进程时间片轮转调度算法--操作系统实验报告.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《(08信管)进程时间片轮转调度算法--操作系统实验报告.doc》由会员分享,可在线阅读,更多相关《(08信管)进程时间片轮转调度算法--操作系统实验报告.doc(12页珍藏版)》请在三一文库上搜索。

1、操作系统实验报告 进程时间片轮转调度算法一、 实验题目:进程时间片轮转调度算法二、 实验原理:在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对调度的处理又都可采用不同的调度方式和调度算法。调度算法是指:根据系统的资源分配策略所规定的资源分配算法。三、实验目的:1、 加深对进程概念的理解,明确进程和程序的区别。2、 深入系统如何组织进程、创建进程。3、 进一步认识如何实现处理器调度。4、 通过对进程调度算法的设计,深入理解进程调度的原理。5、 加深对时间片轮转调度算法的理解。四、实验要求:用C+语言编写程序完成单处理机的进程调度,要求采用时间片轮转调度算法。实验具体

2、要求包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,并对所做工作进行测试。五、语言环境:计算机基本配置要求:操作系统:WIN 98/2000/XP/2003 等Windows平台内存:256MB及以上主存64KB(Memory)(以KB为单位分配)开发语言:Visual C+ 6.0五、数据结构 typedef struct jcb char nameN; int prio; int round; int cputime; int needtime; int count; char state; struct node *next; JCB六、参考源程序#inclu

3、de #include #include #include typedef struct node char name10; int prio; int round; int cputime; int needtime; int count; char state; struct node *next; PCB;PCB *finish,*ready,*tail,*run; /队列指针int N; /进程数void firstin() run=ready; /就绪队列头指针赋值给运行头指针 run-state=R; /进程状态变为运行态 ready=ready-next; /就绪队列头指针后移到

4、下一进程/输出标题函数void prt1(char a) if(toupper(a)=P) /优先级法 cout endl; cout进程名 占用CPU时间 到完成还要的时间 轮转时间片 状态endl;/进程PCB输出void prt2(char a,PCB *q) if(toupper(a)=P) /优先级法的输出 coutname cputime needtime round statenext; p=finish; /输出完成队列的PCB while(p!=NULL) prt2(algo,p); p=p-next; getchar(); /按住任意键继续/时间片轮转的插入算法void i

5、nsert(PCB *q) PCB *p1,*s,*r; s=q; /待插入的PCB指针 p1=ready; /就绪队列头指针 r=p1; /*r做pl的前驱指针 while(p1!=NULL) if(p1-roundround) r=p1; p1=p1-next; if(r!=p1) r-next=s; s-next=p1; else s-next=p1; /否则插入在就绪队列的头 ready=s; /优先级创建初void create(char alg) PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; co

6、ut输入进程名及其需要运行的时间:endl; for(i=1;ina; cintime; strcpy(p-name,na); p-cputime=0; p-needtime=time; p-state=W; p-round=0; if(ready!=NULL) insert(p); else p-next=ready; ready=p; cout输入进程名及其需要运行的时间:next; run-state=R;void timeslicecycle(char alg) while(run!=NULL) run-cputime=run-cputime+10; run-needtime=run-

7、needtime-10; run-round=run-round+10; if(run-needtimenext=finish; finish=run; run-state=F; run=NULL; if(ready!=NULL) firstin(); else run-state=W; insert(run); firstin(); prt(alg); /主函数void main() char algo=P; /算法标记 coutN; /输入进程数 create(algo); /创建进程 timeslicecycle(algo); /优先级法调度 /main()七、运行结果1、输入数据2、运

8、行结果示例(1)数据输入完成后的初始状态,进程标识为 x1的进程首先得到调度,运行10个时间单位。(2)进程标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。(3)进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。(4)进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。(5)进程标识为x5的进程得到调度,从就绪态“W” 改为运行态 “R”,运行10个时间单位。(6)进程标识为x1的进程再次得到调度,从就绪态“W”改为运行态“R”,因进程x1只剩下5个单位时间,所以进程 x1只运行5个单位时间。(6)进程

9、标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。进程x1已运行完,从运行态“R”改为运行结束状态“F”。(7)进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。(8)进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。(9)进程标识为x5的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。(10)进程标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行5个时间单位。进程x5已运行完,从运行态“R”改为运行结束状态“F”。(11)进程标识为x3的进程得到调度,从就绪态“W”改为运

10、行态“R”,运行10个时间单位。进程x2已运行完,从运行态“R”改为运行结束状态“F”。(12)进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。(13)进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行5个时间单位。进程x4已运行完,从运行态“R”改为运行结束状态“F”。(14)所有进程都已运行完,状态都为“F”。八、总结在这次实验中,我能够正确分析实验过程和实验结果,思路清晰,能够比较好的理解进程按时间片轮转算法这一调度过程,加深了我对进程时间片轮转调度过程的理解。但是还有很多不足。我自己的C+基础差,不能够自己编写这一调度算法的程序,只能通过网络和同学、老师的帮忙得到正确的程序编码;另外一开始输入进程运行需要的时间时,由于输入运行时间的数值较大,导致后面进程繁多,但后来及时改正,走了弯路,也增加了理解。因此以后要加强自己在C+方面的学习,能够理解源程序;并且要多上机操作,多调试多尝试,争取能理解好了解透。本次实验题需要详细阅读题目和不断地尝试才能找到简便的过程,能加强学生的上机操作能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1