操作系统基础之磁盘
概述
基本概念
磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存在扇区中。
磁头首先寻找到对应磁道,然后等到磁盘进行周期旋转到指定的扇区,才能读取到对应的数据。存取时间 = 寻道时间 + 等待时间
盘面号(磁头号):0 ~ M-1
;由于一个盘面上只有一个磁头,所以盘面号也叫作磁头号
柱面号(磁道号):0 ~ L-1
;磁道编号通常是从外沿向内进行编号
扇区号:1 ~ N
;对于同一条磁道可以分为若干扇区,对于扇区分成三个字段
标识符字段:存放扇区的标识信息
校验字段:检验磁盘读写操作的正确性
数据字段:存放数据信息
存储容量计算公式
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
扇区编址方式
- CHS方式:柱面/磁头/扇区,××磁道(柱面),××磁头,××扇区,DOS中称为
绝对扇区
表示法。 - LBA方式:相对扇区号,以磁盘第一个扇区(0柱面、0磁头、1扇区)作为LBA的0扇区,后面的扇区依次编号
LBA扇区号与CHS间的转换
- CHS转换为LBA:若L、M、N分别表示一个磁盘的柱面数(磁道数)、盘面数(磁头数)、扇区数,则第
i
柱面j
磁头k
扇区所对应的LBA扇区号为: L B A = ( i ∗ M ∗ N ) + ( j ∗ N ) + k − 1 LBA=(i*M*N)+(j*N)+k-1 LBA=(i∗M∗N)+(j∗N)+k−1 - LBA转换为CHS:若知道LBA扇区号,则对应的柱面号、磁头号、扇区号分别是:
- 柱面号: i = i n t ( L B A / ( M ∗ N ) ) i=int(LBA/(M*N)) i=int(LBA/(M∗N))
- 磁头号: j = [ L B A m o d ( M ∗ N ) ] / N j=[LBAmod(M*N)]/N j=[LBAmod(M∗N)]/N
- 扇区号: k = [ L B A m o d ( M ∗ N ) ] m o d N + 1 k=[LBAmod(M*N)]modN+1 k=[LBAmod(M∗N)]modN+1
磁盘类型
按照磁头是否需要移动进行分类:
- 固定头磁盘:对于同一盘面上的不同磁道,都有相应位置固定的磁头进行读写,如上图中的黑色磁头和蓝色磁头分别读取一个磁道,对多条磁道进行读写的时候,磁头不需要移动位置。所以对于一个盘面上的多条磁道可以并行进行读取,访问速度较快。同样价格也较高
- 移动头磁盘:对于移动头磁盘,它的磁头是可以沿着径向臂进行径向移动,所以只需要使用一个磁头就可以访问所有的磁道。但是同一时间只能访问一个磁道,只能实现顺序读写,读写速度较慢,造价较低。计算机中使用的磁盘大多数都是移动头磁盘
磁盘访问时间
以移动头磁盘为例
寻道时间Ts
:把磁头移动到指定磁道上所经历的时间。
T s = m ∗ n + s T_s=m*n+s Ts=m∗n+s
m
:一般磁盘:0.2~0.3
;高速磁盘:m≤0.1
s
:磁臂启动时间,约为2ms~3ms
磁盘读写操作中绝大部分时间都是寻道时间,所以对寻道时间进行优化可以有效的大幅减少访问时间。
旋转延迟时间Tr
:指定扇区移动到磁头下面所经历的时间。
也就是要读取的蓝色扇区移动到黑色磁头下面所要经历的时间。旋转延迟时间最长为 1 r \frac{1}{r} r1,最短为0。平均旋转延迟时间为 T r = 1 2 r T_r=\frac{1}{2r} Tr=2r1,r
表示转速。
传输时间Tt
:把数据从磁盘读出或向磁盘写入数据所经历的时间。
T t = b r N T_t=\frac{b}{rN} Tt=rNb
b
表示要读写的字节数,N
表示一条磁道上总的字节数
因此,可将磁盘访问时间 T a T_a Ta表示为:
T a = T s + 1 2 r + b r N T_a=T_s+\frac{1}{2r}+\frac{b}{rN} Ta=Ts+2r1+rNb
磁盘调度
当有大量磁盘I/O请求时,恰当选择调度顺序,以降低完成这些I/O服务的总时间。
磁盘调度方式主要有以下两种:
- 移臂调度:当同时有多条磁道访问请求时,确定磁道访问顺序,以减少平均寻道时间
- 旋转调度:当一条磁道上有多个扇区访问请求时,确定扇区访问顺序,以减少旋转延迟时间。按照扇区距离磁头的位置的偏差来进行调度。
旋转调度算法较为简单,只是按照扇区距离磁头的位置的偏差来进行调度。
磁盘调度算法
主要有两类:
- 移臂调度:在满足一个磁盘请求时,总是选取与当前移动臂前进方向上最近的那个请求,使移臂距离最短
- 旋转调度:在满足一个磁盘请求时,总是选取与当前读写头旋转方向上最近的那个请求,是旋转圈数最少
移臂调度算法
FCFS
先来先服务,First Come First Served,根据进程请求访问磁盘的先后顺序进行调度。
假设当前磁道在100号磁道,磁头正向磁道号增加的方向(由外向里)移动。现依次有如下磁盘请求队列:23, 376, 205, 132, 61, 190, 29, 4, 40
则磁盘调度顺序为:23, 376, 205, 132, 61, 190, 29, 4, 40
寻道距离:Ts = (100-23) + (376-23) + (376-205) + (205-132) + ... + (40-4)
平均寻道距离 = Ts / 9
。
由于先来新服务算法并没有对磁盘访问进行优化,所以它可能会得到比较长的寻道距离。
SSTF
Shortest Seek Time First,最短寻道时间优先算法,在选择下一条磁道时,总是访问与当前磁盘距离最近的磁盘进行访问。
对于上例,其磁盘调度顺序为:132, 190, 205, 61, 40, 29, 23, 4, 376
寻道距离:Ts = (132-100) + (190-132) + (205-190) + ... + (23-4) + (376-4)
最短寻道距离优先可以保障每一次的寻道距离最短,但是不能够保障最后系统得到的平均寻道距离最短。
存在的问题:
- 不能保证平均寻道距离最短;
- 会产生饥饿现象; 如果系统不断的出现在100号磁道附近的磁道访问请求,则原先较远的磁道请求如205, 376 就会处于很长时间的等待中
- 影响磁盘的机械寿命:不考虑磁头的移动方向,可能会造成磁盘频繁的改变其磁头运动方向。从而影响磁盘的机械寿命
SCAN
扫描算法,又称为电梯算法,磁头在磁盘上双向移动,选择磁头当前所在磁道最近的请求访问的磁道,并且与磁头移动方向一致,磁头永远都从里向外或从外向里一致移动完才掉头,是目前操作系统中用的比较广泛的一种磁盘移臂调度算法。
在对下一条磁道进行选择时,需要判断:
- 欲访问磁道与当前磁道的距离
- 磁头当前的移动方向,即:保持处于磁道号增加或减少状态
对于上例,其磁盘调度顺序为:132, 190, 205, 376, 61, 40, 29, 23, 4
寻道距离:Ts = (132-100) + (190-132) + (205-190) + (376-205) + (376-61) + (61-40) +... + (23-4)
CSCAN
单项扫描调度算法,与SCAN不同的是,只做单向移动,即只能从里向外或从外向里。
N-Step-SCAN
N步扫描算法,为了克服扫描算法和最短寻道时间有限算法的磁臂粘着
现象而引入的。
磁臂粘着
现象就是指当系统不断的提出对当前磁道的访问,那么磁头会一直处于该磁道上进行磁道访问请求,导致其它磁道的访问被推迟的现象。
N步扫描算法的算法思想:将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列; 而每处理一个子队列时又采用SCAN算法。
如对于上例,若其子队列的长度为4,则可以分为3个队列:
它就会首先处理第一个队列中的四个磁道请求,再处理第二个队列和最后的第三个队列。其对于每一个队列的处理都是按照扫描算法来进行处理。
FSCAN
该算法实质上是N步SCAN算法的简化, 它只将磁盘请求队列分成两个子队列:
- 由当前所有请求磁盘形成的队列,由磁盘调度按SCAN算法进行处理
- 在扫描期间,将新出现的所有磁盘I/O请求, 放入另一个等待处理的请求队列
如上例,先把所有的磁盘请求放在第一个队列中,对其应用扫描算法进行磁盘调度。若访问过程中出现的新的磁盘请求就放在下面的新队列中,当第一个队列全部访问完,再处理第二个队列。
旋转调度算法
当同一磁道(柱面)上有多个扇区请求时,总是选取与当前读写头最近的那个I/O请求,使旋转圈数最少。
例:对磁盘访问的5个请求,若磁头在1号柱面,先按SCAN算法做移臂调度(柱面号排序),再进行旋转调度(块号排序),则调度顺序如下:
实战
磁盘调度算法
在磁盘调度管理中,应先进行移臂调度,再进行旋转调度。假设磁盘移动臂位于21号柱面上,进程的请求序列如下表所示。如果采用最短移臂调度算法,那么系统的响应序列应为()。
4个备选项为:
②⑧③⑤⑦①④⑥⑨
②③⑧④⑥⑨①⑤⑦
②⑧③④⑤①⑦⑥⑨
①②③④⑤⑥⑦⑧⑨
请求序列 | 柱面号 | 磁头号 | 扇区号 |
---|---|---|---|
① | 17 | 8 | 9 |
② | 23 | 6 | 3 |
③ | 23 | 9 | 6 |
④ | 32 | 10 | 5 |
⑤ | 17 | 8 | 4 |
⑥ | 32 | 3 | 10 |
⑦ | 17 | 7 | 9 |
⑧ | 23 | 10 | 4 |
⑨ | 38 | 10 | 8 |
解析:
应先进行移臂(对应柱面)调度,再进行旋转(对应磁头、扇区)调度。由表可知
①⑤⑦在17柱面(21-17=4)
②③⑧在23柱面(23-21=2)
④⑥在32柱面(32-21=9)
因此按最短移臂算法,应该是23柱面、17柱面、32柱面、38柱面。应该是②⑧③⑤⑦①④⑥⑨。
磁头移动耗时
某磁盘磁头从一个磁道移到另一个磁道需要10ms。文件在磁盘上非连续存放,逻辑上相邻数据块的平均移动距离为10个磁道,每块的旋转延迟时间及传输时间分别为100ms和2ms,则读取一个100块的文件需要()ms。
答案:20200
解析:读取一个连续数据需要的时间包括:移动时间、旋转延迟时间和传输时间三个部分,总时间花为(1010)+100+2=202ms。一次读取一个100块的文件需要的时间为202100=20200ms。
磁盘处理耗时
磁盘上存储数据的排列方式会影响IO服务的总时间。假设每磁道划分成10个物理块,每块存放一个逻辑记录,并且是顺序存放在同一个磁道上:
物理块 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
逻辑记录 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 |
假定磁盘的旋转速度为30ms/周,磁头当前处在R1开始处。使用单缓冲区顺序处理这些记录,每个记录处理时间为6ms,则最长时间为()ms,若对信息存储进行分布优化后,则处理10个记录的最少时间为()ms。
答案:306、90。
解析:
系统读记录的时间为30/10=3ms
。对第一种情况,系统读出并处理记录R1之后,将转到记录R4的开始处,为了读出记录R2,磁盘必须再转一圈,需要3ms(读记录) 加30ms (转一圈)的时间。这样,处理10个记录的总时间应为,处理前9个记录的总时间再加上读R10和处理时间:9X33ms+9ms=306ms
。
若对信息进行优化分布:
物理块 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
逻辑记录 | R1 | R8 | R5 | R2 | R9 | R6 | R3 | R10 | R7 | R4 |
当读出记录R1并处理结束后,磁头刚好转至R2记录的开始处,立即就可以读出并处理,因此处理10个记录的总时间为:10X(3ms(读记录)+6ms(处理记录))=10X9ms=90ms
缓冲耗时
某计算机系统I/O采用双缓冲工作方式,如下图。假设磁盘块和缓冲区大小相同,每个盘块读入缓冲区的时间T为10μs,缓冲区送用户区的时间M为6μs,系统对每个磁盘块数据的处理时间C为2μs。若用户需要将大小为10个磁盘块的文件逐块从磁盘读入缓冲区,并送到用户区进行处理,则采用双缓冲需花费的时间为()μs,单缓冲需花费的时间为()μs,比单缓冲节约()μs时间。
答案:108、162、54。
解析:双缓冲的工作特点是可以实现对缓冲区中数据的输入T和提取M,与CPU的计算C,三者并行工作。双缓冲的基本工作过程是在设备输入时,先将数据输入到缓冲区1,装满后便转向缓冲区2。所以双缓冲进一步加快I/O的速度,提高设备的利用率。
在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C,T)
。如果C<T,可使块设备连续输入;如果C>T,则可使系统不必等待设备输入。本题每一块数据的处理时间为10,采用双缓冲需要花费的时间为10×10+6+2=108。
采用单缓冲的工作过程如图(a)所示。当第一块数据送入用户工作区后,缓冲区是空闲的,可以传送第二块数据。这样第一块数据的处理C1与第二块数据的输入T2是可以并行的,依次类推,如图(b)所示。
系统对每一块数据的处理时间为:Max(C,T)+M
。每一块数据的处理时间为10+6=16,文件的处理时间为16×10+2=162μs,比使用单缓冲节约162-108=54μs时间。
参考
- 软考高级
相关文章:

