操作系统——磁盘操作_磁盘文件操作-程序员宅基地

技术标签: 操作系统  


前言

本文的主要内容是操作系统中磁盘操作的一些基础知识,包括磁盘的结构、磁盘的调度算法、减少磁盘延迟时间的方法以及磁盘的管理,重点理解和掌握磁盘的调度算法和减少磁盘延迟时间的方法这两部分内容。


一、磁盘的结构

磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。磁盘的简单示意图如下图所示。
在这里插入图片描述
由图中可以看到,主要的构成包括磁盘、磁头、磁头臂、永磁铁、马达、主轴、以及空气过滤片等。
磁盘的盘面会被划分成一个个的磁道,磁道又会被划分成扇区,且每个扇区所存放的数据量相同,由于外层扇区的面积大于内层扇区,因此扇区越靠内,也就是扇区面积越小,数据密度越大。磁盘盘面的划分示意图如下图所示。
在这里插入图片描述
在磁盘中读或者写数据:要在磁盘中读或者写数据,首先需要磁头臂带动磁头,将其移动到用户想要读或者写的扇区所在的磁道,然后磁盘会转动起来,让目标扇区从磁头下面划过,这样就可以完成对扇区的读或者写操作了。
一个磁盘由多个盘片构成,如下图所示。
在这里插入图片描述
一个盘片可能会有两个盘面,也就是正面和反面。每个盘面都有一个磁头,所有的磁头都连在同一个磁臂上, 因此所有磁头的移动方向都是一样的。所有盘面中相对位置相同的磁道就组成了柱面,比如所有盘面最内侧的磁道就构成了一个柱面。
可以用 (柱面号,盘面号,扇区号) 来确定任意一个磁盘块,从磁盘块中读或者向其中写的步骤为:
①根据柱面号移动磁臂,让磁头指向指定的柱面;
②激活指定盘面对应的磁头;
③磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读或者写。
磁头有可移动的和不可移动的两种,可移动的每个盘片只有一个磁头,不可移动的每个盘片有多个磁头,如下图所示。
请添加图片描述
磁盘的盘片可以更换的称为可换盘磁盘,不可更换的称为固定盘磁盘。
对磁盘的结构这部分内容简单的总结一下,如下图所示。
在这里插入图片描述


二、磁盘调度算法

1、一次磁盘读写操作需要的时间

寻找时间,也称寻道时间,它是指在读写数据前,将磁头移到指定的磁道所花的时间,包括启动磁头臂的时间和移动磁头的时间。
延迟时间,它是指通过旋转磁盘,使磁头定位到目标扇区所需要的时间,一般来说,找到目标扇区平均需要转半圈。
传输时间,从磁盘读出或者向磁盘写入数据所经历的时间。
在这里插入图片描述
总的时间 = 寻找时间+延迟时间+传输时间
延迟时间和传输时间都与磁盘的转速有关,而转速是硬件的固有属性,因此操作系统无法优化延迟时间和传输时间,但是操作系统的磁盘调度算法会直接影响寻道时间。

2、磁盘调度算法

①先来先服务算法(FCFS)

先来先服务算法根据进程请求访问磁盘的先后顺序进行调度。
一个先来先服务算法的例子如下图所示。
在这里插入图片描述
先来先服务算法的优点:公平;如果请求访问的磁道比较集中,算法的性能还可以。
先来先服务算法的缺点:如果有大量的进程竞争使用磁盘,请求访问的磁道很分散,则该算法的性能很差,寻道时间长。

②最短寻找时间优先(SSTF)

最短寻找时间优先算法会优先处理与当前磁头距离最近的磁道,可以保证每次的寻道时间最短,但不能保证总的寻道时间最短。其本质就是贪心算法的思想,只选择眼前最优,但是总体未必最优。
一个最短寻找时间优先算法的例子如下图所示。
在这里插入图片描述
最短寻找时间优先算法的优点:性能较好,平均寻道时间短。
最短寻找时间优先算法的缺点:磁头在一个小区域内来回移动,可能产生饥饿现象。

③扫描算法(SCAN)

