广州大学2020操作系统实验五:磁盘管理实验

2023-11-05 22:40

本文主要是介绍广州大学2020操作系统实验五:磁盘管理实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

相关资料

广州大学2020操作系统实验一:进程管理与进程通信
广州大学2020操作系统实验二:银行家算法
广州大学2020操作系统实验三:内存管理
广州大学2020操作系统实验四:文件系统
广州大学2020操作系统实验五:磁盘管理实验
五份实验报告下载链接🔗

课程设计下载链接🔗

实验五 磁盘管理

      • 相关资料
        • 一、实验目的
        • 二、实验内容
        • 三、实验原理
          • 1、先来先服务算法(FCFS)
          • 2、最短寻道时间优先算法(SSTF)
          • 3、扫描算法(SCAN)
        • 四、实验中用到的系统调用函数(包括实验原理中介绍的和自己采用的),自己采用的系统调用函数要按照指导书中的格式说明进行介绍。
        • 五、实验步骤
          • 先来先服务算法(FCFS)
          • 最短寻道时间优先算法(SSTF)
          • 扫描算法(SCAN)
        • 六、实验数据及源代码(学生必须提交自己设计的程序源代码,并有注释,源代码电子版也一并提交),包括思考题的程序。
        • 七、实验结果分析(截屏的实验结果,与实验结果对应的实验分析)
        • 八、思考题
          • 1、通过对每个算法进行时间复杂度分析对比,每个算法的效率如何?
          • 2、若所有硬盘全部设计成电子硬盘,哪个磁盘调度算法最合适?

一、实验目的

1、了解磁盘调度的策略和原理;
2、理解和掌握磁盘调度算法——先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、电梯扫描算法(SCAN)。

二、实验内容

1、模拟先来先服务法(First-Come, First-Served,FCFS),最短寻道时间优先法(Shortest Seek Time First, SSTF),电梯扫描算法(SCAN)三种磁盘调度算法;
2、对三种算法进行对比分析。
3、输入为一组请求访问磁道序列,输出为每种调度算法的磁头移动轨迹和移动的总磁道数。

三、实验原理
1、先来先服务算法(FCFS)

按先来后到次序服务,未作优化。最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。 采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。

2、最短寻道时间优先算法(SSTF)

最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。

3、扫描算法(SCAN)

SCAN 算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。“电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。但是,“电梯调度”算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。

四、实验中用到的系统调用函数(包括实验原理中介绍的和自己采用的),自己采用的系统调用函数要按照指导书中的格式说明进行介绍。

实验只是模拟实现文件的备份功能,不需要系统调用函数。

五、实验步骤

1、 输入为一组请求访问磁道序列,该序列和所选磁道个数要求随机生成,输出为每种调度算法的磁头移动轨迹和移动的总磁道数;
2、在0~199范围内随机生成调用的磁道,每次生成的磁道数不少于10个,生成不同情况下的磁道组合。
3、实验主程序流程图

先来先服务算法(FCFS)

在这里插入图片描述

最短寻道时间优先算法(SSTF)

在这里插入图片描述

扫描算法(SCAN)

在这里插入图片描述

