OS—磁盘和固态硬盘

简介: OS—磁盘和固态硬盘

一. 磁盘

二. 磁盘的管理

磁盘初始化

一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须将它分成扇区,以便磁盘控制器能够进行读/写操作,这个过程称为低级格式化(或称物理格式化)。

每个扇 区通常由头部、数据区域和尾部组成。头部和尾部包含了一些磁盘控制器的使用信息,其中利用 磁道号、磁头号和扇区号来标志一个扇区,利用CRC字段对扇区进行校验。


大多数磁盘在工厂时作为制造过程的一部分就已低级格式化,这种格式化能够让制造商测试 磁盘,并且初始化逻辑块号到无损磁盘扇区的映射。对于许多磁盘,当磁盘控制器低级格式化时, 还能指定在头部和尾部之间留下多长的数据区,通常选择256或512字节等。

分区

逻辑格式化的内容

在可以使用磁盘存储文件之前,还要完成两个步骤。

  • 第一步是,**将磁盘分区(**我们熟悉的C 盘、D盘等形式的分区),每个分区由一个或多个柱面组成,每个分区的起始扇区和大小都记录 在磁盘主引导记录的分区表中。
  • 第二步是,对物理分区进行逻辑格式化(也称高级格式化),将初始文件系统数据结构存储到磁盘上,这些数据结构包括空闲空间和已分配空间,以及一个初始 为空的目录,建立根目录、对保存空闲磁盘块信息的数据结构进行初始化。

因扇区的单位太小,为了提高效率,操作系统将多个相邻的扇区组合在一起,形成一簇(在 Linux中称为块)。为了更高效地管理磁盘,一簇只能存放一个文件的内容,文件所占用的空间只 能是簇的整数倍;如果文件大小小于一簇(甚至是0字节),也要占用一簇的空间。

引导块

计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器 和内存等,接着启动操作系统。为此,自举程序找到磁盘上的操作系统内核,将它加载到内存, 并转到起始地址,从而开始操作系统的运行。

自举程序通常存放在ROM中,为了避免改变自举代码而需要改变ROM硬件的问题,通常 只在ROM中保留很小的自举装入程序,而将完整功能的引导程序保存在磁盘的启动块上,启动 块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘。

引导ROM中的代码指示磁盘控制器将引导块读入内存,然后开始执行,它可以从非固定的 磁盘位置加载整个操作系统,并且开始运行操作系统。下面以Windows为例来分析引导过程。 Windows允许将磁盘分为多个分区,有一个分区为引导分区,它包含操作系统和设备驱动程序。 Windows系统将引导代码存储在磁盘的第0号扇区,它称为主引导记录(MBR)。引导首先运行 ROM中的代码,这个代码指示系统从MBR中读取引导代码。除了包含引导代码,MBR还包含 一个磁盘分区表和一个标志(以指示从哪个分区引导系统),如图5.17所示。当系统找到引导分区时,读取分区的第一个扇区,称为引导扇区,并继续余下的引导过程,包括加载各种系统服务。

坏块

由于磁盘有移动部件且容错能力弱,因此容易导致一个或多个扇区损坏。部分磁盘甚至在出厂时就有坏块。根据所用的磁盘和控制器,对这些块有多种处理方式。

对于简单磁盘,如采用IDE控制器的磁盘,坏块可手动处理,如MS-DOS的Format命令执 行逻辑格式化时会扫描磁盘以检查坏块。坏块在FAT表上会标明,因此程序不会使用它们。

对于复杂的磁盘,控制器维护磁盘内的坏块列表。这个列表在出厂低级格式化时就已初始化, 并在磁盘的使用过程中不断更新。低级格式化将一些块保留作为备用,操作系统看不到这些块。 控制器可以采用备用块来逻辑地替代坏块,这种方案称为扇区备用。

对坏块的处理实质上就是用某种机制使系统不去使用坏块。

