操作系统课程设计报告.docx
- 文档编号:2169933
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:65
- 大小:882.25KB
操作系统课程设计报告.docx
《操作系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告.docx(65页珍藏版)》请在冰豆网上搜索。
操作系统课程设计报告
课程设计说明书
设计题目:
操作系统课程设计
班级:
信息学管理与信息系统2011级
学号:
********1012
**********
山东科技大学
2013年12月11日
课程设计任务书
学院信息科学与工程专业信息学管理与信息系统班级2011-2
姓名李克乾
一、课程设计题目:
操作系统课程设计
二、课程设计主要参考资料
(1)AbrahamSilberschatz&PeterBaerGalvin&GregGagne.OperatingSystemConcepts(第七版影印版).高等教育出版社.2007.3.
(2)c++面向对象程序设计电子工业出版社
(3)计算机操作系统(第三版)西安电子科技大学出版社
三、课程设计应解决的主要问题:
(1)CPU调度算法的模拟实现
(2)死锁相关算法的实现
(3)磁盘调度算法的实现
四、课程设计相关附件(如:
图纸、软件等):
(1)程序源代码
(2)
五、任务发出日期:
2013-10-1课程设计完成日期:
2014-1-1
指导教师签字:
指导教师对课程设计的评语
成绩:
指导教师签字:
年月日
设计1CPU调度算法的模拟实现
一、设计目的
利用C++编写CPU调度算法,实现先来先服务调度算法FCFS、优先级调度算法PS、短作业优先调度算法SJF、时间片轮转调度算法RR的运行过程和实现的结果,针对模拟进程,利用编写的CPU调度算法对需要运行的进程进行调度。
进行算法评价,计算平均周转时间和平均等待时间。
二、设计要求
针对模拟进程,利用CPU调度算法进行调度,最后要进行算法评价,计算平均周转时间和平均等待时间,并且输出调度结果和输出算法评价指标。
调度所需的进程参数由输入产生(手工输入或者随机数产生)。
三、设计说明
时间片轮转算法需要输入相应的时间片,所以独立编写一个程序,系统主体结构如下:
实现的结构体如下:
structtask_struct
{
charname[10];/*进程名称*/
intnumber;/*进程编号*/
floatcome_time;/*到达时间*/
floatrun_begin_time;/*开始运行时间*/
floatrun_time;/*运行时间*/
floatrun_end_time;/*运行结束时间*/
intpriority;/*优先级*/
intorder;/*运行次序*/
intrun_flag;/*调度标志*/
}tasks[MAX];
运用switch语句对输入的进程进行相应的算法运行,进入相应的算法函数后会对进程进行调度并输出结果,并对结果进行评估。
1.先来先服务算法(FCFS)可用于作业调度,也可用于进程调度。
每次调度都是从后备队列中选择一个或者多个最先进入队列的作业或进程,将他们调入内存进行分配资源,创建进程,放入就绪队列并开始执行。
实现函数:
intfcfs()/*先来先服务*/
主要实现方法如下:
2.短作业优先调度算法(SJF),即从后备队列中选择一个或几个估计运行时间最短的作业或进程对其分配资源,并进行调度执行。
实现函数:
intsjf()/*短作业优先*/
主要实现方法如下:
3.优先级调度算法即在将第一个到达的进程执行完毕后,会在此刻已经到达的进程或作业中选择优先权最高的一个或者几个进程对其进行资源分配并创建进程执行。
实现函数:
intps()/*优先级调度*/
主要实现方法如下:
4.在时间片调度算法的模拟实现中,时间片就是分配给进程运行的一段时间。
在轮转法中,系统将所有的可运行(即就绪)进程按先来先服务的原则,排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片。
当某进程执行的时间片用完时,系统发出信号,通知调度程序,调度程序便据此信号来停止该进程的执行,并将刚运行的进程送到运行队列的末尾,等待下一次执行;然后,把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
这样就可以保证运行队列中的所有进程,在一个给定的时间内,均能获得一时间片的处理机执行时间。
实现函数(单独程序)
主要实现方法如下:
四、运行结果及分析
设有如下3个进程:
进程名称
到达时间
运行时间
优先级
A
4
5
3
B
6
10
1
C
5
8
2
注:
"优先级"一栏,数字大的表示优先级越高。
根据本例来运行本算法,结果如下:
采用先来先服务算法:
采用优先级调度:
采用短作业优先:
时间片轮转算法:
本程序已通过测试阶段,未出现进程调度错误情况。
运行程序后,只需按照提示输入相应的进程的信息(进程名尽量输入单个字母)后选择需要的调度算法即可得出相应结果,并且可以循环运行多次。
后期进行相应的美化加工,如需要,可进行可视化改造。
结果分析:
对于进程调度后得出的各项数据基本准确,当输入时间或其他数据信息出现精确度较高的数值时可能会出现一些误差,属于误差范围之内。
程序基本可以实现CPU调度算法的过程解释。
五、总结
通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。
在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。
六.附录(完整代码)
#include
usingnamespacestd;
#defineMAX10
structtask_struct
{
charname[10];/*进程名称*/
intnumber;/*进程编号*/
floatcome_time;/*到达时间*/
floatrun_begin_time;/*开始运行时间*/
floatrun_time;/*运行时间*/
floatrun_end_time;/*运行结束时间*/
intpriority;/*优先级*/
intorder;/*运行次序*/
intrun_flag;/*调度标志*/
}tasks[MAX];
intcounter;/*实际进程个数*/
intfcfs();/*先来先服务*/
intps();/*优先级调度*/
intsjf();/*短作业优先*/
inthrrn();/*响应比高优先*/
intpinput();/*进程参数输入*/
intpoutput();/*调度结果输出*/
intmain()
{
intoption;
pinput();
printf("请选择调度算法(0~4):
\n");
printf("1.先来先服务\n");
printf("2.优先级调度\n");
printf("3.短作业优先\n");
printf("0.退出\n");
scanf("%d",&option);
switch(option)
{
case0:
printf("运行结束。
\n");
break;
case1:
printf("对进程按先来先服务调度。
\n\n");
fcfs();
break;
case2:
printf("对进程按优先级调度。
\n\n");
ps();
break;
case3:
printf("对进程按短作业优先调度。
\n\n");
sjf();
break;
}
}
intfcfs()/*先来先服务*/
{
floattime_temp=0;
inti;
intnumber_schedul;
time_temp=tasks[0].come_time;
for(i=0;i { tasks[i].run_begin_time=time_temp; tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; tasks[i].run_flag=1; time_temp=tasks[i].run_end_time; number_schedul=i; tasks[number_schedul].order=i+1; } poutput(); returnmain(); } intps()/*优先级调度*/ { floattemp_time=0; inti=0,j; intnumber_schedul,temp_counter; intmax_priority; max_priority=tasks[i].priority; j=1; while((j { if(tasks[j].priority>tasks[i].priority) { max_priority=tasks[j].priority; i=j; } j++; } /*查找第一个被调度的进程*/ /*对第一个被调度的进程求相应的参数*/ number_schedul=i; tasks[number_schedul].run_begin_time=tasks[number_schedul].come_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; temp_time=tasks[number_schedul].run_end_time; tasks[number_schedul].order=1; temp_counter=1; while(temp_counter { max_priority=0; for(j=0;j { if((tasks[j].come_time<=temp_time)&&(! tasks[j].run_flag)) if(tasks[j].priority>max_priority) { max_priority=tasks[j].priority; number_schedul=j; } } /*查找下一个被调度的进程*/ /*对找到的下一个被调度的进程求相应的参数*/ tasks[number_schedul].run_begin_time=temp_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; temp_time=tasks[number_schedul].run_end_time; temp_counter++; tasks[number_schedul].order=temp_counter;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告