操作系统课程设计报告.doc
《操作系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计报告.doc(69页珍藏版)》请在沃文网上搜索。
1、课 程 设 计 说 明 书设计题目: 操作系统课程设计 班 级: 信息学管理与信息系统2011级 课 程 设 计 任 务 书学院 信息科学与工程 专业 信息学管理与信息系统 班级 2011-2 姓名 一、课程设计题目: 操作系统课程设计 二、课程设计主要参考资料(1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版 影印版). 高等教育出版社. 2007.3. (2) c+面向对象程序设计 电子工业出版社 (3)计算机操作系统(第三版) 西安电子科技大学出版社 三、课程设计应
2、解决的主要问题:(1)CPU调度算法的模拟实现 (2)死锁相关算法的实现 (3)磁盘调度算法的实现 四、课程设计相关附件(如:图纸、软件等):(1) 程序源代码 (2) 五、任务发出日期: 2013-10-1 课程设计完成日期: 2014-1-1 指导教师签字: 指导教师对课程设计的评语成绩: 指导教师签字: 年 月 日设计1 CPU调度算法的模拟实现一、设计目的利用C+编写CPU调度算法,实现先来先服务调度算法FCFS、优先级调度算法PS、短作业优先调度算法SJF、时间片轮转调度算法RR的运行过程和实现的结果,针对模拟进程,利用编写的CPU调度算法对需要运行的进程进行调度。进行算法评价,计算
3、平均周转时间和平均等待时间。二、设计要求针对模拟进程,利用CPU调度算法进行调度,最后要进行算法评价,计算平均周转时间和平均等待时间,并且输出调度结果和输出算法评价指标。调度所需的进程参数由输入产生(手工输入或者随机数产生)。三、设计说明时间片轮转算法需要输入相应的时间片,所以独立编写一个程序,系统主体结构如下: CPU调度算法先来先服务算法优先级调度算法 短作业优先调度算法时间片轮转调度算法实现的结构体如下:struct task_struct char name10; /*进程名称*/ int number; /*进程编号*/ float come_time; /*到达时间*/ float
4、 run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/ float run_end_time; /*运行结束时间*/ int priority; /*优先级*/ int order; /*运行次序*/ int run_flag; /*调度标志*/ tasksMAX;运用switch语句对输入的进程进行相应的算法运行,进入相应的算法函数后会对进程进行调度并输出结果,并对结果进行评估。1. 先来先服务算法(FCFS)可用于作业调度,也可用于进程调度。每次调度都是从后备队列中选择一个或者多个最先进入队列的作业或进程,将他们调入内存进行分配资源,创建进
5、程,放入就绪队列并开始执行。实现函数:int fcfs() /*先来先服务*/主要实现方法如下:执行程序输入进程相关信息寻找第一进程将进程保存至调度列,并进行调度判断所有进程都被调度在未调度的算法中需找最先到达进程是否打印结果信息2. 短作业优先调度算法(SJF),即从后备队列中选择一个或几个估计运行时间最短的作业或进程对其分配资源,并进行调度执行。实现函数:int sjf() /*短作业优先*/主要实现方法如下:执行程序输入进程信息判断最短服务时间进程把进程储存在调度序列并执行在未调度并已到达进程中寻找服务时间最短进程打印调度结果所有进程被调度否是3. 优先级调度算法即在将第一个到达的进程执
6、行完毕后,会在此刻已经到达的进程或作业中选择优先权最高的一个或者几个进程对其进行资源分配并创建进程执行。实现函数:int ps() /*优先级调度*/主要实现方法如下:程序执行输入进程信息判断优先级最高进程把进程存储在调度序列并执行在未调度并已到达进程中寻找优先级最高进程打印调度结果所有进程被调度否是4. 在时间片调度算法的模拟实现中,时间片就是分配给进程运行的一段时间。在轮转法中,系统将所有的可运行(即就绪)进程按先来先服务的原则,排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片。当某进程执行的时间片用完时,系统发出信号,通知调度程序,调度程序便据此信号来停止该进程的执行
7、,并将刚运行的进程送到运行队列的末尾,等待下一次执行;然后,把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证运行队列中的所有进程,在一个给定的时间内,均能获得一时间片的处理机执行时间。实现函数(单独程序)主要实现方法如下:四、运行结果及分析设有如下3个进程:进程名称到达时间运行时间优先级A453B6101C582注:优先级一栏,数字大的表示优先级越高。根据本例来运行本算法,结果如下:采用先来先服务算法:采用优先级调度:采用短作业优先:时间片轮转算法:本程序已通过测试阶段,未出现进程调度错误情况。运行程序后,只需按照提示输入相应的进程的信息(进程名尽量输入单个字母)
8、后选择需要的调度算法即可得出相应结果,并且可以循环运行多次。后期进行相应的美化加工,如需要,可进行可视化改造。结果分析:对于进程调度后得出的各项数据基本准确,当输入时间或其他数据信息出现精确度较高的数值时可能会出现一些误差,属于误差范围之内。程序基本可以实现CPU调度算法的过程解释。五、总结通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。六附录(完整代码)#includeusing namespace std;#define MAX 10struct task_stru
9、ct char name10; /*进程名称*/ int number; /*进程编号*/ float come_time; /*到达时间*/ float run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/ float run_end_time; /*运行结束时间*/ int priority; /*优先级*/ int order; /*运行次序*/ int run_flag; /*调度标志*/ tasksMAX;int counter; /*实际进程个数*/int fcfs(); /*先来先服务*/int ps(); /*优先级调度*/in
10、t sjf(); /*短作业优先*/int hrrn(); /*响应比高优先*/int pinput(); /*进程参数输入*/int poutput(); /*调度结果输出*/int main() int option;pinput();printf(请选择调度算法(04):n);printf(1.先来先服务n);printf(2.优先级调度n);printf(3.短作业优先n);printf(0.退出n);scanf(%d,&option);switch (option) case 0: printf(运行结束。n); break; case 1: printf(对进程按先来先服务调度。n
11、n); fcfs(); break;case 2: printf(对进程按优先级调度。nn); ps(); break;case 3: printf(对进程按短作业优先调度。nn); sjf(); break;int fcfs() /*先来先服务*/float time_temp=0;int i;int number_schedul;time_temp=e_time;for(i=0;icounter;i+) tasksi.run_begin_time=time_temp; tasksi.run_end_time=tasksi.run_begin_time+tasksi.run_time; ta
12、sksi.run_flag=1; time_temp=tasksi.run_end_time; number_schedul=i; tasksnumber_schedul.order=i+1;poutput();return main();int ps() /*优先级调度*/float temp_time=0;int i=0,j;int number_schedul,temp_counter;int max_priority;max_priority=tasksi.priority;j=1;while (jtasksi.priority) max_priority=tasksj.priorit
13、y; i=j; j+; /*查找第一个被调度的进程*/*对第一个被调度的进程求相应的参数*/number_schedul=i;tasksnumber_schedul.run_begin_time=tasksnumber_e_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;tasksnumber_
14、schedul.order=1;temp_counter=1;while (temp_countercounter) max_priority=0; for(j=0;jcounter;j+) if(e_timemax_priority) max_priority=tasksj.priority; number_schedul=j; /*查找下一个被调度的进程*/ /*对找到的下一个被调度的进程求相应的参数*/ tasksnumber_schedul.run_begin_time=temp_time; tasksnumber_schedul.run_end_time=tasksnumber_sc
15、hedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;temp_counter+;tasksnumber_schedul.order=temp_counter; poutput();return main();int sjf() /*短作业优先*/float temp_time=0;int i=0,j;int number_schedul,temp_counter;float run_time;run_
16、time=tasksi.run_time;j=1;while (jcounter)&(e_time=e_time) if (tasksj.run_timetasksi.run_time) run_time=tasksj.run_time; i=j; j+; /*查找第一个被调度的进程*/*对第一个被调度的进程求相应的参数*/number_schedul=i;tasksnumber_schedul.run_begin_time=tasksnumber_e_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_tim
17、e+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;tasksnumber_schedul.order=1;temp_counter=1;while (temp_countercounter) for(j=0;jcounter;j+) if(e_time=temp_time)&(!tasksj.run_flag) run_time=tasksj.run_time;number_schedul=j;break; for(j=0;jcount
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告