三. 磁盘调度算法

磁盘存取时间

磁盘调度算法

先来先服务(FCFS)算法

最短寻道时间优先(Shorted Seek Time First,SSTF)算法

扫描(SCAN)算法

LOOK 调度算法

循环扫描(Circular SCAN,C-SCAN)算法

C-LOOK 算法

减少延迟时间的方法

除减少寻道时间外,减少延迟时间也是提高磁盘传输效率的重要因素。

磁盘是连续自转设备,磁头读入一个扇区后,需要经过短暂的处理时间,才能开始读入下一 个扇区。若逻辑上相邻的块在物理上也相邻,则读入几个连续的逻辑块可能需要很长的延迟时间。 为此,可对一个盘面的扇区进行交替编号,即让逻辑上相邻的块物理上保持一定的间隔,于是读入多个连续块时能够减少延迟时间。


此外,由于磁盘的所有盘面是同步转动的,逻辑块在相同柱面上也是按盘面号连续存放的, 即按0号盘0号扇区、0号盘1号扇区……0号盘7号扇区、1号盘0号扇区……1号盘7号扇区、 2号盘0号扇区……的顺序存放。要读入不同盘面上的连续块,在读完0号盘7号扇区后,还需 要一段处理时间,所以当磁头首次划过1号盘0号扇区(下一次要读的块)时,并不能读取,只 能等磁头再次划过该扇区时才能读取。为此,可对不同的盘面进行错位命名[假设有2个盘面, 且已采用交替编号],则读入相邻两个盘面的连续块时也能减少延迟时间。


在磁盘的存取时间中,寻道时间和延迟时间属于“找”的时间,凡是“找”的时间都可以通 过一定的方法优化,但传输时间是磁盘本身性质所决定的,不能通过一定的措施减少

提高磁盘 I/O 速度的方法

文件的访问速度是衡量文件系统性能最重要的因素,可从以下三个方面来优化:

①改进文件 的目录结构及检索目录的方法,以减少对目录的查找时间;

②选取好的文件存储结构,以提高对 文件的访问速度;

③提高磁盘I/O速度,以实现文件中的数据在磁盘和内存之间快速传送。

其中, ①和②已在第4章文件管理中介绍,这里主要介绍如何提高磁盘I/O的速度。

  • 改善磁盘I/O性能的方法

1)采用磁盘高速缓存。

2)调整磁盘请求顺序。即上面介绍的各种磁盘调度算法。

3)提前读。在读磁盘当前块时,将下一磁盘块也读入内存缓冲区。

4)延迟写。仅在缓冲区首部设置延迟写标志,然后释放此缓冲区并将其链入空闲缓冲区链 表的尾部,当其他进程申请到此缓冲区时,才真正将缓冲区信息写入磁盘块。

5)优化物理块的分布。除了上面介绍的扇区编号优化,当文件采用链接方式和索引方式组 织时,应尽量将同一个文件的盘块安排在一个磁道上或相邻的磁道上,以减少寻道时间。 另外,将若干盘块组成簇,按簇对文件进行分配,也可减少磁头的平均移动距离。

6)虚拟盘。是指用内存空间去仿真磁盘,又叫RAM盘。常用于存放临时文件。

7)采用磁盘阵列RAID。由于可采用并行交叉存取,因此能大幅提高磁盘I/O速度。(RAID 属于计算机组成原理存储介质部分内容)

四. 固态硬盘(SSD)

固态硬盘特性

固态硬盘(Solid State Disk,SSD)是一种基于闪存技术的存储器

它与U盘并无本质差别, 只是容量更大,存取性能更好。一个SSD由一个或多个闪存芯片和闪存翻译层组成

  • 比起传统磁盘,SSD有很多优点
  • 它由半导体存储器构成,没有移动的部件,因此随机访问速度比机械磁盘要很多
  • 也没有任何机械噪声和震动,能耗更低、抗震性好、安全性高等。
  • 随着技术的不断发展,价格也不断下降,SSD有望逐步取代传统机械硬盘。