扫描算法的提出是为了防止饥饿的产生,因此规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。由于磁头移动的方式很像电梯,因此也叫电梯算法。
一个扫描算法的例子如下图所示。
在这里插入图片描述
在磁头移动且磁道没有都访问完时,磁头只有移到最边上的磁道才能改变磁头的移动方向继续访问剩余的磁道。
扫描算法的优点:性能较好;平均寻道时间短;不会产生饥饿现象。
扫描算法的缺点:只有到达最边上才能改变磁头的移动方向,但是有时候往往不需要移动到最边上;算法对于各个位置磁道的响应频率不平均,越靠近两边的两次访问之间的时间差最短,中间的时间差最大。

④LOOK 调度算法

扫描算法只有到达最边上才能改变磁头的移动方向,而 LOOK 调度算法就是为了解决这个问题,即如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头的移动方向,该算法边移动边观察,因此叫 LOOK 调度算法。
一个 LOOK 调度算法的例子如下图所示。
在这里插入图片描述
LOOK 调度算法的优点:相比于扫描算法,不用移动到最边上才改变磁头方向,寻道时间进一步缩短。

⑤循环扫描算法(C-SCAN)

循环扫描算法是为了解决扫描算法对各个位置磁道响应频率不平均的问题,因此规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。
一个循环扫描算法的例子如下图所示。
在这里插入图片描述
循环扫描算法的优点:相比于扫描算法,对于各个位置磁道响应频率很平均。
循环扫描算法的缺点:移动和返回时都到了最边缘的位置,有时候并不需要,因此增加了寻道时间。

⑥C-LOOK 调度算法

C-LOOK 调度算法是为了解决循环扫描算法磁头的移动和返回时都到了最边缘的位置的问题。C-LOOK 调度算法是,如果磁头移动方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。
一个 C-LOOK 调度算法的例子如下图所示。
在这里插入图片描述
C-LOOK 调度算法的优点:相比于循环扫描算法,寻道时间进一步缩短。
对磁盘调度算法这部分内容简单的总结一下,如下图所示。
在这里插入图片描述


三、减少磁盘延迟时间的方法

假设要连续读取橙色区域的2、3、4号扇区,如下图所示。
在这里插入图片描述
因为磁头读取一个扇区的内容后,需要一小段的时间处理,但是盘片又在不停地旋转着。如果2、3号扇区相邻的排列着,则读完2号扇区后无法连续不断地读入3号扇区,必须等盘片继续旋转,3号扇区再一次划过磁头的时候,才能读取3号扇区的内容,这样就会有较长的延迟时间。
一个减少延迟时间的方法就是采用交替编号,如下图所示。
在这里插入图片描述
采用交替编号的策略可以让逻辑上相邻的扇区在物理上有一定的间隔,这样在读完上一个扇区后,接下来的一个扇区可以用来处理数据,因此使得读取连续的逻辑扇区所需要的延迟时间更短。
前面提到过磁盘的物理地址是 (柱面号,盘面号,扇区号),而不是 (盘面号,柱面号,扇区号),因为这样在读取地址连续的磁盘块时,可以减少磁头移动所消耗的时间。
如果盘面与盘面之间相对位置相同处扇区编号也相同,如下图所示。
请添加图片描述
这样的话,在0号盘面转动两圈后,其内侧扇区全部读完,紧接着是无法连续读取1号盘面的内侧扇区的,需要等到该扇区第二次划过磁头时才可以,这样仍然增加了延迟时间。
可以采取错位命名的方法解决这个问题,如下图所示。
请添加图片描述
可以让1号盘面的扇区和0号盘面的扇区错开一个扇区的位置,这样在读完0号盘面的扇区后就可以接着读1号盘面的扇区了。
对减少磁盘延迟时间的方法这部分内容简单的总结一下,如下图所示。
在这里插入图片描述


四、磁盘的管理

1、磁盘初始化

磁盘初始化步骤:
①进行低级格式化,也就是物理格式化,将磁盘的各个磁道划分为扇区。一个扇区通常可以分为头、数据区域、尾三个部分,管理扇区所需要的数据结构一般存放在头和尾两个部分;
②将磁盘分区,每个分区由若干个柱面组成;
③进行逻辑格式化,创建文件系统,包括创建文件系统的根目录、初始化存储空间管理所用的数据结构。

2、引导块

