模拟最短寻道时间优先SSTF算法
来源:互联网 发布:ip正则表达式js 编辑:程序博客网 时间:2024/06/08 04:31
选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短
#include <malloc.h> #include<stdio.h> #include<math.h> #include <limits.h> typedef struct track{ int column; struct track *next; }node; int location; /*当前磁头位置*/ int sum_move; /*磁头移动总磁道数*/ float ave_move; /*磁头移动平均磁道数*/ int direction; /*磁头移动的方向:direction=1 表示从里向外移动,direction=-1 表示从 外向里移动*/ int found_node(node *head) /*找到离当前磁头最近且与direction 同方向的磁道*/ { node *p,*t; int panduan,truecol=0,jiange=10000; p=head; t=head; while(p&&t){ if(direction==1){ while(p){ if(p->column>=location) { panduan=p->column-location; if(panduan<jiange) { truecol=p->column; jiange=panduan; } } p=p->next; } if(truecol==0){ direction=-1; } } if(direction==-1){ while(t){ if(t->column<location) { panduan=location-t->column; if(panduan<jiange) { truecol=t->column; jiange=panduan; } } t=t->next; } if(truecol==0){ direction=1; } }} sum_move+=jiange; location=truecol; printf("%d ",truecol); return truecol;} node *SCAN(node *head) /*调用found_node 找到满足条件的磁道,并从head 链表中删除该结点*/ { node *pre,*p; int a; a=found_node(head); pre=NULL; p=head; while(p&&(p->column!=a)){ pre=p; p=p->next; } if(p){ if(!pre) {head=head->next;} else pre->next=p->next; } return head;} void main() { int i,num,disk_length; node *head,*p1,*p2; head=NULL; printf("输入磁盘柱面总数:\n"); scanf("%d",&disk_length); printf("输入磁盘读写请求总数:\n"); scanf("%d",&num); printf("输入磁盘读写请求柱面号序列:\n"); for(i=1;i<=num;i++) { p1=(node *)malloc(sizeof(node)); scanf("%d",&p1->column); if(head==NULL){ head=p1; p2=p1; } else{ p2->next=p1; p2=p1; } p2->next=NULL; } printf("输入磁盘当前位置为:\n"); scanf("%d",&location); printf("输入磁盘移动方向(1 表示从里向外移动,-1 表示从外向里移动):\n"); scanf("%d",&direction); printf("\n依次访问的柱面号为:\n"); sum_move=0; for(i=1;i<=num;i++) { SCAN(head); } ave_move=(float)sum_move/num; printf("\n总的移动柱面次数为:%d\n",sum_move); printf("\n平均移动次数为:%.2f\n",ave_move);}
阅读全文
0 0
- 模拟最短寻道时间优先SSTF算法
- 最短寻道时间优先算法(SSTF)
- 操作系统实验之磁盘调度算法模拟(最短寻道时间优先SSTF 和 扫描算法SCAN)
- 最短寻道优先算法----SSTF算法
- SSTF 调度算法 磁盘
- c# 磁盘调度算法:-最短寻道时间优先
- c++模拟操作系统进程调度算法(优先数,时间片轮转)
- 进程调度算法模拟,用动态优先数及时间片轮转法实现进程调度_Java语言模拟实现
- 磁盘调度算法(FCFS&&SSTF)
- 磁盘调度算法(FCFS,SSTF,SCAN)
- 优先数,时间片算法
- 操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)
- 简单模拟高响应优先调度算法
- 深度优先算法--之模拟迷宫
- C语言模拟最高优先数优先进程调度算法
- Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法
- 最早截止时间优先即EDF算法
- 操作系统-磁盘调度算法:先来先服务,最短寻道时间优先,scan算法
- 红烧肉(HSR)挖矿教程
- 【C/C++开发】容器set和multiset,C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())
- OpenJudge百炼-2747-数字方格-C语言-枚举
- C#修改项目名称(Solution)
- 小白的程序员自学之路
- 模拟最短寻道时间优先SSTF算法
- 01背包
- SpringCloud(第 001 篇)简单用户微服务
- SpringBoot一些常用注解
- 1292:韩信点兵
- 剑指offer1 二维数组中的查找
- 用js写一个二层bp神经网络
- 天天学Linux命令23--find 命令的参数详解
- 【C/C++开发】emplace_back() 和 push_back 的区别