操作系统实验4—磁盘调度

操作系统实验4—磁盘调度

实验描述

实验内容:

编写一个磁盘调度程序,模拟操作系统对磁盘的调度。

实验目的:

本实验要求学生独立设计并实现磁盘调度模拟程序,以加深对磁盘调度特点和各种磁盘调度算法的理解。

实验要求:

可以随机输入磁道请求序列,当前磁头位置和磁头移动方向,支持先来先服务、最短寻道时间优先、扫描、循环扫描调度算法,能够输出磁头移动经过的磁道序列。具体信息见测试用例格式说明。

测试用例格式如下:

输入:

磁盘调度算法
当前磁头位置
磁头移动方向
磁道请求序列(磁道1,磁道2,磁道3,...)              

其中:
(1) 调度算法选项为:
    1----先来先服务
    2----最短寻道时间优先
    3----扫描法
    4----循环扫描法

(2) 磁头移动方向选项为:
    1----向磁头号增大方向移动
    0----向磁头号减小方向移动

输出:

磁头移动经过的磁道序列(磁道1,磁道2,磁道3)
磁头移动经过的总磁道数
测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 1
53
1
98,183,37,122,14,124,65,67
53,98,183,37,122,14,124,65,67
640
1秒 64M 0
测试用例 2 2
53
1
98,183,37,122,14,124,65,67
53,65,67,37,14,98,122,124,183
236
1秒 64M 0
测试用例 3 3
53
1
98,183,37,122,14,124,65,67
53,65,67,98,122,124,183,37,14
299
1秒 64M 0
测试用例 4 4
53
1
98,183,37,122,14,124,65,67
53,65,67,98,122,124,183,14,37
322
1秒 64M 0

设计思路

虽然每次输入的磁道数据只有磁道位置,但是在算法中需要计算每个磁道距离当前磁头的位置,以及最短寻道时间优先算法中还有记录该磁道是否已经访问过,所以依然采用结构体数组的形式将需要用到的信息全部存储起来。

struct node
{
   
	int positon;//磁道位置
	int moved;	//磁道与当前磁头的距离
	int visit;	//磁道是否被访问过
}que[1010];		//初始磁道序列

程序概要设计如下:
概要设计

  1. main()函数是主程序的入口,控制程序流程,按照输入的调度信号选择相应的算法模块进行运行,并输出相应的结果
  2. input()函数是输入函数,接受程序输入
  3. output()函数是输出函数,将磁头移动的信息进行输出
  4. dis()函数是计算两个磁道之间绝对值的函数
  5. FCFS()函数是先来先服务算法,磁头按照磁道到来的顺序进行移动
  6. SSTF()函数是最短寻道时间优先算法,每次找出距当前磁头距离最短的磁道进行移动
  7. SCAN()是扫描法,又称“电梯法”。每次将磁头按照电梯的方式朝一个方向移动,到顶点后按相反方向折回
  8. CSCAN()函数是循环扫描法,每次将磁头按照电梯的方式朝一个方向移动,到顶点后直接移动到相反方向的顶点,继续沿着此方向移动
int main();		//主程序入口
void input();	//输入函数
void output();	//输出函数
int dis(int a, int b);//两个磁道距离的绝对值
void FCFS();//先来先服务
void SSTF();//最短寻道时间优先
void SCAN();//扫描法
void CSCAN();//循环扫描法

上机代码

代码使用 C++ 语言进行编写

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
struct node
{
   
	int positon;//磁道位置
	int moved;//磁道与当前磁头的距离
	int visit;//磁道是否被访问过
}que[1010];//初始磁道序列
void input();//输入函数
void output();//输出函数
int dis(int a, int b);//两个磁道距离的绝对值
void FCFS();//先来先服务
void SSTF();//最短寻道时间优先
void SCAN();//扫描法
void CSCAN();//循环扫描法
int sig, start, direction;//算法选择标志,当前磁头位置,磁头移动方向
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值