磁盘驱动调度算法的模拟Word文档下载推荐.docx
- 文档编号:18728497
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:12
- 大小:17.73KB
磁盘驱动调度算法的模拟Word文档下载推荐.docx
《磁盘驱动调度算法的模拟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《磁盘驱动调度算法的模拟Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
总是从最外向最里进行扫描,然后在从最里向最外扫描。
该算法与电梯调度算法的区别是电梯调度在没有最外或最里的请求时不会移动到最外或最里柱面,二扫描算法总是移到最外、最里柱面。
两端的请求有优先服被务的迹象。
循环扫描(单向扫描):
从最外向最里进行柱面请求处理,到最里柱面后,直接跳到最外柱面然后继续向里进行处理。
该算法与扫描算法的区别是,回来过程不处理请求,基于这样的事实,因为里端刚被处理。
2.设计方法
1)使用流程图描述演示程序的设计思想;
2)选取c/c++、Java等计算机语言,编程调试,最终给出运行正确的程序。
3.程序步骤
参考程序:
1)
c/c++版的驱动调度算法-电梯调度模拟程序
#include<
stdio.h>
stdlib.h>
string.h>
conio.h>
typedefstruct_proc
{charname[32];
/*定义进程名称*/
intteam;
/*定义柱面号*/
intci;
/*定义磁道面号*/
intrec;
/*定义记录号*/
struct_proc*prior;
struct_proc*next;
}PROC;
PROC*g_head=NULL,*g_curr=NULL,*local;
intrecord=0;
intyi=1;
voidinit()
{
PROC*p;
/*初始化链表(初始I/O表)*/
g_head=(PROC*)malloc(sizeof(PROC));
g_head->
next=NULL;
prior=NULL;
p=(PROC*)malloc(sizeof(PROC));
strcpy(p->
name,"
P1"
);
p->
team=100;
ci=10;
rec=1;
prior=g_head;
next=p;
g_curr=g_head->
next;
P2"
team=30;
ci=5;
rec=5;
prior=g_curr;
g_curr->
g_curr=p;
P3"
team=40;
ci=2;
rec=4;
P4"
team=85;
ci=7;
rec=3;
P5"
team=60;
ci=8;
local=(PROC*)malloc(sizeof(PROC));
/*选中进程*/
strcpy(local->
P0"
local->
team=0;
ci=0;
rec=0;
next=NULL;
prior=NULL;
}
voidPrintInit()/*打印I/O表*/
PROC*t=g_head->
printf("
-------------------------------------/n"
---------I/OLIST---------/n"
processteamcirec/n"
while(t!
=NULL)
%4s%8d%8d%5d/n"
t->
name,t->
team,t->
ci,t->
rec);
t=t->
/n/nCurrentprocessis:
/n"
------------------------------/n/n"
local->
name,local->
team,local->
ci,local->
switch(yi)
case1:
{printf("
currentdirectionisUP/n"
break;
case0:
currentdirectionisdown/n"
voidacceptreq()/*接受请求函数*/
pleaseinputtheinformationofthenewprocess/nprocess-name:
/nprocess-team/nprocess-ci/nprocess-rec/n"
1.name/n"
scanf("
%s"
p->
name);
2.team0-199/n"
%d"
&
team);
/*输入请求进程信息*/
3.ci0-19/n"
ci);
4.rec0-7/n"
rec);
getchar();
g_curr=g_head;
/*将此节点链入I/O请求表*/
while(g_curr->
next!
g_curr=g_curr->
prior=g_curr;
next=p;
NEWI/OLIST/n/n"
PrintInit();
/*将新的I/O请求表输出*/
voidqddd()/*驱动调度函数*/
{PROC*out;
intmin;
intmax=g_head->
next->
team;
if(g_head->
next==NULL);
/*若已全部调度,则空操作*/
else{switch(yi)
{case1:
min=g_head->
out=g_head->
/*选出最小的team进程,模拟启动此进程*/
name,out->
team=out->
ci=out->
ci;
rec=out->
rec;
for(g_curr=g_head->
g_curr!
=NULL;
next)
if(g_curr->
team>
record)
{min=g_curr->
if(min>
=g_curr->
team&
&
team>
record)
min=g_curr->
out=g_curr;
/n-----------------------/n"
theprocesschoosed:
out->
name,out->
team,out->
ci,out->
record=local->
record);
if(max<
team)
max=g_curr->
if(max==record)
yi=0;
record=1000;
}/*case1*/
/*case1的对称过程*/
max=g_head->
team<
{max=g_curr->
team<
if(min==record)
yi=1;
record=0;
default:
return-1;
}/*switch*/
if(out->
next==NULL)/*将选中的进程从I/O请求表中删除*/
out->
prior->
free(out);
else
next=out->
prior=out->
prior;
}/*else*/
voidacceptnum()/*通过输入0~1选择‘驱动调度’或是‘接受请求’*/
floatnum;
charc;
while
(1)
----------------------------------------------/n"
pleaseinputanumberbetween0and1/nnum<
=0.5:
acceptrequest/nnum>
0.5:
qudongdiaodu/n/nnum==2:
I/OLIST/n/nnum=?
%f"
num);
while((num<
0||num>
1)&
num!
=2)/*过滤不合法数据注意:
本程序其他输入数据可能未过滤*/
numberERROR!
Inputagainplease!
/nnum=?
/n"
if(num>
0.5&
=2)/*驱动调度*/
next==NULL)
/n/n"
---------------------/n"
I/Olistisempty!
!
/*请求表为空无需调度*/
qudongdiaodu/n"
qddd();
/*调用函数进行调度*/
elseif(num<
=0.5)/*接受请求*/
acceptrequest/n/n"
acceptreq();
elseif(num==2)/*通过输入2显示当前请求I/O表*/
I/OLIST;
"
-------------------/n"
-----------------------/n"
choose'
n'
toquitelsetocontinue/n"
/*输入n离开本程序*/
if(strcmp(c=getchar(),'
)==0||strcmp(c=getchar(),'
N'
)==0)
clrscr();
/n/n/n/n/n/n"
thankyoufortestingmyprogram!
---by01/n"
sleep
(2);
/n/nBYEbye!
return-1;
main()/*主程序*/
init();
acceptnum();
设计体会
能够将磁盘驱动调度算法在各种情况下都能得出正确的结论。
对FIFO、最短寻找时间优先或电梯调度算法能够在多次模拟数据下得出平均移动柱面数,并进行效率比较分析。
2011-2012学年第一学期
操作系统
课程设计报告
班级
学号
姓名
成绩
指导教师于复兴
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 磁盘 驱动 调度 算法 模拟