操作系统基础之磁盘
概述 基本概念 磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存在扇区中。 磁头首先寻找到对应磁道,然后等到磁盘进行周期旋转到指定的扇区,才…...

【Unity Shader入门精要 第6章】基础光照(一)
1. 什么是光照模型 光照原理 在真实世界中,我们能够看到物体,是由于眼睛接收到了来自观察目标的光。这里面包括两种情况:一部分是观察目标本身发出的光(自发光)直接进入我们的眼睛,另一部分是其他物体&am…...

JavaEE概述 + Maven
文章目录 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 仓库 坐标2.2 Maven之项目构建2.3 Maven之依赖管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE: Java SE:指Java标准版,适用于各行各业,主要是Java…...
python把png转成jpg
在Python中,你可以使用PIL(Python Imaging Library,也称为Pillow)库来读取PNG图片并将其转换为JPG格式。下面是一个简单的示例代码: from PIL import Image# 打开PNG图片 png_image Image.open(input.png)# 保存为JP…...
信息系统架构基本概念及发展_2.信息系统架构的定义
1.几种架构的定义 信息系统架构仍在不断发展中,还没有形成一个公认的定义,这里举出几个定义。 定义1:软件或计算机系统的信息系统架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见…...

ctfshow SSRF 351-358
做题前,需要先学习关于ssrf漏洞的相关知识 小注意: 当使用 file_get_contents() 函数访问远程 URL 时,它会尝试获取该 URL 指向的资源的内容,并将内容以字符串的形式返回。 如果 b.php 文件是一个 PHP 文件,它包含的内容取决于该 PHP 文件…...
优化学习方法,事半功倍
学习,是人一生中必不可少的过程。在学习的道路上,我们会遇到各种各样的挑战和困难,但只要我们能够发现并优化适合自己的学习方法,就能事半功倍,取得更好的成绩。 首先,要充分了解自己的学习方式和习惯。每个…...
Spring STOMP-开启STOMP
通过Spring框架的spring-messaging和spring-websocket模块,提供了对WebSocket上STOMP的支持。一但你添加了这些依赖项,你就可以像下面这个示例一样,通过WebSocket公开一个STOMP端点: import org.springframework.web.socket.conf…...

