操作系统实验报告61025111017陈绪群Word格式.docx
- 文档编号:1396251
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:19
- 大小:58.43KB
操作系统实验报告61025111017陈绪群Word格式.docx
《操作系统实验报告61025111017陈绪群Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告61025111017陈绪群Word格式.docx(19页珍藏版)》请在冰点文库上搜索。
2.程序代码
#include<
iostream>
stdio.h>
stdlib.h>
cmath>
iomanip>
vector>
usingnamespacestd;
intFCFS(vector<
int>
&
TrackOrder,intn,intm);
//先来先服务
voidresult_print(vector<
TrackOrder,vector<
Distance,double&
aveDis);
//结果输出
intSSTF(vector<
//SSTF
boolisAllVisited(vector<
bool>
visited);
//判断是否所有的序列已经被访问
intgetMinIndex(vector<
TrackOrder,int&
currentTrack,//获取磁道号最小磁道的索引
vector<
visited,vector<
Distance);
intSCAN(vector<
TrackOrder,intn,intm,intDirector);
//SCAN
voidSCAN_min(vector<
Distance,vector<
nextTrack,//根据方向所做得操作,操作根据ch来选择
vector<
visited,int&
currentTrack,charch);
intgetmaxIndex(vector<
visited,intcurrentTrack);
//获取未访问的序列中磁道号最大的索引值
intgetminIndex(vector<
//获取未访问的序列中磁道号最小的索引值
intCSCAN(vector<
//CSCAN
intmain(){
intm;
//开始磁盘号
intn;
//磁道个数
intDirector;
//磁道移动方向
inti,witch;
freopen("
test.txt"
"
r"
stdin);
//文件重定向
cout<
<
"
输入磁道个数n:
;
//初始化
cin>
>
n;
n<
endl;
输入开始磁盘号m:
m;
m<
vector<
TrackOrder(n,-1);
//磁盘访问序列
磁盘访问序列:
for(i=0;
i<
i++){
cin>
TrackOrder[i];
cout<
TrackOrder[i]<
"
}
算法选择说明:
setw(20)<
1-FCFS,2-SSTF,3-SCAN,4-循环SCAN,-1-exit"
磁头移动方向说明:
1-自里向外,2-自外向里"
请输入算法选择witch:
//算法选择
while(cin>
witch){
witch<
switch(witch){
case1:
FCFS(TrackOrder,n,m);
//FCFS
cout<
break;
case2:
SSTF(TrackOrder,n,m);
//SSTF
case3:
输入磁头移动方向:
//SCAN
cin>
Director;
Director<
SCAN(TrackOrder,n,m,Director);
case4:
//CSCAN
CSCAN(TrackOrder,n,m,Director);
case-1:
即将退出程序...."
return0;
default:
输入出错,请重新输入所要选择的算法:
}
return0;
}
//====================================================FCFS==========================================
TrackOrder,intn,intm){
intcurrentTrack=m,i;
//当前磁道
doubleaveDis=0;
Distance(n);
Distance[i]=abs(currentTrack-TrackOrder[i]);
currentTrack=TrackOrder[i];
aveDis+=(1.0*Distance[i])/n;
FCFS结果输出:
result_print(TrackOrder,Distance,aveDis);
//====================================================结果输出==========================================
aveDis){
inti,size=Distance.size();
被访问的下一个磁道号:
//输出下一个被访问磁道号序列
TrackOrder.size();
\n移动距离:
//对应的移动距离
size;
Distance[i]<
endl<
平均寻道距离:
aveDis<
//平均寻道距离
//====================================================SSTF==========================================
intcurrentTrack=m,i,index;
//当前磁道
//移动距离
visitIndex;
//被访问磁道号的索引
visited(n,false);
//是否被访问
i++){//找到未被访问中与当前磁道号最接近的磁道
if(isAllVisited(visited)==false){
index=getMinIndex(TrackOrder,currentTrack,visited,Distance);
visitIndex.push_back(index);
//结果输出
SSTF结果输出:
\n被访问的下一个磁道号:
//输出下一个被访问磁道号序列
TrackOrder[visitIndex[i]]<
i++){//对应的移动距离
Distance[visitIndex[i]]<
//平均寻道距离
//===========================================判断是否所有的序列已经被访问===================================
visited){
inti,size=visited.size();
if(visited[i]==false)
returnfalse;
returntrue;
//====================================================找最近磁道号==========================================
currentTrack,vector<
Distance){
inti,size=TrackOrder.size();
inttemp;
intmin,minDis;
i++){//找到第一个未被访问的磁道号
if(visited[i]==false){
min=i;
minDis=abs(currentTrack-TrackOrder[i]);
i++){//找到当前磁道最近的磁道
temp=abs(currentTrack-TrackOrder[i]);
if(temp<
minDis){
min=i;
minDis=temp;
}
Distance[min]=abs(currentTrack-TrackOrder[min]);
currentTrack=TrackOrder[min];
visited[min]=true;
returnmin;
//====================================================SCAN=======================================
TrackOrder,intn,intm,intDirector){
//当前磁道
Distance;
//移动距离
nextTrack;
switch(Director){
for(i=0;
i++){//从里到外,运用SCAN
SCAN_min(TrackOrder,Distance,nextTrack,visited,currentTrack,'
'
);
i++){//从外到里,运用SCAN
磁盘移动方向不正确...."
return1;
SCAN结果输出:
nextTrack[i]<
//=============================================SCAN根据移动方向获取结果==========================================
nextTrack,
currentTrack,charch){
intmin=-1,minTrack,temp;
switch(ch){
case'
:
if(TrackOrder[i]>
currentTrack){
min=i;
minTrack=TrackOrder[i];
}
break;
if(TrackOrder[i]<
if(min!
=-1){
intminDis=abs(currentTrack-TrackOrder[min]);
//找最近的磁道
for(i=0;
if(visited[i]==false){
switch(ch){
case'
if(TrackOrder[i]>
temp=abs(currentTrack-TrackOrder[i]);
if(temp<
min=i;
minTrack=TrackOrder[i];
minDis=temp;
}
}
break;
if(TrackOrder[i]<
nextTrack.push_back(minTrack);
visited[min]=true;
Distance.push_back(abs(currentTrack-minTrack));
currentTrack=minTrack;
}
//==================================CSCAN============================================
intindex;
//移动距离
i++){//从里到外,运用SCAN
//移动磁头
index=getminIndex(TrackOrder,visited,currentTrack);
index<
if(index!
nextTrack.push_back(TrackOrder[index]);
Distance.push_back(abs(currentTrack-TrackOrder[index]));
currentTrack=TrackOrder[index];
visited[index]=true;
for(i=0;
i++){//从里到外,运用SCAN
SCAN_min(TrackOrder,Distance,nextTrack,visited,currentTrack,'
i++){//从外到里,运用SCAN
index=getmaxIndex(TrackOrder,visited,currentTrack);
i++){//从外到里,运用SCAN
}
c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告 61025111017 陈绪群
![提示](https://static.bingdoc.com/images/bang_tan.gif)