3-嵌入式开发总结之--磁盘模型

本文介绍了磁盘模型与内存模型的对比,强调了磁盘的非易失性、慢速但大容量的特点。磁盘通过柱面、磁道、扇区进行数据组织,而内存则提供连续的地址空间。磁盘访问需要经过地址翻译,通过文件系统进行管理和索引。此外,文章提到了现代计算机中FLASH存储的工作原理,以及磁盘和FLASH设备的简化模型。
摘要由CSDN通过智能技术生成

   磁盘模型(外存模型)是相对于内存模型而言。不同于内存,外存的种类比较多,有磁盘、FLASH、光盘等,而且工作方式差异也比较大,每一个细致介绍不合适,况且外设有许多相似特性,所以这里就典型的以磁盘为例来介绍。

   那么首先,磁盘是什么东西?

   磁盘也是存储信息的地方,不过,不同于内存,磁盘断电后数据不丢失。但是读写磁盘速度,要远远低于内存,所以CPU直接跟内存打交道,必要时才从磁盘读写数据。即使读写磁盘,数据也是先转存到内存,然后由内存转存到CPU(读)或磁盘(写)。这里的内存即为我们常说的磁盘缓冲区。如下图所示。由于磁盘数据的断电非易失特性,操作系统及我们的程序平时都是保存在磁盘中,在计算机上电后,才由CPU加载到内存,并加以执行。

   从硬件原理上来讲,磁盘靠磁性来保存数据,类似磁带。写入时,将电信号转变为磁信号,读取时,再将磁信号恢复为电信号。计算机配备的硬盘,内部由磁片、磁头、电机及控制电路构成。下图为磁盘的内部结构图(图片来自网络):

   当CPU想要访问磁盘时,给出柱面、磁道、扇区等信息,由磁盘驱动器驱动内部电机,转动盘片,引导磁头定位到指定的磁道和扇区,完成数据的电磁转换。

   从上面磁盘的工作过程,我们可以了解到,要访问磁盘,需要几个关键参数:柱面、磁道、扇区。所有这些都是硬件工作细节,了解这些,有助于我们理解磁盘的工作过程。但是实际中,大部分人都不会直接在硬件级别操作到磁盘,而是使用操作系统提供好的接囗,除非你是驱动、操作系统或者是磁盘硬件修复之类软件的编写者。此时,这些硬件细节是开展工作的基础。

   在这部分开始时,拿磁盘跟内存做了简单的对比,这就是低速但是非易失。不过,仅仅非易失,还不至于让磁盘成为我们保存程序、操作系统、文档、电影、音乐及各种资料的载体。它还必须有另外两个特性,那就是大容量和低成本,这二者是相辅相成的。相应的,内存在这两方面则相反。现在,我们就可以想像一下,关机以后,所有的数据都保存在磁盘中的磁片中的磁道里的扇区中,一片一片,层层叠叠,是不是很神奇?它们静静的躺在那里。然后计算机上电了,操作系统首先被从磁盘中加载到了内存中,这是找了许多磁片,更多磁道,非常多的扇区才得以完成的。听着是不是更神奇?而事实就是这样。

   还是跟内存对比。我们在内存部分提到,内存的访问单位是字节,磁盘是不是也是呢?从它们那么多相反的特性,你也许想到不是这样的。没错,确实不一样。从硬件细节部分看,我们最后到达了扇区级别,也就是说,硬件可访问的最小单位是扇区。很形象的一个词,像扇子的一块。如上图所示。既然是区,肯定不能是只存有一个字节。实际中,许多硬盘扇区的大小是512字节。也就是说CPU每次读写硬盘的数据至少是512字节,而不管你实际想要几个字节。

   继续跟内存对比。我们介绍了内存是平坦型的,而磁盘正好就不是,这兄弟二人真是对着干啊!访问内存,在地址总线上给出地址,控制总线上给出读或者写命令,然后就可以从数据总线上获取你想要的数据了(或者写数据到数据总线上)。可是磁盘就不行。基于它特殊的硬件结构,通过地址不能直接获得数据。也就是说,要获得数据,不那么直顺了,你得绕几个弯。这就像在平原上盖房子,直接盖就是了,而在山区盖房子,就没那么轻松了,你总得折腾那么一两下。那么,CPU是如何获取到磁盘数据的呢?还记得在其硬件构成部分,我们提到的控制器吗?它就是用来作地址翻译的。控制电路会将地址转换为磁片、磁道、扇区,然后驱动电机,将磁头定位到扇区,之后才是完成数据的读写。

   到这里,对硬盘的工作过程,大家应该是有一个形象的认识了。下面我们来看磁盘的模型化。

   在上一部分,我们将内存模型化为一个地址连续的字节空间,那么对磁盘,我们该如何模型化呢?下面我们就看为了更好的分析程序,如何忽略磁盘的一些硬件细节,从而模型化磁盘。

   这里面涉及两个主要的问题,一是磁盘结构是非平坦型的;其二,对磁盘而言,每次读写数据是一个扇区,不是一个字节。这两个问题都是由磁盘的结构决定的。虽然存在这样两个拦路虎,但是它们是实实在在的纸老虎。从程序分析的角度看,我们完全可以将其忽略,仍然将磁盘模型化为一块连续的地址空间,来方便我们后续的分析讨论。这样做,可以忽略“可以忽略的”细节,体现出该体现的核心。模型图如下所示:

   实际上这里我们将磁盘抽象成了字节块组成的地址空间。保留块这一信息,有助于后面的讨论。

   接着,我们来看磁盘的使用。

   跟内存部分一样,有了模型图后,我们同样需要进一步考虑几个问题,其中就包括磁盘里都有什么内容,都是怎么存的。

   其实跟内存是类似的,磁盘虽然容量大,但不是无限大,也不能把数据随意存放。再说了,随着技术和应用的发展,可存储的东西也多了、大了,像照片了,电影了,都是大数据块,可见,需求也是在迅速膨胀的。也许有人会问了,你不是说磁盘成本低嘛?成本是低了,但也不是没有成本。再说了,成本低是相对于内存来讲的。总归一句话,磁盘的使用也是需要管理,需要规划的,不是毫无规则的胡乱使用。相对于内存的分片分段,磁盘主要是分区,分块,再辅以基于索引的文件系统来管理的。怎么讲呢?就是先分为大的区,或者块,对每一块构建符合规则的目录索引,用来指引该数据块。具体细节,不同操作系统的实现差别还是比较大的,但是分区分块和索引的基本思想倒是基本一致的,这也是文件系统的基本思想。计算机通过文件系统来有效的管理磁盘,这一结论说着简单,其实内部细节可非常不简单。因为解决了这些细节问题,那么一个可用的文件系统就该呈现在用户眼前了。有关分区和文件系统的内容,在后面操作系统基础部分会有更加详细地介绍。

   补充一点,建立索引表的过程就是格式化磁盘的过程,这需要在磁盘上划分专门的小块区域来保存索引表。索引表属于管理数据,对磁盘容量来讲,是内耗空间。内存管理使用的分页分段也需要专门的管理数据--页目录表和页表,同样是内耗,这是有效管理需要付出的代价。

   上图是一个例子,来自赵炯的Linux内核完全注释一书。其中前面几个区块就是管理区块。超级块存储了文件系统的结构信息,i节点位图指示了i节点是否使用,逻辑块位图指示了盘块是否使用。

   有了区块索引后,数据的存放就顺的多了。拿Linux系统来讲,首先,开始的一段区域,一般是启动引导程序,这其实是操作系统的一部分。接着是操作系统核心镜像,再之后就是用户分区,用户的文件和各种资料,安装的各种软件都存放在用户分区中。至此,磁盘里有什么,怎么存的问题基本就解决了。

   现如今,人们常用的消费计算机产品除了电脑外就是智能手机了。智能手机在各方面都同计算机很相像,都可以安装各种软件。不过手机里并没有我们这里介绍的硬盘,它的程序和数据保存在像固态盘用的那种小芯片上。(不然手机怎么能做的那么小,那么薄)。这种同样具有磁盘许多特性的东西(像非易失性、块访问),被直接叫做FLASH。FLASH不具有柱面、磁道、磁头、扇区这些概念,不过它有一点跟磁盘比较像,就是其数据的读写单位也是以块来计的,块大小根据设备的不同而不同,并且差別很大。另外在读写控制方式上,还有SPI、NAND及EMMC等不同接口种类的设备,差异也是很大。虽然FLASH的块大小不统一,但是使用上同磁盘很相近,都需要文件系统来管理,也可以跟磁盘使用同一个模型,具体细节这里就不再多说了。

   总之,无论是磁盘还是FLASH设备,无论如何寻址,都可以将其简化为对最终数据块的操作,如下图所示。这可以看作是一个最简单的磁盘模型了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙赤子

你的小小鼓励助我翻山越岭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值