Python 开发 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)
什么是 Django 框架 Django 是一个用 Python 编写的 Web 应用程序框架。它提供了许多工具和库,使得开发 Web 应用程序变得更加容易和高效。Django 遵循了“MTV”(模型-模板-视图)的设计模式,将应用程序的不同组件分离开来&#x…...

《Python编程从入门到实践》day25
# 昨日知识点回顾 如何创建多行外星人 碰撞结束游戏 创建game_stats.py跟踪统计信息 # 今日知识点学习 第14章 记分 14.1 添加Play按钮 14.1.1 创建Button类 import pygame.font# button.py class Button:def __init__(self, ai_game, msg):"""初始化按钮…...

Unity 性能优化之光照优化(七)
提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、测试目的一、实时光源是什么?二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…...

C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形
题目: 题解: int largestRectangleArea(int* heights, int heightsSize) {int st[heightsSize];int p[2];p[0]-1,p[1]heightsSize;int size0,result0;st[size]0;for(int i1;i<heightsSize;i){ while(size!0&&heights[i]<heights[st[size-1…...

AI办公自动化-用kimi批量重命名Word文档
文件夹里面有很多个word文档,标题里面都含有零代码编程,现在想将其替换为AI办公自动化。 在kimichat中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 打开文件夹&am…...
Golang 并发 Mutex 互斥锁的使用
Golang 并发 Mutex 互斥锁的使用 1. 初始化 func TestMutex(t *testing.T) {mu01 : sync.Mutex{}var mu02 sync.Mutex }两种方式都ok 2. Mutex使用 计数器统计,多个协程同时对同一个变量进行 代码示例 var mu sync.Mutex var counter intfunc TestMutexAdd(t…...

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业
20232906 2023-2024-2 《网络与系统攻防技术》第九次作业 1.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段,getShell&am…...
常见的十二种软件架构
常用的软件架构有多种,以下是一些主要的软件架构风格: 单体架构(Monolithic Architecture): 描述:所有功能都集中在一个应用或系统中,易于开发和部署,但随着系统增长,可能…...

数据库出现死锁的解决方法参考
死锁引起的原因一般是多个用户并发访问数据库导致的问题,或是因为某个进程挂死以后资源未释放导致的。通过onstat –p可查看deadlks项大于0即表示历史总计死锁次数。对于被锁的表进行操作的时候会出现-143 ISAM error: deadlock detected的错误。当其他会话访问此表…...
HCIP-Datacom-ARST自选题库_01_防火墙【6道题】
一、单选题 1.在防火墙域间安全策略中,请问以下哪一项的数据流不是Outbound方向的? 从Trust区域到DMZ区域的数据流 从Trust区域到Untrust区域的数据流 从Trust区域到Local区域的数据流 从DMZ区域到Untrust区域的数据流 2.如果防火墙域间没有配置安全策路&…...

力扣/leetcode383.比特位记数
题目描述 给你一个整数 n ,对于 0 < i < n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n 1 的数组 ans 作为答案。 示例 代码思路 第一种方法 最简单的方法就是,遍历然后使用python自带的bin()方法直接…...

react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)
什么是副作用操作? useEffect 用于编写由渲染本身引起的对接组件外部的操作(官方称呼为:副作用操作) 以下情况会触发页面渲染 初次加载页面(组的挂载)响应式变量发生变化,触发页面根据新值重新…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...

WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...

GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...