六、实验数据及源代码(学生必须提交自己设计的程序源代码,并有注释,源代码电子版也一并提交),包括思考题的程序。
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include <string.h>
#include <time.h>int N; //磁道个数
int start; //磁头的位置
int *Seq; //请求服务序列void init(); //随机初始化测试数据
void release(); //进程完成,释放资源
void FCFS(); //先来先服务算法(FCFS)
void SSTF(); //最短寻道时间优先算法(SSTF)
void SCAN(); //扫描算法(SCAN)
void QuickSort(int *q, int left, int right); //快速排序
int Part(int *p, int low, int high);
int main()
{
srand((unsigned long)time(0)); //产生随机数种子 
init(); //随机初始化测试数据printf("先来先服务算法(FCFS):");
FCFS();printf("最短寻道时间优先算法(SSTF):");
SSTF();printf("扫描算法(SCAN):");
SCAN();release(); //释放资源
}void SCAN()
{
int i,flag,temp,steps;
QuickSort(Seq,0,N-1); //升序排序
for(i=0;i<N;i++) 
if(Seq[i]>start){
flag=i;
break;
}
int direction = rand()%2; //随机初始化磁头方向,0为左边,1为右边if(direction == 0){
for(i=0;i<(flag/2);i++) //往小的走,将小的翻转
{ temp =Seq[flag-1-i];
Seq[flag-1-i] = Seq[i];
Seq[i] = temp;
}
for(i=0;i<N;i++) //正序
printf(" %d",Seq[i]);
steps = abs(Seq[0]-start);
for(i=0;i<N-1;i++)
steps+=abs(Seq[i+1]-Seq[i]);
printf("移动%d个磁道\n",steps);
}
else{
for(i=flag;i<(flag+(N-flag)/2);i++) //往大的走,将大的翻转
{ temp =Seq[N-i+flag-1];
Seq[N-i+flag-1] = Seq[i];
Seq[i] = temp;
}
for(i=N-1;i>=0;i--)
printf(" %d",Seq[i]); //逆序steps = abs(Seq[N-1]-start);
for(i=N-1;i>0;i--)
steps+=abs(Seq[i-1]-Seq[i]);
printf("移动%d个磁道\n",steps);
} 
}int Part(int *p, int low, int high) //快速排序
{
int i = low, j = high, pivot = p[low];
while (i < j)
{
while (i < j&&p[j] >= pivot)
{
j--;
}
if (i < j)
{
p[i] = p[j];
i++;
}
while (i < j&&p[i] <= pivot)
{
i++;
}
if (i < j)
{
p[j] = p[i];
j--;
}
}
p[i] = pivot;
return i;
}
void QuickSort(int *q, int left, int right)
{
if (left < right)
{
int pivot = Part(q, left, right);
QuickSort(q, left, pivot - 1);
QuickSort(q, pivot + 1, right);
}
}void SSTF()
{
int steps=0,move=start,i,j,flag,step=1000000;
int *record = malloc(sizeof(int) * N); //记录是否已服务
for(i=0;i<N;i++)record[i]=0; for(j=0;j<N;j++){
for(i=0;i<N;i++){
if(record[i]==0)
if(step>abs(Seq[i]-move)){
step = abs(Seq[i]-move);
flag = i;
}
}
steps+=step;
record[flag]=1;
move= Seq[flag];
step=1000000;
printf(" %d",move);
}
printf("移动%d个磁道\n",steps);
}void FCFS()
{
int steps=0,i;
steps = abs(Seq[0]-start);
for(i=0;i<N-1;i++)
steps+=abs(Seq[i+1]-Seq[i]);
printf("移动%d个磁道\n",steps);
}void init()
{ 
int i;
N = 10; //初始化磁道个数
start = rand()%200; //随机初始化磁头位置Seq = malloc(sizeof(int) * N); //请求访问磁道序列
for(i=0;i<N;i++)
Seq[i]=rand()%200;printf("初始化%d个磁道个数,序列如下:",N);
for(i=0;i<N;i++)
printf("%d ",Seq[i]);
printf("\n磁头的位置位于%d\n",start);
}void release() //进程完成,释放资源
{
free(Seq);
}
七、实验结果分析(截屏的实验结果,与实验结果对应的实验分析)

在这里插入图片描述
(一)FCFS不考虑远近,只考虑先后,基本是移动最多的。
(二)SSTF对当前序列进行一个排序,从当前的位置寻找距离最短的磁道进行移动,所以基本是移动最少的。
(三)SCAN考虑了请求队列具有动态性质,因此兼顾了以上两种算法,以磁头目前的移动方向一直移动下去,直到该方向上没有磁道需要移动,再往反方向移动。
在这里插入图片描述
(四)FCFS依然是移动最多的。
(五)这次实验的结果显示,SSTF与SCAN的移动磁道数目一致,这是因为磁头刚好位于请求队列内所有磁道的左边,因此移动的磁道数目相同。
(六)同理,磁头刚好位于请求队列内所有磁道的右边,SSTF与SCAN移动的磁道数目也相同。

很明显,每次FCFS移动都是最多的,接下来,我们重点关注SSTF与SCAN的区别。

在这里插入图片描述
(七)在这次实验中,SSTF与SCAN的移动磁道数目一致,但磁头不是刚好位于左边或者位于右边,而是位于中间,我们可以看到他们解决的磁道顺序是一致的,可以看到磁道0在这里起到了一个奇妙的化学反应,所以说,当一侧有少数极端的磁道,也可以使得这两种算法移动磁道数目一致。

在这里插入图片描述
(八)上面说过,SSTF基本是移动磁道数目最少的,但不是绝对,在该次实验中,扫描算法SCAN通过先帮左边的一个磁道处理后,依次处理右边的磁道,比SSTF的移动磁道数目大大减少。

八、思考题
1、通过对每个算法进行时间复杂度分析对比,每个算法的效率如何?

先来先服务算法(FCFS):
该算法没什么花费,来一个处理一个。但是对物理硬件是个巨大考验,需要移动的磁道数目过多。

最短寻道时间优先算法(SSTF):
该算法主要花费在确定最短移动的目标磁道上,需要遍历n次获得最小值对应的目标磁道,该算法在实际实现中有个缺点就是太远的磁道可能长期不能获得服务。

扫描算法(SCAN):
该算法主要花费在快排上,只要快排定位好当前的位置,效率最会很快,并且符合请求队列具有动态性质等规则,并且解决了以上算法的弊端。

2、若所有硬盘全部设计成电子硬盘,哪个磁盘调度算法最合适?

电子硬盘不存在物理寻磁道的操作,因此选择算法复杂度最简单的先来先服务算法(FCFS)。

这篇关于广州大学2020操作系统实验五:磁盘管理实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352931

相关文章

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP