目 录
1 课程设计目求……………………………………………………1
2 相关知识…………………………………………………………………1
3 题目分析…………………………………………………………………2
4 概设计…………………………………………………………………2
41 先先服务(FCFS)设计思想………………………………2
42 短寻道时间优先调度(SSTF)设计思想…………………2
43 扫描算法(SCAN)设计思想…………………………………2
44 循环扫描(CSCAN)设计思想………………………………2
5 代码流程………………………………………………………………3
51 流程图……………………………………………………………3
52 源代码……………………………………………………………8
6 运行结果…………………………………………………………………16
7 设计心…………………………………………………………………19
参考文献…………………………………………………………………………19
1 课程设计目求
设计目:加深操作系统原理进步认识加强实践动手力程序开发力培养提高分析问题解决问题力培养合作精神巩固加深磁盘调度概念操作系统门工程性强课程仅求学生掌握操作系统工作原理理知识求学生实际动手力加深学容理解学生熟练掌握计算机操作方法种软件工具加强课程容理解次课程设计通模拟磁臂调度加深操作系统中磁臂调度概念理解学生熟悉磁盘理系统设计方法加深学种磁盘调度算法解算法特点
设计求:编程序实现述磁盘调度算法求出种算法均寻道长度求设计界面灵活选择某算法算法实现
1先先服务算法(FCFS)
2短寻道时间优先算法(SSTF)
3扫描算法(SCAN)
4循环扫描算法(CSCAN)
2 相关知识
数结构:数组
now前磁道号
array[]放置磁道号数组
void FCFS(int array[]int m )先先服务算法(FCFS)
void SSTF(int array[]int m)短寻道时间优先算法(SSTF)
void SCAN(int array[]int m) 扫描算法(SCAN)
void CSCAN(int array[]int m)循环扫描算法(CSCAN)
磁盘调度:进程请求访问磁盘时采种适驱动调度算法进程磁盘均访问(寻道)时间目前常磁盘调度算法:1)闲先服务2)短寻道时间优先3)扫描算法4)循环扫描算法等
3 题目分析
选择熟悉计算机系统程序设计语言模拟操作系统基功设计方法实现程
完成分项功算法实现程中求决定变量应动态变时模块应该合理输出结果具体参实验程序模拟 功程序求行编写程序实现调现操作系统提供模块功函数磁盘调度程序模拟先先服务调度算法 短寻道时间优先调度循环(SCAN)调度算法程序设计语言选终软件(含源代码执行程序)设计报告形式提交课程设计结果磁盘调度限资源发挥更作道程序设计计算机系统中进程会断提出磁盘进行读写操作请求时候进程发送请求速度磁盘响应快必磁盘设备建立等队列
4 概设计
1先先服务(FCFS)设计思想
先请求先响应FCFS策略起似相公请求频率高时候FCFS策略响应时间会延长FCFS策略建立起机访问机制模型假策略反复响应里外请求会消耗量时间量降低寻道时间需等着请求进行适排序简单FCFS策略程做磁盘调度理时候fcfs作简单磁盘调度算法
2短寻道时间优先调度(SSTF)设计思想
短时间优先算法选择样进程求访问磁道前磁头磁道距离次寻道时间短
3扫描算法(SCAN)设计思想
扫描(SCAN)调度算法该算法仅考虑欲访问 磁道前磁道间距离更优先考虑磁头前移动方例磁头正里外移动时SCAN算法考虑访问象应欲访问磁道前磁道外距离样里外访问直更外磁道需访问时磁道换外里移动时样次选择样进程调度访问前位置距离者样磁头逐步外里移动直更里面磁道访问避免出现饥饿现
4循环扫描(CSACN)设计思想
循环扫描(CSCAN)算法:磁头刚里外移动越某磁道时恰进程请求访问磁道时该里程必须等减少种延迟CSCAN算法规定磁头单移动实验程中设计磁头里外移动外里移动时须改方已实验未实现实验已完全演示循环扫描全程
5 代码流程
1先先服务(FCFS)
图 1—1 FCFS流程图
2短寻道时间优先调度(SSTF)
图1—2 SSTF流程图
3扫描算法(SCAN)
图1—3 SCAN流程图
4循环扫描(CSCAN)
图1—4 CSCAN流程图
图1—5 函数流程图
源代码:
#includestdioh
#includestdlibh
#includeiostreamh
#define maxsize 100 定义数组域
先先服务调度算法
void FCFS(int array[]int m)
{
int sum0ji
int avg
printf(\n FCFS调度结果 )
for(i0i
printf(d array[i])
}
for(i0j1j
sum+abs(array[j]array[i])累计总移动距离
}
avgsum(m1)计算均寻道长度
printf(\n 移动总道数: d \nsum)
printf( 均寻道长度: d \navg)
}
短寻道时间优先调度算法
void SSTF(int array[]int m)
{
int temp
int k1
int nowlr
int ijsum0
int avg
for(i0i
for(ji+1j
if(array[i]>array[j])两磁道号间较
{
temparray[i]
array[i]array[j]
array[j]temp
}
}
}
for( i0i
printf(d array[i])
}
printf(\n 请输入前磁道号:)
scanf(d&now)
printf(\n SSTF调度结果 )
if(array[m1]
for(im1i>0i)数组磁道号输出
printf(d array[i])
sumnowarray[0]计算移动距离
}
else if(array[0]>now)判断整数组里数否前磁道号
{
for(i0i
sumarray[m1]now计算移动距离
}
else
{
while(array[k]
k++
}
lk1
rk
确定前磁道已排序列中位置
while((l>0)&&(r
if((nowarray[l])<(array[r]now))判断短距离
{
printf(d array[l])
sum+nowarray[l]计算移动距离
nowarray[l]
ll1
}
else
{
printf(d array[r])
sum+array[r]now计算移动距离
nowarray[r]
rr+1
}
}
if(l1)
{
for(jrj
printf(d array[j])
}
sum+array[m1]array[0]计算移动距离
}
else
{
for(jlj>0j)
{
printf(d array[j])
}
sum+array[m1]array[0]计算移动距离
}
}
avgsumm
printf(\n 移动总道数: d \nsum)
printf( 均寻道长度: d \navg)
}
扫描算法
void SCAN(int array[]int m)先出前磁道号移动臂移动方
{
int temp
int k1
int nowlrd
int ijsum0
int avg
for(i0i
for(ji+1j
if(array[i]>array[j])磁道号进行排列
{
temparray[i]
array[i]array[j]
array[j]temp
}
}
}
for( i0i
printf(d array[i])输出排序磁道号数组
}
printf(\n 请输入前磁道号:)
scanf(d&now)
if(array[m1]
printf(\n SCAN调度结果 )
for(im1i>0i)
{
printf(d array[i])数组磁道号输出
}
sumnowarray[0]计算移动距离
}
else if(array[0]>now)判断整数组里数否前磁道号
{
printf(\n SCAN调度结果 )
for(i0i
printf(d array[i])磁道号输出
}
sumarray[m1]now计算移动距离
}
else
{
while(array[k]
k++
}
lk1
rk
printf(\n 请输入前移动臂移动方 (1 磁道号增加方0磁道号减方) )
scanf(d&d)
printf(\n SCAN调度结果 )
if(d0)
{
for(jlj>0j)
{
printf(d array[j])
}
for(jrj
printf(d array[j])
}
sumnow2*array[0]+array[m1]计算移动距离
}磁道号减方
else
{
for(jrj
printf(d array[j])
}
for(jlj>0j)
{
printf(d array[j])
}
sumnowarray[0]+2*array[m1]计算移动距离
}磁道号增加方
}
avgsumm
printf(\n 移动总道数: d \nsum)
printf( 均寻道长度: d \navg)
}
循环扫描算法
void CSCAN(int array[]int m)
{
int temp
int k1
int nowlrd
int ijsum0
int avg
for(i0i
for(ji+1j
if(array[i]>array[j])磁道号进行排列
{
temparray[i]
array[i]array[j]
array[j]temp
}
}
}
for( i0i
printf(d array[i])输出排序磁道号数组
}
printf(\n 请输入前磁道号:)
scanf(d&now)
if(array[m1]
printf(\n CSCAN调度结果 )
for(i0i
printf(d array[i])磁道号输出
}
sumnowarray[0]+array[m1]计算移动距离
}
else if(array[0]>now)判断整数组里数否前磁道号
{
printf(\n CSCAN调度结果 )
for(i0i
printf(d array[i])磁道号输出
}
sumarray[m1]now计算移动距离
}
else
{
while(array[k]
k++
}
lk1
rk
printf(\n 请输入前移动臂移动方 (1 磁道号增加方0磁道号减方) )
scanf(d&d)
printf(\n CSCAN调度结果 )
if(d0)
{
for(jlj>0j)
{
printf(d array[j])
}
for(jm1j>rj)
{
printf(d array[j])
}
sum2*(array[m1]array[0])array[r]+now计算移动距离
}磁道号减方
else
{
for(jrj
printf(d array[j])
}
for(j0j
printf(d array[j])
}
sum2*(array[m1]array[0])+array[r1]now计算移动距离
}
}磁道号增加方
avgsumm
printf(\n 移动总道数: d \nsum)
printf( 均寻道长度: d \navg)
}
操作界面
int main()
{
int c
FILE *fp定义指针文件
int cidao[maxsize]定义磁道号数组
int i0count
fpfopen(cidaotxtr+)读取cidaotxt文件
if(fpNULL)判断文件否存
{
printf(\n 请 先 设 置 磁 道 \n)
exit(0)
}
while(feof(fp))果磁道文件存
{
fscanf(fpd&cidao[i])调入磁道号
i++
}
counti1
printf(\n \n)
printf( 1011年度OS课程设计磁盘调度算法系统\n)
printf( 计算机科学技术二班\n)
printf( 姓名:宋思扬\n)
printf( 学号:0803050203\n)
printf( 电话:************\n)
printf( 2010年12月29日\n)
printf(\n \n)
printf(\n 磁道读取结果:\n)
for(i0i
printf(5dcidao[i])输出读取磁道磁道号
}
printf(\n )
while(1)
{
printf(\n 算法选择:\n)
printf( 1先先服务算法(FCFS)\n)
printf( 2短寻道时间优先算法(SSTF)\n)
printf( 3扫描算法(SCAN)\n)
printf( 4循环扫描算法(CSCAN)\n)
printf( 5 退出\n)
printf(\n)
printf(请选择:)
scanf(d&c)
if(c>5)
break
switch(c)算法选择
{
case 1
FCFS(cidaocount)先先服务算法
printf(\n)
break
case 2
SSTF(cidaocount)短寻道时间优先算法
printf(\n)
break
case 3
SCAN(cidaocount)扫描算法
printf(\n)
break
case 4
CSCAN(cidaocount)循环扫描算法
printf(\n)
break
case 5
exit(0)
}
}
return 0
}
6 运行结果
图2—1 运行界面
图2—2 运行FCFS界面
图2—3 运行SSTF界面
图2—4 运行SCAN界面
图2—5 运行SCAN界面
图2—6 运行CSCAN界面
图2—7 运行CSCAN界面
运行结果: 四种磁盘调度运行结果正确预期相符
7 设计心
次操作系统课程设计理实践两星期日子里说苦甜学东西时仅巩固前学知识学书没学知识通次课程设计懂理实际相结合重理知识远远够学理知识实践相结合起理中出结真正社会服务提高实际动手力独立思考力
次实验首先解磁盘调度工作原理四种调度方法工作原理课程设计前准备工作时先部分工作做完设计总程序框架时候注意功模块位置量做简洁序功模块程序正确衔接
设计程中遇许问题设计四种调度算法中两种例:初程序设计时两种构思:1)选数结构链表2)选数组初尝试链表觉方便易懂循环扫描处出现问题转变设计思路选数组直接进行排序然联系功模块
时设计程中发现足处前学知识理解够深刻掌握够牢固身知识漏洞实践验较缺乏理联系实际力急需提高说编语言掌握应程序编写太会……通次课程设计定前学知识重新温感谢课程设计程中帮解惑老师学
8 参考文献
[1] 操作系统 民邮电出版社 宗华 宗涛 陈吉 编著
[2] C语言程序设计 清华学出版社 马秀丽 刘志妩 李筠 编著
[3] 操作系统实验指导书 沈阳理工学 唐巍 菀勋 编著
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档