驱动调度算法

上传人:pu****.1 文档编号:562060516 上传时间:2023-01-18 格式:DOCX 页数:29 大小:78.09KB
返回 下载 相关 举报
驱动调度算法_第1页
第1页 / 共29页
驱动调度算法_第2页
第2页 / 共29页
驱动调度算法_第3页
第3页 / 共29页
驱动调度算法_第4页
第4页 / 共29页
驱动调度算法_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《驱动调度算法》由会员分享,可在线阅读,更多相关《驱动调度算法(29页珍藏版)》请在金锄头文库上搜索。

1、一模拟电梯调度算法,实现对磁盘的驱动调度二程序中使用的数据结构及其说明ty pedefs true t Process/描述进程信息char nameN。/进程名int cyl_num。 /请求的柱面号int tra_num。 /请求的磁道号int rec_num。 /请求的物理记录号int signal。 /标记位process。三源程序及注释pro_struct.h#ifndef PRO_STRUCT_H#define PRO_STRUCT_H#define N 10ty pedefs true t Process/描述进程信息char nameN 。 /进程名int cyl_num。 /

2、请求的柱面号int tra_num。 /请求的磁道号int rec_num。 /请求的物理记录号int signal。 /标记位process。#endifpro_list.h#ifndef PRO_LIST_H#define PRO_LIST_H#include#include#includepro_struct.h usingnamespace std。#define M 100void lis t(int pro_cou nt,int pro_num,process proM/创 建等 待进程表b5E2RGbCAPcou t等待的进程数:。cinpro_num。if(pro_num0 &

3、 (pro_num+pro_coun t二M/判断要输入的进程数是 否合法,输入后是否超出进程等待表所允许的最大值plEanqFDPwcou t开始输入endl。int i,j=0,h。for(i=0。 iM。 i+for(。 proi.signal二=0&jpro_num。 j+cinproi.nameproi.cyl_numproi.tra_numpro i.rec_num。 DXDiTa9E3dfor(h=0。 hM。 h+if(proh.signal=1while(strcmp(proh.name,proi.name=0|strlen(proi.nam e10 RTCrpUDGiTco

4、u t进程名不合规定,超出指定长度或已存在,请重新输 入进程名:endl。cinproi.name。wh il e(proi.cyl_num0|proi.cyl_num199/判断柱面号是否 越界 5PCzVD7HxAcou t柱面号不合规定,请重新输入柱面号:endl。 cinproi.cyl_num。while(proi. tra_num0|proi. tra_num19/判断磁道号是否 越界 jLBHrnAILgcou t磁道号不合规定,请重新输入磁道号:endl。 cinproi.tra_num。wh il e(proi.rec_num0|proi.rec_num7/判断物理记录号是

5、否越界 xHAQX74J0Xcou t“物理记录号不合规定,请重新输入物理记录号:endl。cinproi.rec_num。proi.signal=1。elseif(pro_num=0cou t要输入的进程个数必须为正整数endl。elsecou t进程数超出进程等待表所允许的最大量endl。cou t当前最多允许输入(M-pro_coun t个进程 endl。#endif Driver_Scheduling.h #includeiostream #includeiomanip #includepro_list.h #includepro_struct.h int dir=0。/0,up向里;

6、,down向外 int cylinder=0。int record=0。int min_rec=0。 /移动到当前进程扇区所要移动的距离int min_r=8。 /旋转调度中最小移动距离int max_min_cyl=200。 /大于当前柱面号的访问请求中的最小者int min_min_cyl=200。/小于当前柱面号的访问请求中的最小者 int x。int choosen=0。 /被选中的进程void cir_sec(process proM /旋转调度if(prox.rec_num min_rec=8-(record-prox.rec_num。elsemin_rec=prox.rec_nu

7、m-record。if(min_rec二min_r/首选移动距离最小,再选磁盘号最小min_r=min_rec。 /选择移动距离最小的请求 choosen=x。void mov_sec(process proM/移臂调度int count_abo=0。int count_low=0。if(dir=0/如果方向向里upif(prox.signal=1if(prox.cyl_numcylindercount_abo+。if(coun t_ abo0/有进程柱面号大于当前柱面号for(x=0。 xM。 x+if(prox.signal=1if(prox.cyl_numcylinder&prox.cy

8、l_nummax_min_cyl/从 大于当前柱面号的访问请求中选择一个最小者LDAY tRyKfEmax_min_cyl=prox.cyl_num。choosen=x。if(prox.signal=1if(prox.cyl_num=max_min_cyl/从大于当前柱面号的访问请求 中选择一个最小者Zzz6ZB2L tkcir_sec(pro。/旋转调度elsedir=l。/改方向为向外,downfor(x=0。 xM。 x+if(prox.signal=1if(prox.cyl_numcylinder&prox.cyl_nummin_min_cyl/从 小于当前柱面号的访问请求中选择一个最

9、小者dvzfvkwMIlchoosen=x。for(x=0。 xM。 x+ if(prox.signal=1 if(prox.cyl_num=min_min_cylcir_sec(pro。 /旋转调度elsefor(x=0。 xM。 x+if(prox.cyl_numcount_low+。if(coun t_ low0/有进程柱面号大于当前柱面号for(x=0o xM。 x+if(prox.signal=1if(prox.cyl_numcylinder&prox.cyl_num/从小于当前柱面号的访问请求中选择一个最小者rqynl4ZNXImin_min_cyl=prox.cyl_numoch

10、oosen=xofor(x=0o xMo x+if(prox.cyl_num=min_min_cylcir_sec(pro。/旋转调度elsedir=0。/改方向为向里upfor(x=0。 x0for(x=0。 xM。 x+if(prox.signal=1if(prox.cyl_num=cylindercir_sec(pro。 /旋转调度elsemov_sec(pro。 /移臂调度cylinder=prochoosen.cyl_num。record=prochoosen.rec_num。prochoosen.signal=0。if(dir=0cou t选择的进程为:endl。coutendl。cout|进程名丨柱面号丨物理记录号丨方向丨endl。 coutendl。cout.setf(ios:left。coutsetw(10prochoosen.namesetw(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号