计算机开机时需要进行一系列的初始化工作,这些工作是通过执行初始化程序(自举程序)完成的。初始化程序放在了 ROM 中,而 ROM 中的数据在出厂时就已经写入了,此后也不能再修改。
如果是这种方式的话,要更新自举程序会很不方便,因此只在 ROM 中放入很小的自举装入程序,而完整的自举程序放在磁盘的启动块(引导块或启动分区)上,启动块位于磁盘的固定位置。
在开机时,计算机先运行自举装入程序,通过执行该程序就可以找到引导块,并将完整的自举程序读入内存,完成初始化。
拥有启动分区的磁盘称为启动磁盘或者系统磁盘,比如Windows系统中的 C 盘。

3、坏块的管理

对于一些坏了的、无法正常使用的扇区,也就是坏块,操作系统是无法修复的,应该将坏块标记出来,以免错误地使用到它。
简单的磁盘可以在逻辑格式化时对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,比如可以在文件分配表上标明,这种方式下,坏块对操作系统不透明。
对于复杂的磁盘,磁盘控制器会维护一个坏块链表,在磁盘出厂前进行低级格式化时就将坏块链进行初始化。此外还会保留一些备用扇区,用于替换坏块,称为扇区备用,这种方式下,坏块对操作系统透明。
对磁盘的管理这部分内容简单的总结一下,如下图所示。
在这里插入图片描述


总结

以上就是操作系统——磁盘操作的所有内容了,本文中介绍到的磁盘的结构和磁盘的管理是比较基础的内容,需要熟知,几种磁盘的调度算法也需要掌握,减少磁盘延迟时间的方法这部分内容比较难懂,可以结合磁盘的结构一起学习。
参考视频:
磁盘的结构
磁盘调度算法
减少磁盘延迟时间的方法
磁盘的管理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42570192/article/details/126328808

智能推荐

物联网IOT选型wifi路由模块串口透传不得不知的秘密_wifi透传与iot-程序员宅基地

文章浏览阅读1.2k次。2020年一场突如其来的疫情灾难袭来,各大经济市场在不同程度被按下了“暂停键”。物联网控制作为新兴行业优势凸显出来,其无接触式的交互方式,远程控制,智能控制车间,给疫情期间的人民带来安全、智能的生活体验。这些物联网控制大多用到了网关信息桥梁来传输—wifi 路由模块。但你知道吗?工程师们想要选择高性价比的wifi路由模块做串口透传,不得不知道wifi路由模块的两大区分:mcu+wifi模块和C..._wifi透传与iot

Ubuntu 17.10 + Cuda9.0 + CUDNN + Tensorflow最正确姿势排坑_cuda9.0 tensorflow1.7 ubuntu-程序员宅基地

文章浏览阅读4.3k次。 博主之前一直使用16.04与win10双系统,但是由于当初安装系统时候引导安装的有点问题,导致ubuntu使用起来一直有些毛病,搞了好久也没搞好,索性就想到干脆重新把系统装一下。作为一个爱尝鲜的用户,使用了这么长时间平平淡淡的长期稳定支持版,还是想要换换口味试试最新的17.10版本,不过鉴于长期支持版的18版本再过不久就会放出来了,估计17.10的寿命和用户数量也不会太多了,也正是这个原..._cuda9.0 tensorflow1.7 ubuntu

笔记_数学建模_数学模型-机器学习&机器学习常用算法_机器学习数学建模-程序员宅基地

