409417080xxx一班.docx
《409417080xxx一班.docx》由会员分享,可在线阅读,更多相关《409417080xxx一班.docx(24页珍藏版)》请在冰豆网上搜索。
409417080xxx一班
石家庄经济学院华信学院
操作系统课程设计报告
(学院)系:
华信学院
专业:
计算机科学与技术
姓名:
迷路的小兰
班级:
一班
学号:
409417080XXX
指导教师:
姐姐
2012年6月22日
操作系统课程设计报告
姓名
小兰
学号
409417080112
日期
2012/6/11到2012/6/22
实验室
机房2
指导教师
姐姐
设备编号
设计题目
驱动调度
一、设计内容
模拟电梯调度算法,实现对磁盘的驱动调度。
二、设计目的
磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。
它作为计算机系统的辅助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。
系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。
这就叫驱动调度,使用的算法称为驱动调度算法。
驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。
本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。
通过实验使自己理解和掌握驱动调度的职能。
三、设计过程
同组成员:
菲菲
本人主要工作:
驱动调度(电梯调度)和随机数函数
先向指针初始方向访问进程,直到没有进程访问为止,再返回指针初始位置,向反方向访问,随机数函数是根据时间计算数值用的是rand()和srand()函数,头文件用的是stdlb.h和time.h
1.数据结构设计(链表,指针,数组)
(1)结构体
#defineSTRUCT_H
#defineM20
typedefstructPCB
{
charpro[M];//进程名
intz_num;//柱面号
intc_num;//磁道号
intw_num;//物理记录号
structPCB*next;
}PCB;
2.算法设计
本设计主要包含以下五部分功能模块:
1,主函数模块main();
2,驱动调度模块drive();
3,初始化模块init(),current_process(PCB*Q)
4,接受请求模块Receive_requests(),insert();
5,输出模块output(),out_info();
下面对各功能模块进行详细说明:
(1)主函数模块
main()
入口参数:
初始化的值及进程输入中的值
出口参数:
运行结果
功能:
模拟调度运行
流程图:
图1主函数流程图
(2)驱动调度模块
drive()
入口参数:
等待进程
出口参数:
访问及删除的进程信息
功能:
电梯调度进程
(3)初始化模块
A.voidinit()
入口参数:
无
出口参数:
初始值
功能:
初始化指针
流程图:
无
B.current_process(PCB*Q)
入口参数:
无
出口参数:
进程链表初始值
功能:
初始化进程链表
流程图:
无
(4)接受请求模块。
A.Receive_requests()
入口参数:
随机数,及选择数字
出口参数:
进程I/O信息
功能:
输入请求进程
流程图:
B.insert()
入口参数:
初始化指针p
出口参数:
q的下一个指针位置
功能:
插入进程信息
流程图:
无
(5)输出模块
A.output()
入口参数:
要访问的进程信息值
出口参数:
I/O表
功能:
输出访问进程信息
流程图:
无
B.out_info()
入口参数:
接受请求的进程信息
出口参数:
输出进程表
功能:
输出访问进程
流程图:
无
四、程序运行结果
1、源文件dianti\main.cpp
2、运行结果:
(1)运行界面
输出:
初始值
输入:
无
结果:
如图1
图1运行界面
(2)生成随机数
输入:
enter
输出:
随机数
结果:
<0.5接受请求
图2生成随机数
(3)选择退出
输入:
n
输出:
退出界面
结果:
图3选择退出
(4)输入信息不符合要求
输入:
进程信息
输出:
错误提示或者正确信息
结果:
图4输入信息不符合要求
(5)接受请求界面
输入:
符合要求的进程信息
输出:
输入的信息,I/O请求信息表
结果:
图5接受请求界面
图6接受请求界面,输出I/O信息表
(6)驱动调度界面
输入:
enter
输出:
随机数>0.5
结果:
驱动调度:
图7驱动调度界面
PS:
c的柱面号离初始指针最近,54>50,方向向里up
图8接上一步运行,接受请求界面
图9驱动调度输出访问进程并删除
Ps:
57>54>50,up
图10
图11驱动调度并删除进程
PS:
199>57>54>50,up
图11驱动调度并删除进程
PS:
因为没有大于50的可以访问的进程了,所以指针down,d的磁道号最近
图12驱动调度并删除进程
图11驱动调度并删除进程
PS:
49=49,物理记录号2>1,
图11驱动调度并删除进程
PS:
49=49>42,物理记录号2=2,方向down
图12退出进程
PS49=49>42=42down,退出。
五、设计总结
通过和同组同学合作,终于把驱动调度的模拟程序写出来了,我们用的是链表结构和指针模拟的调度进程,我负责主函数里的随机数和驱动调度的编写,程序刚写出来错误百出,驱动调度中的旋转调度不知道如何写,参阅多资料终于解决了这个问题,初始化头指针开始设值为0,指针只能向里运行,多亏同组同学及时发现这个问题,将初值改了,程序才得以正常运行。
为了简单明了,我们将程序分成几个模块。
我们在主函数里还引用了随机数函数,只用rand()只能产生伪随机数,需要srand()和rand()结合使用,这个函数是基于随机数的函数。
我负责驱动调度是使用的电梯算法(scan算法),跟天体运行过程相仿,编程简单无需计算,提高了程序的效率,电梯在2楼只能先向上访问楼层,直到楼顶才可访问2楼以下的楼层,大大减少了寻道距离。
通过实习我复习了数据结构和c语言,为考研奠定了基础。
而且更加深入的理解了磁盘调度的算法,对考验操作系统复习提供了帮助。
这次实习提高了我的编程能力,及熟练使用了循环语句和选择语句。
希望指导老师可以多设几个,这样的课程设计时间长些。
六、指导教师评语及成绩
评语:
成绩:
年月日