《操作系统导论》第四部分 持久性 P2 磁盘驱动器

2023-11-11 09:59

本文主要是介绍《操作系统导论》第四部分 持久性 P2 磁盘驱动器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • C2 磁盘驱动器
    • 2.1 接口
    • 2.2 基本几何形状
    • 2.3 简单的磁盘驱动器
      • (1) 单磁道延迟:旋转延迟
      • (2) 多磁道:寻道时间
      • (3) 一些其它细节
    • 2.4 I/O时间
    • 2.5 磁盘调度
      • (1) SSTF:最短寻道时间优先
      • (2) SCAN:跨越磁道顺序
      • (3) SPTF:最短定位时间优先

C2 磁盘驱动器

磁盘驱动器(Hard Disk Driver)又称“磁盘机”,是以磁盘作为记录信息媒体的存储装置

磁盘驱动器既能将存储在磁盘上的信息读进内存中,又能将内存中的信息写到磁盘上,因此,就认为它既是输入设备,又是输出设备

磁盘驱动器由磁头、磁盘、读写电路及机械伺服装置等组成,用来驱动磁盘稳速旋转,并控制磁头在盘面磁层上按一定的记录格式和编码方式记录和读取信息

2.1 接口

现代磁盘驱动器的接口都很简单,磁盘驱动器由大量扇区(512字节)组成,每个扇区都可以读取或写入,在具有n个扇区的磁盘上,扇区从0到n-1编号,因此可以将磁盘视为一组扇区,从0到n-1是驱动器的地址空间

通常可以假设访问驱动器地址空间内两个彼此靠近的块比访问两个相隔很远的块更快,也可以假设访问连续块,是最快的访问模式,并且通常比任何随机的访问模式快得多

2.2 基本几何形状

在这里插入图片描述
从一个盘片开始,它是一个圆形坚硬的表面,通过引入磁性变化来永久存储数据,磁盘可能有一个或多个盘片,每个盘片都有两面,每面都称为表面,这些盘片由一些硬质材料(如铝)制成,然后涂上薄薄的磁性层,即使驱动器断电,驱动器也能持久存储数据

所有的盘片都围绕主轴连接在一起,主轴连接到一个电机,以一个恒定的速度旋转盘片,旋转速率通常以每分钟转数 PRM来测量,10000PRM旋转的驱动器一次旋转需要大约6ms

数据在扇区的同心圆中的每个表面上被编码,称这样的同心圆为一个磁道,一个表面包含数以千计的磁道,紧密的排列在一起

要从表面进行读写操作,需要由磁头完成,驱动器的每个表面上有一个这样的磁头,磁头连接到单个磁盘臂上,磁盘臂在表面上移动,将磁头定位在期望的磁道上

2.3 简单的磁盘驱动器

现在假设有一个单一磁道的简单磁盘:
在这里插入图片描述
该磁道只有12个扇区,每个扇区大小为512字节,用0-11表示这些扇区,这里的单个盘片围绕主轴旋转,电机连接到主轴,为了能读取或写入这些扇区,因此需要一个连接到磁盘臂上的磁头,磁盘表面逆时针旋转

(1) 单磁道延迟:旋转延迟

在这里插入图片描述
现在加入收到了读取块0的请求,磁盘必须等待期望的扇区旋转到磁头下,这种等待在现代驱动器中经常发生,并且是I/O服务时间的重要组成部分,它有一个特殊的名称:旋转延迟

如果完整的旋转延迟是R(磁盘旋转一周的时间),此时磁头在块9处,盘片逆时针旋转,磁头等待到块0大约需要R/2的时间,以待块0旋转到磁头下面进行读写,最坏的情况是请求读写扇区5,这导致等待的时间接近完整的R

(2) 多磁道:寻道时间

单磁道是不现实的,现代磁盘有数以百万计的磁道,来看一个具有3条磁道的盘片表面:
在这里插入图片描述

现在追踪请求发生在远处扇区的情况,例如读取扇区11,此时磁头处于扇区30,在最内层的磁道,为了服务这个请求,驱动器首先将磁盘臂移动到正确的磁道,通过一个寻道过程寻道和旋转是最昂贵的磁盘操作之一

通过寻道过程,磁头被定位到了正确的磁道,接下来等待块11旋转经过磁头,当扇区11经过磁头时,I/O的最后阶段将发生,称为传输,数据从表面读取或写入表面

完整的I/O时间轨迹:寻道->等待转动延迟->传输

(3) 一些其它细节

1,外圈磁道通常比内圈磁道具有更多扇区,这是几何结构的结果,外圈磁道的空间更大
2,任何现代磁盘驱动器都有一个重要组成部分,即它的缓存,该缓存只是很少的内存,驱动器可以用这些内存来保存磁盘读取或写入磁盘的数据,

