Linux文件系统深入理解
理解磁盘
当一个文件被打开时,他会加载到内存进行相应操作,而未被打开的文件则一直存放在磁盘(或者是固态硬盘,但是本篇文章是依据磁盘来讲的)上
磁盘物理结构
可以看到,磁盘有许多盘片,一个盘片有上下两个盘面,每一个盘面都需要有一个磁头去读写数据
每个盘面可以分割成许多的同心圆,这个同心圆称为磁道,盘片都是上下堆叠的,因此一个磁道在上,下或者上和下都存在其他盘面的磁道,这些相对位置相同的磁道组成柱面
一个磁道又可以分割为许多扇区(一个弧面),扇区是磁盘读写的基本单位
磁盘在工作时,盘片高速旋转,磁头左右摆动,这样就可以找到盘面上的任意位置了
磁盘如何找到一个指定的扇区
磁盘的基本单位是扇区,如果给扇区从0开始按顺序编号,那么就可以抽象成一个数组,扇区号就是下标,访问某个扇区给定下标后,磁盘根据下标(扇区号)去寻找存储区域
首先找到对应的磁头(Header),在找到对应的磁道(柱面,Cylinder),在找到对应的扇区(Sector),这三步也称作CHS 定址法。
如果知道盘面数量,磁道数量,扇区数量,就可以通过扇区号找到指定扇区
举例:
假设一个磁盘有8个盘面,一个盘面有10个磁道,一个磁道被分为8个扇区,即一个盘面80个扇区。要找到扇区号为346的扇区
磁头号 H = 346 / 80 = 4
磁道号 C = (346 % 80)/ 8 = 26 / 8 = 3
磁道内扇区号 S = (346 % 8)% 8 = 2
即找到4号磁头3号磁道2号扇区就为扇区号为346的扇区
操作系统管理磁盘
一般来说,操作系统和磁盘交互的时候,最基本的单位是4KB,也称作数据块,假设一个磁盘的一个扇区大小为512字节,那么一个数据块就是8个扇区,
操作系统读取数据时,首先确定数据所在的块地址(逻辑块地址,LBA),根据块号计算出扇区号,交由磁盘,磁盘根据CHS定址法找到指定扇区,接着连续读取8个扇区交给操作系统,
操作系统在根据数据的扇区号计算出块内地址,进行操作
续读取8个扇区交给操作系统,
操作系统在根据数据的扇区号计算出块内地址,进行操作
对于操作系统而言,管理磁盘时可以将磁盘看成以数据快为基本元素的数组,但是一个磁盘可能很大,管理起来可能很困难,因此可以将磁盘划分成更小的分区,将管理一个分区的方法用于管理其他分区,就可以对磁盘进行整体管理。Windows操作系统中的c盘,d盘就是对磁盘(或者是固态硬盘)的分区。