计算机操作系统实验程序仅供参考scan_第1页
计算机操作系统实验程序仅供参考scan_第2页
计算机操作系统实验程序仅供参考scan_第3页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#pragmawarning(disable:4786) #include #include #include #include#pragmawarning(disable:4786) #include #include #include #include #include #include #include basic.husingnamespacevoidInitRequest(); / voidChangeRequest(boolbinit); / 修改请求的到达时间与磁道voidscan(boolbinit); / voiddisplay(); / maprequest; / mult

2、imap/ scanres 调度结typedefmap:iteratortypedefmultimap:value_typevalType; typedef multimap:iterator muliter;typedefmultimap:reverse_iteratortypedefvector:iteratorintgcurrdiscnum; / int intboolbinit= whilescanf(%d,&choose); casereturncase1: 自动生成请求序binittrue; / case2: case2: 动态修改请求序列 case3: 执行调度算binitfal

3、se; / return/ voidint arrtime, discnum; srand(unsignedint)time(0);for(inti=0;iMAXREQUESTNUM;arrtime = i + 1; / 请求到达时间:1-MAXREQUESTNUM discnum(int)(200*rand()/(RAND_MAX1.0)1 request.insert(make_pair(arrtime, discnum);display(); / / voidChangeRequest(boolifprintf(notinityet!n); return ;intarrtime,disc

4、num; mapiter iter;printf(inputwantedscanf(%d,scanf(%d,/ if(iter=request.find(arrtime)!=discnum=iter-printf(thediscnumis%dndiscnum); / while(1) 输入要修改的到达时printf(inputnewarrtime:); scanf(%d,&arrtime); if (arrtime 1)printf(badinput!ttryagain!n); / iter=(request.insert(make_pair(arrtime,discnum).first; w

5、hile1) 输入将要修改的磁道printf(inputnewdiscnum:); scanf(%d,if(discnumprintf(badinput!ttryagain!n); iter-seconddiscnum 修改相应请求的磁道display(); / printf(Thewantedarrtimeisntexit!npleasetryboolgreatercurrdiscnum(pairreturniter.first=returniter.first=boollesscurrdiscnum(pairreturniter.first=/ scanvoidscan(boolifpri

6、ntf(notinityet!n); return ;intcurrtime0; / 当前调度时间为第一个请求到达的时间 int currdiscnum = 100; / 100 gcurrdiscnum = currdiscnum;/ DISC/ 1:向外;0:向内 bool direct = 1;mapiteritfirst; / mapitermuliteritbeg; / muliter itend; muliter iter; mulre_iter itrbeg; mulre_iter itrend; mulre_iter/ pairitfirst=request.begin();

7、itlast = request.end(); while (itfirst != itlast)if(itfirst-firstif(itfirst-firstcurrtime+; 调度时间1 / scanvec scanen.insert(valType(itfirst-second, itfirst-/ request/ 对可调度请求进行调度 itbeg = scanen.begin(); itend = scanen.end();itrbeg=itrend=if(direct=/ gcurrdiscnumiter=find_if(itbeg,itend,greatercurrdiscn

8、um); if (iter != itend)/ pos=scanen.equal_range(iter-/ for(;pos.first!=pos.second;/ currtime+=(int)(pos.first-first-currdiscnum)*/ 修改调度磁道号 currdiscnumpos.first-first; gcurrdiscnum = currdiscnum;/ 放入调度完成的队列 disc.arr_time=pos.first-second; = pos.first-first;/ scanen.erase(iter-direct=elseif(direct=/ e

9、lseif(direct=/ gcurrdiscnum的请求磁道号 re_iter = find_if(itrbeg, itrend, lesscurrdiscnum); if (re_iter != itrend)/ pos=scanen.equal_range(re_iter-/ for(;pos.first!=pos.second;/ currtime+=(int)(currdiscnum-pos.first-first)*/ currdiscnum=pos.first-first; gcurrdiscnum = currdiscnum;/ 放入调度完成的队列 disc.arr_time=pos.first-second; = pos.first-first;scanen.erase(re_iter-direct=if(scanres.size()=/ / voidmapitermapiteritfirst=request.begin(); mapiter itlast = request.end();if(itfirst!=while (itfirst != itlast)printf(请求时间:%dt磁道号:%dnitfirst-first,itfirst-second); return 打印当前请求队列后返discit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论