磨损均衡(Wear Leveling)

固态硬盘也有缺点,闪存的擦写寿命是有限的,一般是几百次到几千次。

如果直接用普通闪 存组装SSD,那么实际的寿命表现可能非常令人失望——读/写数据时会集中在SSD的一部分闪 存,这部分闪存的寿命会损耗得特别快。一旦这部分闪存损坏,整块SSD也就损坏了。

这种磨损不均衡的情况,可能会导致一块256GB的SSD只因数兆空间的闪存损坏而整块损坏。


为了弥补SSD的寿命缺陷,引入了磨损均衡。SSD磨损均衡技术大致分为两种:

1)动态磨损均衡。写入数据时,自动选择较新的闪存块。老的闪存块先歇一歇。

2)静态磨损均衡。这种技术更为先进,就算没有数据写入,SSD也会监测并自动进行数据 分配,让老的闪存块承担无须写数据的存储任务,同时让较新的闪存块腾出空间,平常的读/写操作在较新的闪存块中进行。如此一来,各闪存块的寿命损耗就都差不多。


相关文章
|
设计模式 负载均衡 Nacos
远程调用 OpenFeign 底层原理解析
Feign 是Springcloud 提供一个声明式的伪Http客户端 它使得调用远程服务就像调用本地服务一样简单 只需要创建一个接口 并且添加注解就可以 Nacos 很好的兼容Feign Feign 默认集成了Ribbon 所以在Nacos 下使用Fegin 默认就实现了负载均衡的效果
2405 1
远程调用 OpenFeign 底层原理解析
|
Rust C++ NoSQL
在 VS Code 上配置Rust的调试环境
插件 在 VS Code 上进行 Rust 的开发,需要使用一下两个库 RLS(vscode搜索插件rls) lldb(vscode搜索插件codelldb) 安装很简单,不用说 配置 { // 使用 IntelliSense 了解相关属性。
7118 0
|
5月前
|
弹性计算 测试技术 数据库
阿里云服务器收费模式怎么选?包年包月VS按量付费,区别及选择参考
对于部分初次选购阿里云服务器的用户来说,云服务器的收费模式是大家比较关注的问题。虽然阿里云提供了多种收费模式,不过包年包月和按量付费依然是用户的首选,对于用户而言,挑选适宜的收费模式意义重大,它直接关乎成本控制以及资源使用的灵活程度。本文将深入剖析阿里云服务器的这两种主要收费模式,助力大家做出合理选择。
681 5
|
10月前
|
Java C++
c++ 红黑树(自平衡二叉搜索树)(k,v型)
因为红黑树是一种特殊的AVL树(但少了平衡因子的存在),所以其结点的定义是在AVL树上加上新的成员变量,用于表示结点的颜色。RED,BLACK,//三叉链, _kv(kv){}首先我们在默认构造上,默认构造结点的颜色默认情况下为红色所以为什么构造结点时,默认将结点的颜色设置为红色?这是因为:当我们向红黑树插入结点时,若我们插入的是黑色结点,那么插入路径上黑色结点的数目就比其他路径上黑色结点的数目多了一个,即破坏了红黑树的性质4,此时我们就需要对红黑树进行调整。
258 0
|
分布式计算 DataWorks 大数据
MaxCompute操作报错合集之报错ODPS-0010000:System internal error - kWorkerOutOfMemory表明什么意思
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
542 7
|
存储 移动开发 算法
磁盘调度算法
磁盘调度算法
637 2
|
存储 算法 安全
|
算法 固态存储 调度
操作系统:磁盘组织与管理
操作系统:磁盘组织与管理
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)(上)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
531 0
|
存储 安全 Unix
第七章 文件管理【操作系统】2
第七章 文件管理【操作系统】2
523 1
下一篇
开通oss服务