初识Linux · 预备文件系统
我们在上文探讨的问题都是基于文件是被打开的情况,那么对于文件没有被打开的情况,我们是没有探讨过的,而本文作为文件系统的预备知识,着重介绍的硬件,对,没错,是硬件部分,介绍的是磁盘方面的知识。有人会好奇,我们学习文件系统和硬件内容有什么关系呢?一个是OS层面的,一个是外设层面的。->在冯诺依曼结构体中,cpu可是不能直接和外设打交道的,要借助OS,所以我们有必要学习磁盘,借助于磁盘的学习,我们对文件
目录
前言:
我们在上文探讨的问题都是基于文件是被打开的情况,那么对于文件没有被打开的情况,我们是没有探讨过的,而本文作为文件系统的预备知识,着重介绍的硬件,对,没错,是硬件部分,介绍的是磁盘方面的知识。
有人会好奇,我们学习文件系统和硬件内容有什么关系呢?一个是OS层面的,一个是外设层面的。 ->在冯诺依曼结构体中,cpu可是不能直接和外设打交道的,要借助OS,所以我们有必要学习磁盘,借助于磁盘的学习,我们对文件系统理解会更加容易一点。
本文通过三个部分介绍磁盘,1 看看物理磁盘 2 了解磁盘的存储结构 3 对磁盘进行逻辑抽象
那么,就进入今日的主题吧!
看看物理磁盘
我们通过几个几个实际图片看看:
磁盘用于存储信息的都是那个光滑的平面存储信息的,而存储信息的时候,光盘上的磁头会左右摇摆(记住要考)用于存储信息,其中那个盘叫做盘片,那么磁盘高速旋转和磁头左右摇摆都是通过的马达,也就是磁盘中间的圆柱体类似的东西。这是对磁盘最基础的认识。
那么磁盘的作用是什么呢?
图中的房间是机房,而里面的机柜,也就是像柜子一样的东西,里面都是存储的磁盘:
而磁盘作为存储信息的机械外设,不同于光盘这种存储信息的,它具有两面都是光滑的,每个面都是可存储信息,可是我们明明知道计算机只认识0 1,磁盘难道可以写入0 1吗?
这里我们的认识不能太死板了,因为0 1无非就是两种状态,如果规定都是我们自己认为的规定,比如我们可以规定0是南极,1是北极,对于磁体来说,我们就可以这样规定。
而磁盘,就是由无数无数个小磁铁构成的,所以里面是否存在了0 1呢?当然是存储了的。
信息存储方面我们就知道了磁盘可以做到。
这里插个题外话,对于机房来说,因为用到了大量的磁盘,机柜,并且信息量极高,信息量极高的情况下是因为磁盘高速运转,所以势必会产生很多热量,那么如果不散热就会导致热量堆积,让温度升高,从而导致磁盘退磁,退磁的后果可是十分严重的,这导致了信息的丢失。而一般只有大型的公司具有自主机房的能力,比如阿里,腾讯,字节跳动等,因为一个机房的造价是非常非常高的。
甚至为了散热,某个公司将机房建在了西湖里面,保证了散热的进行,但是确实,,,造价太昂贵了,包括后期的维护成本也是非常高的。
磁盘分为民用级别的磁盘,企业级的磁盘。
这里我们得出来的结论是:磁盘可以进行数据存储,并且满足了计算机0 1的需求,但是需要散热等。
所以计算机的0 1只是物理的不同表现,而不是特定的。
了解磁盘的存储结构
由前文我们知道磁盘本质上是一个机械外设,那么既然是外设,导致的结果肯定就是慢,但是存储的信息量非常大,所以和我们平常使用的SSD固态硬盘来说,造价相对来说是非常便宜的。
这也是它性价比高的原因之一。
而从上文的图片来看,我们知道了磁盘的可以叠螺子,也就是如上图。每个光面都有一个磁头,用来存取数据等。
对于SSD来说,我们对硬盘分区,磁盘也是,不过磁盘是将这个圆盘分为不同的扇区,而磁盘读取的基本单位是扇区,每次是512字节。中间的一圈叫做磁道,磁道里面有扇区。
但是磁盘将数据发送到内存的方式是,比如需要一个字节,磁盘会将这个扇区的512字节全部发送过去,管它要不要的。
这时候有人问了,不同扇区的大小不一样,难道都是一样的大小吗?这是因为靠近中心的扇区的bit位比较集中,远离的就没有那么集中了。
那么问题来了,我们如何找到磁盘中存储的数据呢?
你想,磁头是用来写数据的,那么在哪个面我们可以通过磁头找到,同时需要找到对应的柱面,也就是磁道,磁道找到了,我们就需要找到对应的扇区,找到了之后,我们也就找到了对应的数据,其中,磁道,扇区,磁头的英文组成的名字是CHS定址法,因为磁道的英文是Cylinder,磁头的英文是Head,扇区的英文是:sector。这个CHS定址法对于后面数据的查找十分重要,尤其是磁盘的逻辑抽象部分。
到现在,我们甚至可以将文件存储的问题,变成文件在磁盘中占有几个扇区的问题!
对磁盘进行逻辑抽象
如果OS直接使用CHS定址法,查找数据的话会导致耦合度较高。所以为了方便内核进行磁盘管理,OS又将磁盘简单封装了一下,在此之前,我们先看看一个古老的东西:
磁带里面都是一条长长的带子,在里面绕成了环状,可是小时候的我们总是调皮的,我们当然会将磁带扯出来玩,扯出来的结果就是将磁带从环状的转换成了线性的。
也就是这样的一个过程转换:
那么,提问了就,这个方方的东西,假设有800GB的空间,那么从开头到某个部分开始,有200GB,这是一个盘面的存储,那么这个盘面可以分为许多许多的sector,那么每个扇区都有自己的空间,也就是从头开始划分自己的空间,这是什么?这不就是数组吗!!!
我们已经完成了磁盘逻辑抽象的第一步,抽象成为了数组。
那么在数组如何使用CHS定址法呢?位图相信大家都是有所了解吧?
在这个数组里面查找,甚至有位图既视感了。不是有很多盘面吗,那么假设每个盘面的存储空间为M,那么M总 / M等于第几个磁盘,M总 % M等于M空间里面的第几个,所以我们要找到对应的sector只需要一个除法 + 一个取模即可。
一般而言,OS和磁盘交互的时候,基本单位是4KB,如果是512字节,就太小了。并且因为磁盘读取数据,不是一次性将4KB的拿过去吗?所以,OS做了这样一件事。
将原来的数组区域化,分为不同的块区域,计算下标也很简单,m * 块的空间个数即可,这样OS可以直接找到对应的块,也就能够一次将多少多少字节拿过去了。
而这分出来的块,体现了分治思想,就像管理一个国家一样的。
这些块有一个名字叫做:LBA(logic block address)逻辑区块地址。
所以!
文件 不就是由块组成的吗!!
感谢阅读!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)