文章浏览阅读481次。《数学模型-姜启源》——《机器学习》1、数学规划 (包括全部的规划问题)线性、非线性、动态规划、多目标规划、整数规划2、传染病模型(微分方程)3、稳定性模型包括捕鱼、人口、军事竞赛等等4、概率模型5、博弈模型6、计算机虚拟(数值模拟、动态仿真、蒙特卡罗算法)7、调度问题 (智能算法、遗传算法、多目标规划、数学规划、dijstra算法、Floyd算法)8、智能算法(遗传算法、模拟退火算法、蚁群算法、神经网络)9、微分方程所研究对象与已知因素之间可以用微分方程的形式表示(常微分方程(_机器学习数学建模

fine tune chatgpt_finetune embed chatgpt-程序员宅基地

文章浏览阅读2.1k次。fine tune openAI model ( 微调chatgpt)_finetune embed chatgpt

在stable diffusion中遇到以下问题应该如何解决“当前加载的模型是一个LORA,而不是一个稳定扩散检查点。RuntimeError:”_runtimeerror: the model currently loading is a lor-程序员宅基地

文章浏览阅读414次,点赞7次,收藏2次。如果上述步骤都不能解决您的问题,您可能需要更详细地描述您的代码和错误信息,以便于他人提供更具体的帮助。在描述问题时,请确保提供足够的细节,包括错误消息的完整内容、您使用的代码片段、以及您已经尝试过的解决方法。这可能意味着您尝试使用的模型或权重与您的代码或任务不兼容。如果您是从预训练模型开始,请确保您下载的是稳定扩散模型的权重,而不是其他类型的模型权重。检查您的代码中加载模型的部分,确保您使用了正确的类和方法来加载稳定扩散模型。确认您加载的模型文件确实是稳定扩散模型,而不是LORA模型。_runtimeerror: the model currently loading is a lora instead of a stable diff

error: macro "toLine" requires 2 arguments, but only 1 given      QLine toLine() const;_macro "_min" requires 2 arguments, but only 1 give-程序员宅基地

文章浏览阅读2.6k次。/include/qt/QtCore/qvariant.h:307:18: error: macro "toLine" requires 2 arguments, but only 1 given QLine toLine() const; ^include/qt/QtCore/qvariant.h:307:11: error: expected ‘..._macro "_min" requires 2 arguments, but only 1 given

随便推点

svc: failed to register lockdv1 RPC service (errno 111).-程序员宅基地

文章浏览阅读1.6k次。挂载时,用mount -t nfs 192.168.1.105:/ /mnt/nfs时出现svc: failed to register lockdv1 RPC service (errno 111)改为mount -t nfs -o nolock 192.168.1.105:/ /mnt/nfs就行了。全部配置步骤:1、进入配置文件,输_failed to register lockdv1 rpc service (errno 111)

python判断数字位数_Python中的位数,之,判断,数字-程序员宅基地

文章浏览阅读3.9k次。这里是一段防爬虫文本,请读者忽略。本文原创首发于CSDN,作者IDYS博客首页:https://blog.csdn.net/weixin_41633902/本文链接:https://blog.csdn.net/weixin_41633902/article/details/107440627未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!写在开头的话请记住:实践是掌握知识的最快方法如果..._python判断一个数是几位数

ImportError: cannot import name Template解决方案_importerror: cannot import name 'prompttemplate' f-程序员宅基地

文章浏览阅读6.2w次,点赞12次,收藏11次。本文主要介绍了ImportError: cannot import name Template解决方案,希望能对学习python的同学们有所帮助。文章目录1. 问题描述2. 原因分析3. 解决方案_importerror: cannot import name 'prompttemplate' from 'langchain.prompts.cha

Laravel随笔 Windows下Redis安装/php安装redis扩展_windows laravel 8使用 phpredis 扩展来连接 redis-程序员宅基地

文章浏览阅读164次。下载redis windows版 https://github.com/microsoftarchive/redis/releases (msi版本可以一键安装)PHP安装redis扩展 https://www.cnblogs.com/enjie/p/7978879.htmlPHP安装igbinary扩展 https://pecl.php.net/package/igbinary/3.1...._windows laravel 8使用 phpredis 扩展来连接 redis

同声传译免费软件app哪个好?让国际交流变得轻松又有趣-程序员宅基地

文章浏览阅读832次,点赞14次,收藏18次。软件能够实现几乎无延迟的语音翻译,让我们能够即时理解对方的意图并作出快速的回应。这一过程中,翻译结果的呈现流畅且准确,为我们提供了近乎无缝的跨语言交流体验。DeepL Translator的翻译结果准确度高,能够准确地把握原文的含义,避免了歧义和误解的产生。它拥有直观简洁的界面,操作简单方便。它采用了先进的语音识别和机器翻译技术,结合大量的语料库进行训练,确保翻译结果的准确性和流畅性。

一文详解opencv摄像头数字识别_摄像头数字识别在其他场景下识别不了-程序员宅基地

文章浏览阅读1.4w次,点赞32次,收藏286次。本文的目标是实现识别摄像头图像中的数字。实际应用场景包括 车牌号识别 ,部分竞赛的 A4纸打印数字识别 。摄像头数字识别分为两个步骤:1. 提取图像中的ROI区域,如截取车牌的矩形区域,或截取A4纸的图像。2. 对ROI区域进行数字识别。数字识别相对来说较为简单,先介绍数字识别的方法和原理。_摄像头数字识别在其他场景下识别不了

推荐文章

热门文章

相关标签