2.4 I/O时间

有了这个简单的模型,可以通过数学来估算磁盘的I/O时间

I/O时间T
T = T寻道 + T旋转 + T传输I/O速率R
R = 传输大小 / T 

假设有两个工作负载,一个称为随机工作负载,它向磁盘上的随机位置发出小的读取请求,随机工作负载在许多重要的程序中很常见,包括数据库,第二种称为顺序工作负载,只是从磁盘连续读取大量的扇区,不会跳过,顺序访问也很常见

现在对希捷的一个高性能磁盘和一个大容量磁盘来估计这两个工作负载:
在这里插入图片描述
1,随机工作负载:
假设容量为4kb,在Cheetah上

T寻道 = 4ms //采用数据中的平均寻道时间
T旋转 = 2ms	//PRM=15000,则每次旋转需要4ms,半圈平均为2ms
T传输 = 30μs //传输大小除以最大传输速率
Cheetah的T = T寻道 + T旋转 + T传输 = 6ms
Cheetah的R = 4kb / T = 0.66MB/s

在Barracuda上

Barracuda的T = T寻道 + T旋转 + T传输 = 13.2ms
Barracuda的R = 4kb / T = 0.31MB/s

2,顺序工作负载:
假设容量为100MB,在Cheetah上

Cheetah的T = T寻道 + T旋转 + T传输 = 800ms
Cheetah的R = 100MB / T = 125MB/s

在Barracuda上

Barracuda的T = T寻道 + T旋转 + T传输 = 950ms
Barracuda的R = 100MB / T = 105MB/s

随机和顺序工作负载之间的驱动性能很大,对于Cheetah来说几乎是200倍左右,对于对于Barracuda来说差不多是300倍

2.5 磁盘调度

由于I/O的高成本,操作系统决定发送给I磁盘的I/O顺序方面发挥作用,即给定一组I/O请求,磁盘调度程序检查请求并决定下一个要调度的请求

与任务调度不同,每个任务的长度通常是不知道的,对于磁盘调度,可以很好的检测每个任务I/O请求的时间,通过估计请求的查找和可能的旋转延迟,磁盘调度程序可以知道每个请求会花费多长时间,因此将优先服务花费时间少的请求,因此磁盘调度程序对于一组I/O请求将尝试遵循SJF(最短任务优先)原则

(1) SSTF:最短寻道时间优先

一种早期的调度方法被称为SSTF shortest seek time first,即最短寻道时间优先SSTF按磁道对I/O请求队列排序,选择在最近磁道上的请求先完成

假设磁头在处于30扇区,现在的请求有21和2,根据SSTF,那么就会率先完成对21的请求,待扇区21的读写完成后,再处理对扇区2的请求

但是SSTF也存在一些缺陷:
1,操作系统并不知道驱动器的几何结构,在操作系统眼里整个驱动器只是一系列的块,采用SSTF并不能满足现代驱动器
2,饥饿,如果采用了SSTF,现在对邻近磁道上的块一直有请求,那么距离远的块的请求,就无法得到服务

(2) SCAN:跨越磁道顺序

为了解决饥饿,有一种算法称为SCAN,简单地以跨越磁道顺序来服务磁盘请求,将一次跨越磁盘称为扫一遍,如果请求的块所属的磁道在这次扫一遍中已经服务过了那么它就不会立刻处理,而是排队等待下次扫一遍

SCAN虽然能避免饥饿,但并没有严格遵循SJF原则,它忽视了旋转

(3) SPTF:最短定位时间优先

SPTF shortest positioning time first,即最短定位时间优先,现代驱动器中,寻道和旋转大致相当,使用SPTF能提高性能

这篇关于《操作系统导论》第四部分 持久性 P2 磁盘驱动器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

Linux操作系统 初识

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

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

关于断言的部分用法

1、带变量的断言  systemVerilog assertion 中variable delay的使用,##[variable],带变量的延时(可变延时)_assertion中的延时-CSDN博客 2、until 的使用 systemVerilog assertion 中until的使用_verilog until-CSDN博客 3、throughout的使用   常用于断言和假设中的

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

操作系统是怎么为不同的程序分配所需的内存空间的

操作系统为不同的程序分配内存空间的过程涉及多个关键步骤,确保每个程序都有其所需的内存资源,同时避免程序之间的冲突。以下是操作系统如何为程序分配内存空间的详细过程: 1. 内存管理的基础概念 虚拟内存:现代操作系统使用虚拟内存机制来为程序提供隔离的内存空间。每个程序运行在其独立的虚拟地址空间中,这使得程序间的内存互不干扰。物理内存:实际的 RAM(随机存取存储器),由操作系统和硬件共同管理。虚拟