操作系统课设报告.docx
- 文档编号:8660272
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:18
- 大小:951.56KB
操作系统课设报告.docx
《操作系统课设报告.docx》由会员分享,可在线阅读,更多相关《操作系统课设报告.docx(18页珍藏版)》请在冰豆网上搜索。
操作系统课设报告
学校代码:
10128
学号:
2201120201005
课程设计
题目:
处理机管理
学生姓名:
李
学院:
信息工程学院
系别:
计算机系
专业:
计算机科学与技术
班级:
计11-1
指导教师:
赵俊生副教授
马晓波副教授
2014年1月3日
内蒙古工业大学课程设计任务书(四)
学院(系):
信息学院计算机系课程名称:
操作系统课程设计指导教师(签名):
专业班级:
计算机11-1学生姓名:
李猜猜学号:
201120201005
一、课程设计题目
处理机管理
二、课程设计的目的
学生通过设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。
使学生初步具有研究、设计、编制和调试操作系统模块的能力。
三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等)
原始数据:
进程控制块PCB结构体。
技术参数:
WindowsXP系统,VC++6.0开发工具。
设计要求:
1.设计基于时间片轮转法的处理机调度算法;
2.或设计基于先来先服务或基于优先权的处理机调度算法;
3.画出以上算法流程图;
4.编程实现算法功能;
5.编写课程设计说明书。
工作量要求:
完成以上设计要求中的所有算法功能。
四、工作进度安排
周一:
布置、讲解题目,收集资料;
周二:
系统分析,算法设计;
周三:
编制、调试程序;
周四:
测试系统,形成设计结论,编写课设报告;
周五:
系统及材料验收,课设答辩。
五、主要参考文献
[1]张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:
清华大学出版社,2006
[2]汤子瀛主编.计算机操作系统(第三版).西安:
西安电子科技大学出版社,2001
[3]张坤等编.操作系统实验教程.北京:
清华大学出版社,2008
审核批准意见
系(教研室)主任(签字)
摘要
本次试验是设计一个时间片轮转调度CPU的算法,模拟实现处理机的调度。
时间片轮转调度CPU的算法是分时系统采用的典型算法,把CPU的执行时间分成若干个一定大小的时间片轮流的分配给就绪队列的各个进程,让各就绪进程按指定的顺序分别占用CPU的一个时间片轮流执行下去,直至完成。
实验中,定义一个进程控制块PCB的结构并为每个进程任意确定一个要求运行时间和到达时间,按照进程到达的先后顺序排成一个循环队列。
设计按时间片轮转的进程调度算法
通过链表的方式把各个PCB结构链接起来,并设置一个队头和队尾指针分别指向第一个和最后一个进程,新生成的进程放队尾。
然后,一轮一轮地逐个查找链表,如果有满足要求的进程就执行,直到所有的进程都执行完毕。
如果,扫描一轮,发现所有进程还都未就绪,那么时间片要自动后移,直到有进程可以运行。
实验中要分不同函数完成不同的功能,进程建立函数用来建立进程;然后要有进程运行模拟函数,用来模拟进程的运行,并在运行中调用进程状态输出函数,每次循环,要调用进程是否结束的判断函数,用来判断所有进程是否都已经结束。
关键字:
时间片;进程控制块;轮转调度;链表
目录
第一章设计内容1
1.1设计目的1
1.2设计内容及要求1
1.3设计思想1
第二章数据结构、算法和算法流程图3
2.1主要数据结构3
2.2程序设计功能图3
2.3程序流程图3
第三章程序运行结果及分析8
3.1程序运行结果8
3.2程序分析9
第四章心得体会及结论10
参考文献11
附录程序清单12
第一章设计内容
1.1设计目的
在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。
也就是说能运行的进程数远远大于处理机个数。
为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占有处理机。
要求学生设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。
1.2设计内容及要求
1、问题描述
处理机管理是操作系统中非常重要的部分。
为深入理解处理机调度部分的功能,设计一个按时间片轮转调度CPU的算法,模拟实现处理机的调度。
2.基本要求
时间片轮转调度CPU的算法是分时系统采用的典型算法,把CPU的执行时间分成若干个一定大小的时间片轮流的分配给就绪队列的各个进程,让各就绪进程按指定的顺序分别占用CPU的一个时间片轮流执行下去,直至完成。
要求定义进程控制块PCB的结构,并为每个进程任意确定一个要求运行时间和到达时间,按照进程到达的先后顺序排成一个循环队列。
设计按时间片轮转的进程调度算法。
1.3设计思想
1.设计思想
(1)假设系统有5个进程,每个进程用一个进程控制块PCB来代表。
PCB的格式如图4-1所示。
进程名
链接指针
到达时间
估计运行时间
进程状态
图4-1进程控制块
其中,进程名即进程标识。
链接指针:
指出下一个到达进程的进程控制块首地址。
按照进程到达的顺序排队。
系统设置一个队头和队尾指针分别指向第一个和最后一个进程。
新生成的进程放队尾。
估计运行时间、到达时间以及进程状态与图3-1中相同。
(2)为每个进程任意确定一个要求运行时间和到达时间。
(3)按照进程到达的先后顺序排成一个循环队列。
再设一个队首指针指向第一个到达进程的首址。
(4)执行处理机调度时,开始选择队首的第一个进程运行。
另外再设一个当前运行进程指针,指向当前正运行的进程。
(5)由于本实践是模拟算法,所以对被选中进程并不实际启动运行,而只是执行:
①估计运行时间减1;
②输出当前运行进程的名字。
用这两个操作来模拟进程的一次运行。
(6)进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。
同时还应判断该进程的剩余运行时间是否为0。
若不为0,则等待下一轮的运行;若该进程的剩余运行时间为0,则将该进程的状态置为完成态C,并退出循环队列。
(7)若就绪队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行完为止。
(8)在所设计的调度程序中,应包含显示或打印语句。
以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。
2.环境说明
工具:
C语言。
在WINDOWS环境下使用VC++6.0进行编译及运行。
第二章数据结构、算法和算法流程图
2.1主要数据结构
数据结构说明:
typedefstructpcb/*进程控制块定义*/
{charpname[N];/*进程名*/
intruntime;/*运行时间*/
intarrivetime;/*到达时间*/
charstate;/*进程状态*/
structpcb*next;/*链接指针*/
}PCB;
2.2程序设计功能图
处理机管理系统有创建进程、运行进程、显示进程状态、保存进程信息、读取进程信息。
2.3程序流程图
(1)主程序流程图:
图2.3—1主程序流程图
函数功能简介:
本函数是主函数,是程序的入口,调用进程建立函数、进程运行函数等。
(2)建立进程函数流程图:
图2.3—2建立进程函数流程图
函数功能简介:
本函数是用来模拟建立进程,建立一个链表,链表的每一个结构体当做一个进程,然后逐个输入进程的相关信息。
(3)所有进程运行结束判断函数流程图
图2.3—3结束判断函数流程图
函数功能简介:
本函数用来判断所有进程是否已经都结束,然后,返回一个值,供进程运行模拟函数调用,用来确定进程是否结束。
(4)进程状态输出函数流程图
图2.3—4状态输出函数流程图
函数功能简介:
本函数用来输出各个进程的当前状态,进程运行模拟函数每运行一次,就对应输出一次当前的每个进程的响应状态。
(5)进程运行模拟函数流程图
图2.3—5进程运行函数流程图
函数功能简介:
本函数用来模拟进程的运行,供主函数调用。
函数在每一个时间片一轮一轮的逐个运行每一个进程,每次运行,就调用进程状态输出函数,用来显示当前进程的状态,每运行一轮,要调用结束判断函数,用来判断所有进程是否已经结束。
第三章程序运行结果及分析
3.1程序运行结果
(1)程序主界面
图3.1--1
(2)输入三个进程,并按提示输入进程的相关信息
图3.1--2
(3)运行结果
图3.1--3
(4)按数字0,退出主程序
图3.1--4
对于测试用例,还有很多路径都有测试过,鉴于篇幅,就不再列出所有可能的路径来进行白盒测试。
3.2程序分析
第四章心得体会及结论
本次试验,让我对操作系统时间片轮转调度CPU进一步了解,加深了印象。
同时,我也巩固了数据结构、C语言方面的编程知识。
本次试验,查询了不少资料,让我增强了自学、查找资料的能力。
实验中,我遇到了不少问题,然后,我就认真自考问题出现的原因,对症下药,解决问题。
比如,当建立运行函数时,由于函数要检查是否结束,还要输出当前状态,代码比较多,显得比较乱,不容易检查错误、调试。
然后,我就建立了进程是否结束的函数、当前状态输出函数,这样一来我的运行函数简单明了,易于检查、调试,并可以对各个小函数的弄能进行验证、调试。
通过实验结果的运行,我可以深一步的了解到时间片时如何轮转调度CPU的,看到了每段时间,每个进程的当前状态。
每个时间片只有一个进程处于运行状态,其他进程或者已经结束、或者处于等待状态、或者还未就绪。
这样来,我们就能够清楚了解到,进程是单独轮转占用CPU的。
总体来说,这次实验让我受益匪浅,无论是对于操作系统方面关于时间片的理解,还是对于我变成知识的巩固,都对我有很大的益处,几天静下心来,认真设计算法,细心变成调试,直到程序能够正确运行。
从头到尾,让我感觉到我的动手能力和理论知识都得到了质的飞跃。
参考文献
[1]张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:
清华大学出版社,2006
[2]汤子瀛主编.计算机操作系统(第三版).西安:
西安电子科技大学出版社,2001
[3]CSDN论坛.
附录程序清单
(1)主程序“main.cpp”代码:
intcurrent=0;
#include"tou.h"
voidmain()
{
intm=1;
printf("\n\t★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
printf("\n\n\t\t\t☆☆欢迎进入处理机管理系统☆☆\n\n");
printf("\n\t★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
f=fopen("result.txt","w");
while(m)
{
jianli();
yunxing();
printf("输入0结束\n");
scanf("%d",&m);
}
printf("按任意键结束.....\n");
getch();
fclose(f);
}
(2)创建进程函数“jianli.h”的代码:
voidjianli()//建立进程
{
PCB*p1,*p2;
intnum;//要建立的进程数
printf("请输入你要运行的进程数:
");
scanf("%d",&num);
head=newPCB;
p1=head;
p2=p1;
for(inti=0;i { printf("第%d个进程的名字是: ",i+1); scanf("%s",p1->pname); printf("运行时间: "); scanf("%d",&(p1->runtime)); printf("到达时间: "); scanf("%d",&(p1->arrivetime)); p1->state=0; p1->next=newPCB; p2=p1; p1=p1->next; } printf("第%d个进程的名字是: ",i+1); scanf("%s",p1->pname); printf("运行时间: "); scanf("%d",&(p1->runtime)); printf("到达时间: "); scanf("%d",&(p1->arrivetime)); p1->state=0; p1->next=NULL; } (3)结构体“jiegou.h”的代码: #defineN20 typedefstructpcb//进程控制块定义 { charpname[N];//进程名 intruntime;//运行时间 intarrivetime;//到达时间 intstate;//进程状态 structpcb*next;//链接指针 }PCB; (3)所有进程是否都执行完毕判断函数“jieshu.h”的代码: intjieshu()//用来判断所有进程是否都已经结束,有没结束的就返回1 { intk=head->runtime; PCB*p5,*p6; p5=head; p6=p5; while(p5! =NULL) { if(p5->runtime>0) { k=p5->runtime; break; } else { p6=p5; p5=p5->next; } } returnk; } (4)所包含的头文件“tou,h”的代码 /*数据结构定义及符号说明*/ #defineM1//时间片长度 #include #include #include"jiegou.h" PCB*head; #include"jianli.h" #include"yunxing.h" FILE*f; (5)进程运行函数“yunxing.h”的代码 #include"jieshu.h" #include"zhuangtaichushu.h" voidyunxing() { current=0; inta=1,k=1; PCB*p1,*p2; p1=head; p2=p1; while(k>0)//扫描所有进程,有没结束的就执行 { printf("第%d轮时间片: \n",a); p1=head; p2=p1; while(p1! =NULL) { printf("\t时间%d时的状态\t",current+1); p1->state=1; zhuangtaishuchu(); p1->state=0; p2=p1; p1=p1->next; printf("\n"); } a++; k=jieshu(); current++; printf("\t每轮进程间隙浪费时间为1,当前时间为: %d\n",current); } } (6)进程状态输出函数“zhuangtaishuchu.h”的代码 voidzhuangtaishuchu() { PCB*p3,*p4; p3=head; p4=p3; while(p3! =NULL) { printf("进程: %s->",p3->pname); if(p3->state! =1) { if(p3->arrivetime>current) printf("未就绪\t"); else { if(p3->runtime<=0) printf("已结束\t"); else printf("等待\t"); } } else { if(p3->arrivetime>current) printf("未就绪\t"); else { if(p3->runtime<=0) printf("已结束\t"); else { printf("运行\t"); p3->runtime=p3->runtime-M; if(p3->runtime>M) current=current+M; else current=p3->runtime+current; } } } p4=p3; p3=p3->next; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 报告