目录
1.基础知识
之前介绍的全是进程打开的文件是如何执行的,那么没有被打开的文件如何管理呢?这是本文要解释的。
1.文件没有被打开,此时文件只能在磁盘中等待被打开。
2.即使没有被打开,文件也不是随意存放着的,没有被打开的文件也会被管理
3.没有被打开的文件被管理称为文件系统
2.磁盘的存储原理
1.物理结构
1.现代笔记本很少用磁盘,几乎都是ssd(固态硬盘)
2.磁盘是计算机唯一的机械结构设备,也是硬件;这也注定了该设备访问速度慢
3.磁盘的存储容量大(相比ssd而言),而且其存储环境为真空,一旦暴露就会无法再使用
4.光盘叫做盘面,两面都存储信息,内部有马达控制盘片旋转;
5.盘片的上方针状物体为磁头,也有马达控制其来回摆动;
6.磁头在每一个盘面都有指向,但是磁头与盘面没有接触;
7.磁盘不能抖动,磁头可能会刮花盘面,数据就会丢失;
8.磁盘的01数据是通过小片段单元的磁化来存储的;
2.存储结构
1.磁盘的寻址单位为一个扇区(512byte) [右图扇区所指白色区域]
2.磁盘由于其存储结构奠定了其为块设备的条件
3.每个扇区大小都一样,虽然看起来不一样 (当然也有大小不一样的)
4.定位单面扇区:确认在哪个磁道(磁头摆动定位磁道),再确认在哪个扇区(盘面旋转定位扇区)
5.盘面数等于磁头数,磁头连在一起,使用访问时以柱面为单位
6.整体磁盘确认位置:先定位在哪个磁道(柱面),再定位磁头(盘面),最后定位扇区 -- CHS法
3.逻辑结构
1.盘的存储结构抽象成逻辑结构就是一长条数组,这大数组来存储各种数据
2.我们就将其抽象成了一个数组,数组的最小单元为一个扇区即512byte大小的空间,我们将其称之为LBA(logic block adress逻辑块)地址,我们知道找到数组下标就能找到某扇面的内容
3.寻找是哪一个扇区其实就是通过一系列除模确认哪个扇面的哪个磁道的哪个扇区
4.为什么要抽象成逻辑结构:第一是为了方便管理,第二是OS不与磁盘强耦合,使得在不同硬件中也可以兼容
5.512byte的内存也很小,如果需要修改一个数据,必须以4KB大小作为基本单位进行修改,这也就意味着OS对于修改数据这件事是定制进行对多个扇区进行读取的,这样做是为了提高效率。
6.内存是4KB为管理单位的,也被称为页框;文件的可执行文件也按4KB划分,被称为页帧。这样有利于管理
那么我们能对磁盘进一步划分管理
以上的大小设置皆为假设,不同的机器有不同的划分方式;其实对于我们看待计算机的视角,无非是划分大小而已。
1.super block:整个文件系统的信息,之所以多个分组中存在是为了备份,使得判错是能即使修改之
2.我们知道,文件 = 内容 + 属性,Linux的文件属性和内容是分开存储的;
3.保存文件属性为inode命名的,inode是固定大小的,一个文件有自己的inode;inode不存储文件名,li -i可查看文件的inode,每个文件的inode都不一样
4.inode table,存储inode的,如果要创建一个文件,那么必须得到一个没有被标记的inode作为该文件的标记。
5.Date block存储文件内容,文件存放内容数据块
6.inode bitmap,是一个位图,用比特位的信息表示对应的inode位置是否被使用,并且找到也可以用来找到inode的位置,因为其一一对应
7.block bitmap一种比特位,与文件内容一一对应,也是用于找到位置的索引。
8.GDT:文件属性和内容块的宏观属性,即是否还有空间
9.inode找文件的步骤:
找文件属性:得到inode偏移量(inode可以跨组但是不能跨区),找到具体组,在组的inode bitmap中找标记,得到位置访问inode table
找文件内容:已经知道inode中有很多属性,里面有一个data block blocks数组表,用于连接对应data,通过查找表这样就能找到data中自己的文件内容。
10.删除文件,只需要找到inode bitmap的比特位定义为零即可(惰性删除)
11.用户找文件是通过找文件名,所以其实用户角度的找文件其实是通过目录的
目录有属性和内容,目录的数据块是文件名和其inode对应的映射关系,那么也就是说,目录的文件名索引到inode,inode就能找到文件内容。