磁盘调度算法(FCFS,SSTF,SCAN)
来源:互联网 发布:跨越百年的美丽 知乎 编辑:程序博客网 时间:2024/06/04 18:37
#include<bits/stdc++.h>using namespace std;int a[2000]; //磁道位置 int n; //磁道数量 int begin; //初始位置 void init(){srand(time(0));n=(rand()%20)+1; // 0-1000for(int i=0;i<n;i++)a[i]=(rand()%20)+1; //0-1000begin= (rand()%20)+1; }int abs(int x){return x<0?-x:x;}int er_fen(int b[],int x){int l=0,r=n-1;//printf("r=%d\n",r);while(l<=r){int mid=(l+r)>>1;if(b[mid]>x){r=mid-1;}elsel=mid+1;}//printf("! %d %d %d\n",x,l,r);return r;}void FCFS() //先来先服务 {int sum=0;printf("路径:\n");printf("%d",begin);int t=begin; //为了不改变起始点 for(int i=0;i<n;i++) {sum+=abs(t-a[i]);printf(" --> %d",a[i]);t=a[i];}printf("\n");printf("总移动数: %d\n",sum);} void SSTF() //用二分搜索优化 时间复杂度 O(nlogn) {int sum=0;int b[2000];int vis[2000]={0}; //记录访问过的点 for(int i=0;i<n;i++) //为了不改变原始数据 b[i]=a[i];int t=begin;sort(b,b+n); //排序用于二分 printf("路径:\n");printf("%d",begin);for(int i=0;i<n;i++){int s=er_fen(b,t); //二分int l=s,r=s+1;while(l>=0&&vis[l]){l--;} while(r<n&&vis[r]){r++;}if(l>=0&&!vis[l]&&abs(b[l]-t)<abs(b[r]-t)){sum+=abs(b[l]-t);vis[l]=1;t=b[l];}else{sum+=abs(b[r]-t);vis[r]=1;t=b[r];}printf(" --> %d",t);} printf("\n");printf("总移动数: %d\n",sum);}void SCAN_down() //电梯法先下降 {int sum=0;int b[2000];for(int i=0;i<n;i++) //为了不改变原始数据 b[i]=a[i];int t=begin;sort(b,b+n); //排序用于二分int s=er_fen(b,t);printf("路径:\n");printf("%d",begin);for(int i=s;i<n;i++) {sum+=abs(t-b[i]);printf(" --> %d",b[i]);t=b[i];}for(int i=0;i<s;i++){sum+=abs(t-b[i]);printf(" --> %d",b[i]);t=b[i];}printf("\n");printf("总移动数: %d\n",sum);}void SCAN_up() //电梯法先上升 {int sum=0;int b[2000];for(int i=0;i<n;i++) //为了不改变原始数据 b[i]=a[i];int t=begin;sort(b,b+n); //排序用于二分int s=er_fen(b,t);printf("路径:\n");printf("%d",begin);for(int i=0;i<=s;i++) {sum+=abs(t-b[i]);printf(" --> %d",b[i]);t=b[i];}for(int i=s+1;i<n;i++){sum+=abs(t-b[i]);printf(" --> %d",b[i]);t=b[i];}printf("\n");printf("总移动数: %d\n",sum);} int main(){init();printf("FCFS:\n");FCFS(); printf("SSTF:\n");SSTF(); printf("SCAN(down):\n");SCAN_down();printf("SCAN(up):\n");SCAN_up();}
阅读全文
0 0
- 磁盘调度算法(FCFS,SSTF,SCAN)
- 磁盘调度算法(FCFS&&SSTF)
- [Python]磁盘调度算法FCFS,SSTF,SCAN,CSCAN
- 操作系统中磁盘调度算法(FIFO,SSTF,SCAN,C-SCAN)
- 操作系统中磁盘调度算法(FIFO,SSTF,SCAN,C-SCAN)
- 磁盘调度算法剖析(FIFO、SSTF、SCAN、CSCAN、FSCAN)
- 磁盘调度算法剖析(FIFO、SSTF、SCAN、CSCAN、FSCAN)
- 磁盘调度算法剖析(FIFO、SSTF、SCAN、CSCAN、FSCAN)
- 磁盘调度算法剖析(FIFO、SSTF、SCAN、CSCAN、FSCAN)
- 磁盘调度算法FIFO、SSTF、SCAN、CSCAN、FSCAN
- SSTF 调度算法 磁盘
- 湘潭大学 操作系统 调度算法 FCFS SSTF SCAN SJF OPT LRU
- 操作系统实验之磁盘调度算法模拟(最短寻道时间优先SSTF 和 扫描算法SCAN)
- 磁盘调度算法(FIFO、SSTF、SCAN、CSCAN)(已经更新bug)
- FCFS,SSTF,SCAN,FIFO,LRO
- FCFS 磁盘调度
- 操作系统算法 之 SCAN磁盘调度算法
- 调度算法 SCAN 磁盘(C语言描述)
- React + webpack 快速搭建开发环境
- SVN合并分支、分支打分支,分支合并分支
- Node.js脚本杀掉占用端口的进程
- 解决windows上安装TortoiseSVN后不能使用命令行问题
- 贪心两题(活动安排问题+删除最少字符得到目标字符)
- 磁盘调度算法(FCFS,SSTF,SCAN)
- volatile
- linux CentOS升级JDK
- nginx 重启 关闭 启动
- 更改Eclipse下Tomcat的部署目录
- database:mysql(C++)
- 设置那navigationbar title 的字体
- rem responsive js
- 安卓混淆大全,包用包对