广东工业大学课程设计任务书.docx
《广东工业大学课程设计任务书.docx》由会员分享,可在线阅读,更多相关《广东工业大学课程设计任务书.docx(17页珍藏版)》请在冰点文库上搜索。
广东工业大学课程设计任务书
广东工业大学课程设计任务书
题目名称
多道批处理系统两级调度的模拟
学生学院
计算机学院
专业班级
软件工程(4)班
姓名
陈天林
学号
3107006878
一、课程设计的内容
本课程设计要求模拟实现一个的多道批处理系统的两级调度。
通过具体的作业调度、进程调度、内存分配等功能的实现,加深对多道批处理系统的两级调度模型和实现过程的理解。
二、课程设计的要求与数据
1.要求作业从进入系统到最后完成,要经历两级调度:
作业调度和进程调度。
作业调度是高级调度,它的主要功能是根据一定的算法,从输入井中选中若干个作业,分配必要的资源,如主存、外设等,为它们建立初始状态为就绪的作业进程。
进程调度是低级调度,它的主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。
2.假定某系统可供用户使用的主存空间共100KB,并有4台磁带机。
主存分配采用可变分区分配方式且主存中信息不允许移动,对磁带机采用静态分配策略,作业调度分别采用先来先服务算法和最小作业优先算法,进程调度采用先来先服务和最短进程优先算法。
(能增加实现更多的调度算法则可以获得加分)。
3.假定“预输入”程序已经把一批作业的信息存放在输入井了,并为它们建立了相应作业表。
测试数据如下:
作业到达时间估计运行时间内存需要磁带机需要
JOB110:
0025分钟15K2台
JOB210:
2030分钟60K1台
JOB310:
3010分钟50K3台
JOB410:
3520分钟10K2台
JOB510:
4015分钟30K2台
4.分别在不同算法控制下运行设计的程序,依次显示被选中作业、内存空闲区和磁带机的情况。
比较不同算法作业的选中次序及作业平均周转时间。
5.选用程序设计语言:
C、C++等。
三、课程设计应完成的工作
1.充分理解设计的任务,完成设计的基本要求。
然后根据自己的基础和能力选择不同难度的算法和实现方式,以取得更高的分数。
2.独立完成系统的分析、设计、编码、测试工作。
3.完成设计报告的撰写。
4.以光盘(以班为单位刻录)方式提交已调试通过的完整的相关源程序和能够运行的执行文件;提交“课程设计报告”的书面和电子两种版本。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
查阅资料、分析题目、概要设计
分散
周一
2
详细设计、编码
分散
周二
3
调试
实验室
周三
4
撰写设计报告
分散
周四
5
运行、验收
实验室
周五
五、应收集的资料及主要参考文献
[1]计算机操作系统,汤小丹等,西安电子科技大学出版社
[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)
[3]计算机操作系统教程(第二版),张尧学、史美林,清华大学出版社
[4]现代操作系统,A.S.Tanenbaum著,陈向群等译机械工业出版社
发出任务书日期:
2009年12月14日指导教师签名:
林穗
计划完成日期:
2010年1月9日基层教学单位责任人签章:
傅秀芬
课程设计
课程名称_____操作系统____
题目名称_多道批处理系统两级调度的模拟_
学生学院_____计算机学院_________
专业班级_____软件工程(4)班
学号_____3107006878
学生姓名_____陈天林
指导教师_______林穗_______________
2009年12月31日
(1)设计思想说明;
该课程设计综合了本学期操作系统实验的前三个的内容:
进程调度、作业调度、主存空间分配与回收。
因此,就在这三个实验的基础上进行了修改,协调好三个实验之间的先后、调用关系即完成。
(2)系统结构的说明;
基于第二个实验:
作业调度。
首先,初始化输入井作业队列Jdisk,作业队列按时间先后顺序进入输入井作业队列Jdisk。
当到达时刻达到,把Jdisk里符合条件的作业添加到后备队列Jwait,然后对Jwait实施作业调度算法调度作业。
当作业符合资源要求时,即主存分配到合适的内存分区并且磁带机足够,把Jwait里的作业插入到内存里,内存队列为Jexe,并建立内存分配信息表记录内存分配情况(对Qpart进行操作)。
然后,为内存里每个作业建立一个进程,按照进程调度算法建立好进程队列Al,同时更新Jexe作业的序列,令其对齐于进程队列相应的进程。
执行进程队列的第一个进程。
当进程完成,将它从进程队头删掉,并把Jexe的首作业删掉添加到完成队列Jdone中,同时在Qpart中找到被删掉的作业并删掉它释放主存。
对于进程调度,进程先来先务采用的是非剥夺式调度,即执行顺序时按进入内存的先后顺序;短进程优先则采用剥夺式调度,即当有新进程建立,且比正在运行的进程剩余执行时间还要短时,终止正在执行的进程,把新进程添加到进程队列Al首位置。
(3)数据结构的说明;
typedefintStatus;
/////////////////////
typedefstructjob//建立作业信息结构
{
charjname[10];//作业名
inthour;//到达时刻时钟数
intminute;//到达时刻分钟数
intrun;//运行时间
intmemory;//要求主存空间
intsign;//所要磁带机数
intfhour;//完成时刻时钟数
intfminute;//完成时刻分钟数
intenterhour;//进入内存时时刻时钟数
intenterminute;//进入内存时刻分钟数
booldone;//记录是否作业已完成,完成true,否则false
}job,JOB;
//////////////////////
typedefstructjcb//作业信息结构
{
intnum;//记录作业位于主存分区表的分区号
charname[10];//作业名
intrtime;//运行时间
intmemory;//申请主存空间
}jcb,JCB;
typedefstructspart//分区表信息结构
{
intnum;//分区序号
intsadd;//分区始址
intspace;//分区大小
charsitu[10];//分区状态
}spart,SPART;
/////////////////////////
typedefstructpcb
{/*定义进程控制块PCB*/
charname[10];//进程名
intntime;//所需要的运行时间
intstime;//剩余时间
}pcb,PCB;
typedefstructQBNode{
PCBbase;
structQBNode*next;
}QBNode,*QCB;
typedefstruct{
inttip;//就绪队列时间片
intnum;//就绪队列成员数
QCBfront;//队头指针
QCBrear;//队尾指针
}Queue;
//////////////////////
JOBJWORK[5]={//定义五个作业
{"JOBA",10,0,25,15,2,0,0,0,0,false},
{"JOBB",10,20,30,60,1,0,0,0,0,false},
{"JOBC",10,30,10,50,3,0,0,0,0,false},
{"JOBD",10,35,20,10,2,0,0,0,0,false},
{"JOBE",10,40,15,30,2,0,0,0,0,false}
};
intdisk=4;//磁带机数5
intmemory=100;//系统可用主存100KB
inthour=9;//系统时间
intminute=55;//9:
55
QueueAl;//进程队列
vectorJexe;//主存作业队列
vectorJwait;//后备作业队列
vectorJdone;//完成作业队列
vectorJdisk;//输入井作业队列
vectorQjcb;//作业队列
vectorQproce;//位于主存的作业队列
vectorQpart;//分区表状态队列
vectorQfree;//空闲分区表项
vectorPronum;//完成作业的主存分区号
vector:
:
iteratorpnext;//记录空闲分区表分配主存后下一个空闲位置
intsystime=0;//系统时间,初始化为0
intsysmemory=100;//主存空间100KB
intpnadr=-1;//记录pnext所要指向的分区始址,-1表示无空闲分区
floatprogressflag=0;//进度条标志位
核心算法头文件:
operator.h:
运行操作
Sysmain.h:
全局变量及相关数据结构
(4)各主要模块的算法流程图;
(5)程序运行情况;
本次课程设计采用可视化界面,便于观察与操作。
.系统已预设好5个作业供模拟。
需要添加作业时,请按时间到达的先后添加,那相当于作业信息。
开始时可以设定开始时间、磁带机数和内存
运行速度滑动条设定模拟运行的CPU速度,时间间隔最快为0.1s,最慢为1.2s。
注意,调整速度时请先暂停运行。
.点击“开始”按钮开始运行
中途可以添加新作业。
运行途中可以设定调度算法。
当模拟完成,最好先暂停。
然后可以分析完成作业框里的信息。
单击“重置”按钮,重置信息。
单击清空,可以纯手工输入作业信息。
单击“开始”即可开始模拟。
(6)使用说明书(即用户手册)(内容包含如何登录、退出、读、写、等操作说明)
(1)系统默认输入五个作业信息,若要重设,单击“清空”按钮即可清空“输入井作业”信息,依提示按作业到达先后顺序添加作业到输入井。
(2)设定开始运行时间时,请设定到最早到达输入作业的时间之前。
运行途中,若要添加新作业,先按“暂停”按钮,添加的作业到达时刻应比输入井最晚到达的作业到达时刻要还要迟。
添加好后,点击“继续”按钮,模拟继续。
可手动设定磁带机台数,内存大小。
(3)“运行速度”滑动条设定模拟运行的速度,时间间隔为0.1秒至1.2秒之间,值越小,运行越快。
运行途中若要设定模拟速度时,请先按“暂停”按钮,设定好后,单击“继续”按钮即可继续运行。
(4)调度算法分两队搭配,支持随机选择,即在运行时也可以选择调度算法。
(5)模拟完成请按“暂停”按钮,便于分析“完成作业”框的信息。
分析完成可按“重置”按钮重新开始模拟。
(7)总结
有了前三次的操作系统实验的经验,本课程设计难度不大,因而就用vc++6.0做了个界面便于观测操作。
而在处理列表控件时泛起一点波澜。
列表控件是用来显示作业信息的,一开始,编译运行,模拟时,发现程序无反应,而CPU占用率却达到50%以上。
后来一想,应该是CPU运行速度太快,列表控件信息更新不过来导致的吧。
然后,我就把核心算法部分添加到定时器函数CMultSysDlg:
:
OnTimer(UINTnIDEvent),用SetTimer建立定时器,KillTimer销毁定时器,就解决了这个问题。
操作系统是一门非常重要的课程。
本次课程设计,促使我加深对操作系统的兴趣,希望能在这方面做点贡献。
参考文献:
[1]计算机操作系统(修订版),汤子瀛等,西安电子科技大学出版社,2001
[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)