文件系统
一个磁盘通常在安装操作系统时,至少有两个分区
- 交换分区:物理内存不够用时,作为交换内存,将物理内存上的数据放在交换分区中
- 文件系统分区:就是电脑上存储文件的分区
假设一个文件在磁盘上要占据一块连续的空间,这样就会造成大量的空间碎片问题
解决内存碎片:进行分块存储
存储分为两个区域,一个是数据区,一个是inode区
数据区
- 将数据区分成一个个小块(一块4kb,4096字节),
- 如果存4097字节大小的数据,就将数据存入不同的空闲块
用了哪些块,哪些块在前还是在后得描述起来inode区域:文件描述节点
- inode其实就是一共文件的描述结构节点,描述了文件有多大,时间,属性,访问权限等信息,以及数据在哪些数据块中存储的
BootBlock:机器的开启信息,OS在启动后读取这块数据
1GB空间的管理
- 文件=内容+属性,这俩都要存储
Linux采用的是将内容和属性分开的存储方案- 文件的内容放在block中(4kb,4096字节)
- 文件的属性放在inode中(就是磁盘上的另一块空间,128字节)
- 文件的内容是不断增多,属性值是稳定的
- Date blocks(数据块):以4kb为单位,有数千个,每个都有编号
作用:以块为单位进行内容保存,如果是4097,多的一个字节也是分配一个块- inode table:以128字节为单位,进行inode属性的保存,里面会包含大量inode空间
每个inode块保存文件的属性- inode块:inode块的属性中有一个inode编号
一般而言,一个文件一个inode,也就只有一个inode号
- block_bitmap:以位图结构记录数据块的使用情况
超级块记录了文件系统信息以及各个区域的地址,两个map的位置,data和inode区域的地址- inde_bitmap:记录inode使用情况
一个文件有多个数据块,一个文件会对应一个inode
比特位的位置代表第几个inode,比特位的内容表示对应的inode是否被占用- 存储一个文件时,通过这俩就可以快速知道哪个数据块和inode没有被使用
GDT:块组描述符
存储的信息:有多少inode,起始inode编号,有多少inode被使用,有多少block被使用SB:文件系统中的顶层数据结构
表示整个分区有多少个Block group
SB管理宏观上的整个分区,GDT管理分区内的一个组,剩下的字段管理组内的文件属性和内容
inode内部属性
- 一个inode对应一个文件,一个文件如何和自己的内容关联起来
- inode结构体中有一个block[15]数组
- [0,11],直接保存该文件对应的blocks编号
- data_block中也能保存其它数据块
[12,15]指向一个data块,但是这个块中不保存有效数据,而是保存文件所使用的其它块的编号
文件名是文件属性吗
- 算,但是inode中并不保存文件名
- 所以,Linux底层都是通过inode编号标识文件的
要找到文件,就得找到文件的inode编号
谁来找inode编号
- 目录是文件,它也有自己的inode,
目录中的内容(数据块):存放的是文件名和inode编号的映射关系
Linux同一个目录下,可以创建多个同名文件吗
- 文件名本身是一个具有key值的东西
进入目录需要x权限
创建文件需要w权限
查看文件名需要r权限
创建文件,OS所做的事情
创建文件:
- 创建文件,先查找iode_bitemap,
- 找到一个未使用的inode节点,将map的对应位置置1,将属性信息写入对应的inode中
- 同时将数据写入数据块中,修改对应的block_bitmap,并且建议block和inode的映射关系,
- 并返回inode
目录的理解
- 创建一个文件,一定是在某个目录下,文件创建好后,拿到的新建文件的inode,
- 该文件找到自己所处的目录,找目录的data_block
写入文件名和inode编号的映射关系
删除文件:
删除一个文件其实未真正清除数据
删除的文件的inode编号在日志文件中
inode一旦被覆盖就g了
知道自己所处的目录,是不知道自己的inode
软硬链接的区别
软链接是新inode,硬链接是同样的inode
软连接是独立的文件,有独立的inode和inode编号
硬链接不是一个独立文件,它和目标文件使用的是同一个inode
软链接:
link简称,soft软,hard硬
通过
ln -s
命令生成软链接文件
- 先创建一个普通文件1.txt,内容是hahaha;
- 使用命令
ln –s 1.txt 1.txtln
给1.txt文件创建一个软连接文件;
查看文件特征:
- 使用
ll –i
命令,前面会有一串inode节点号;- 原文件和软链接的inode号不同,但是这两个节点号里面的内容一样
inode本质上对应的是文件系统当中的概念,inode是描述文件在磁盘里的存储位置;
文件在存储时不是连续存储,而是分成不同的block进行存储,inode节点描述了当前文件存在磁盘中哪些block中
软连接文件特点
- 软链接文件(文件前为l),本质上是原文件创建的一个快捷方式,可以通过其操作原文件;
- 删除原文件而不删软链接文件,再次对软链接文件进行一些操作时,操作系统会自动生成新的原文件,并且inode号也和旧原文件相同;
- 所以在删除软链接对应的原文件时,要将两个文件都删除
硬链接:
通过ln 1.txt 1.txtln
命令生成,比软链接命令少-s
- 硬链接文件是一个普通文件,用ll –I 命令查看时,inode节点号相同,硬链接文件是原文件的一个拷贝
删除其中一个文件时,删除方法引用计数:
- inode里也有引用计数,创建一个硬链接文件时,就会+1,第一次删除原文件或者硬链接文件,系统都不真正删除,只是给引用计数-1
- 最后,软链接应用较多
- C++中解决浅拷贝的方式一样:
- 计算指向同一动态内存的指针数目,调用一次free就对引用计数减1,如果结果>0则不真正释放,=0才释放