- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
计算机与信息技术学院综合性、设计性试验汇报
专业:计算机科学与技术年级/班级:08级计科二班—第一学期
課程名称
计算机操作系统
指导教师
本组组员
学号姓名
试验地点
试验時间
项目名称
进程管理
试验类型
综合性
一、试验目的和规定
通过使用不一样的算法来实現进程调度,运用优先级调度的時间片轮转算法、先后次序的時间片轮转调度算法和先来先服务算法来模拟进程调度的过程,加深对进程概念和进程调度过程的理解。
在Linux下用C語言编程模拟优先级和時间片轮转进程调度算法。為了清晰地观测每个进程的调度过程,程序应将每个時间片内的进程状况显示出来。
二、试验仪器或设备
配有linux操作系统的微型计算机一台
三、总体设计(设计原理、设计方案及流程等)
首先,用交互式的过程来动态模拟进程的调度过程。通过输入数字来按特定的算法模拟处理机调度过程。输入1時,按优先级调度的時间片轮转算法模拟进程调度;输入2時,按先后次序的時间片轮转调度算法模拟进程调度;输入3時,按先来先服务算法模拟进程调度;输入4時,退出程序;输入其他数字時,会显示信息“YOUHAVENOTCHOOSEANYALGORITHM!”并退出程序。
另一方面,為进程的信息寄存和进程的状态设置必要的数据构造来寄存。进程的信息包括进程名、已经执行的cpu時间、还需要的cpu時间、进程所处的状态和在进程队列中指向此进程的下一种进程的指针。这些是上述三个算法都要用到的。尚有某些信息是某个算法所特有的,如优先级時间片轮转算法需要用到进程优先级,先后次序的時间片轮转需要用到得到执行的時间片的个数(有的是2个cpu為一种時间片,有的是1个cpu為一种時间片),先来先服务的算法需要用到进程到来時间。尤其阐明,為了便于描述进程所处的状态,将进程的状态用枚举类型来寄存。
最终,执行合适的算法来实現基础调度过程。
四、试验环节(包括重要环节、代码分析等)
试验分4次完毕
第1次:完毕程序的主框架设计,进行调试,验证其对的性;)
第2次:详细设计,进行调试,验证其对的性;
第3次:进行整体调试;
第4次:验证其设计的对的性,完毕试验汇报。
代码分析:
#includestdio.h
#includestdlib.h
#defineP_NUM5
#defineP_TIME50
enumstate{
ready,//准备好
execute,//执行
block,//阻塞
finish//結束
};
structpcbb{
charname[4];
intcometime;//进程到来時间
intpriority;//数越大优先级越高
intcputime;//已占用CPU的時间,也就是该处理机开始工作的時间
intneedtime;//执行時间
intcount;//得到的時间片的次数
enumstateprocess;
structpcbb*next;
};
typedefstructpcbbpcb;
voiddisplay_menu(){
printf(CHOOSETHEALGORITHM:\n);
printf(1PRIORITY\n);
printf(2ROUNDROBIN\n);
printf(3FIRSTCOMEFISETSERVER\n);
printf(4EXIT\n);
}
pcb*get_process(){//输入各个进程,并组合成链队列处理,返回队头指针
pcb*q;inti=0;
pcb*p;//队头指针
pcb*t;//队尾指针
printf(inputnameandtime\n);
while(iP_NUM){
q=(pcb*)malloc(sizeof(pcb));
scanf(%s,q-name);
scanf(%d,q-needtime);
q-cputime=0;//cputime初始化為0
q-priority=P_TIME-q-needtime;//所需要的時间越少优先级越高
q-process=ready;//process的状态初始化為ready
q-next=NULL;
if(i==0){//队列中的第一种
p=q;
t=q;//队尾指针也要处理
}
else{//插入到队列尾
t-next=q;
t=q;
}
i++;
}
returnp;
}
voidfree_process(pcb*p){
pcb*q;
while(p!=NULL){//队列不空時
文档评论(0)