《操作系统原理》课程设计报告.docx
- 文档编号:5139679
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:11
- 大小:100.61KB
《操作系统原理》课程设计报告.docx
《《操作系统原理》课程设计报告.docx》由会员分享,可在线阅读,更多相关《《操作系统原理》课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
《操作系统原理》课程设计报告
《操作系统原理》
课程设计报告书
题目:
进程控制模块的设计与实现
专业:
网络工程
学号:
*********
******************
******************
完成日期:
2015-12-05
第1章 课题概述3
1.1设计要求3
1.2设计理论依据3
第2章 设计简介和内容6
2.1设计简介6
2.2设计内容6
第3章 详细设计
3.1 设计流程图7
3.2 主要程序代码9
第4章 设计结果及分析10
4.1运行结果截图10
总结15
第1章课题描述
1.1设计要求
1.叙述要详细。
2.要有条理。
3.各个功能分开阐述。
4.自己可以增加题目要求的功能模块。
5.可以增加自己对题目的理解。
1.2设计理论依据
根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。
短作业优先调度算法,从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
第2章设计简介和内容
2.1设计简介
在多道程序环境下,将系统中的作业组织起来,为每个进入系统的作业建立档案以记录和作业相关的信息,按要求输入作业名、到达时间和服务时间,并为其建立作业控制块(JCB)挂入后备队列。
进行作业调度时,在其后计算出各个作业的开始执行时间、完成时间、周转时间和平均周转时间,利用短作业优先算法进行作业调度,并按照由小到大的顺序显示出来。
2.2设计内容
1)编写程序完成批处理系统中的作业调度,要求采用短作业优先的作业调度算法。
实验具体包括:
首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。
2)创建作业控制块JCB,定义为结构体,为进入系统的作业建立档案,其中定义了作业名,作业到达时间,作业服务时间,作业开始执行时间,作业完成时间,作业周转时间,作业平均周转时间。
3)首先按各个作业完成时间由小到大排序。
再用输入的到达时间与服务时间按一定算法算出各个作业的开始执行时间、完成时间、周转时间和作业平均周转时间。
第3章详细设计
3.1设计流程图
是
否
否
是
3.2主要代码
//789.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
#include
#include
#include
#defineMAX100//最多能管理的作业数目
structjcb//作业控制块JCB,定义为结构体
{
charname[10];//作业名
floatarrivetime;//作业到达时间
floatservicetime;//作业服务时间
floatstarttime;//作业开始执行时间
floatfinishtime;//作业完成时间
floatzztime;//作业周转时间
floatavezztime;//作业平均周转时间
};
jcba[MAX];
voidinput(jcb*p,intN)
{
inti;
printf("请分别输入:
\n\t作业名,到达时间,服务时间(如:
JOB1510)\n\n");
for(i=0;i<=N-1;i++)
{
printf("请输入第%d个作业信息:
",i+1);
scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);
printf("\n");
}
}
voidPrint(jcb*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatavezztime,intN)
{
intk;
printf("调度顺序:
");
printf("%s",p[0].name);
for(k=1;k { printf("-->%s",p[k].name); } printf("\n\n"); printf("\t\t\t作业信息: \n"); printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tavezz\n"); for(k=0;k<=N-1;k++) { printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].avezztime); } } voidsort(jcb*p,intN) { for(inti=0;i<=N-1;i++) for(intj=0;j<=i;j++) if(p[i].arrivetime { jcbtemp; temp=p[i];p[i]=p[j]; p[j]=temp; } } voiddeal(jcb*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float&avezztime,intN) { intk; for(k=0;k<=N-1;k++) { if(k==0) { p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime; } else { p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].servicetime; } } for(k=0;k<=N-1;k++) { p[k].zztime=p[k].finishtime-p[k].arrivetime; p[k].avezztime=p[k].zztime/p[k].servicetime; } } voidjcbf(jcb*p,intN) { floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,avezztime=0; sort(p,N); for(intm=0;m { if(m==0) p[m].finishtime=p[m].arrivetime+p[m].servicetime; else p[m].finishtime=p[m-1].finishtime+p[m].servicetime; inti=0; for(intn=m+1;n<=N-1;n++) { if(p[n].arrivetime<=p[m].finishtime) i++; } floatmin=p[m+1].servicetime; intnext=m+1;//m+1=n for(intk=m+1;k { if(p[k+1].servicetime { min=p[k+1].servicetime; next=k+1; } } jcbtemp; temp=p[m+1]; p[m+1]=p[next]; p[next]=temp; } deal(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N); } intmain() { while (1) { intN; printf("\t\t\t------短作业优先调度算法------\n"); printf("请输入作业数目: ");scanf("%d",&N); charch; if(N>MAX) { printf("\t! ! 输入的作业数目太大,请输入不大于%d的整数\n",MAX); printf("按Q或者q退出程序,按其他任意键继续测试..."); ch=getch(); if(ch=='Q'||ch=='q') { break; } elsecontinue; } input(a,N); jcb*b=a; jcbf(b,N); printf("按Q或者q退出程序,按其他任意键继续测试..."); ch=getch(); if(ch=='Q'||ch=='q') { break; } } return0; } 第4章设计结果及分析 4.1运行结果截图 1)初始化界面 图1-1初始化 初始化作业输入作业的数目,但不可超过进程设置的最大值。 如果输入的作业数超过作业数的最大值,程序就会退出。 输入如果在正确范围的话,程序就会执行,并会出现相应的提示信息,执行情况如下图所示。 2)输入进程数目 图1-2输入进程数目 承接上面的页面,输入相应的作业数,输入作业数后程序会给出相应的提示,用户可根据相应的提示,进行操作,进行下一步,如下图所示。 3)输入进程名、到达时间、服务时间 图1-3输入进程各信息 用户进入这个界面后,根据相应的提示,输入用户所构造的作业信息。 如作业名、到达时间、服务时间。 根据用户输入相应的值,程序会给出相应的处理,如下图所示。 4)运行结果 图1-4运行结果 相应的程序对用户输入的作业信息,做出了相应的处理。 如程序的执行顺序,对应的程序的名字、到达时间、服务时间、开始服务时间、完成时间、周转时间、平均周转时间。 用户可根据执行情况,了解相应的进程的执行情况。 总结 1.列出开发过程中遇到的主要困难,并写出解决方法 把完成的模块组合到主程序上。 组合简单,但是要让各个部分没有分歧地融为一体,却是很难。 往往组合之后会有很多错误的地方,我们要一个一个地去解决。 有些错误很容易修正,但有些却是绞尽脑汁都弄不明白的。 比如说,有个显示的模块,程序写的是对的,但不知道为什么,总是出错。 改了许多次,才发现是头文件没有声明。 2.总结所系统的功能和不足,包括自己没有实现的部分。 如果自己有时间和能力,系统应该做成什么样子的。 系统只简单地实现了进程调度(短作业优先)的基本功能: 输入进程数目、输入进程服务时间、输入进程到达时间、简单的进程短作业优先排序以及计算平均周转时间和平均带权周转时间。 但没有实现界面应用,和相应的界面优化。 3在课程设计中自己的收获与感受 通过本次课程设计对用短作业的优先调度算法有了更深入的理解和掌握,进一步巩固和复习操作系统的基础知识,更进一步的了解了结构化模块化程序设计的方法,提高了调试程序的技巧,提高了自己的动手能力。 通过模拟进程的调度问题,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题。 更加深了我对于操作系统理论的理解,在自己的动手操作过程中,让自己多多的在实践中可以加深对理论的理解。 更让我们懂得程序编程是一个细心的工作,要养成良好的编程习惯。 减少一些因为马虎而造成的程序代码错误。 这在以后的工作中非常重要,以后在社会上,程序的代码也就不可能是几百行或者上千行,可能是一个你想都想不到的数字,如果因为你不好的编程习惯,导致一个错误例如少加一个&等,这种连应用程序的检查不出来的错误,但在程序运行时就会出现错误,这种错误在几万甚至几十万行代码中是很难找到的。 因此要从开始就培养一个良好的编程习惯是非常必要的。 指导教师评语: 成绩: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统原理 操作系统 原理 课程设计 报告