操作系统学习——文件系统(上)

一、磁盘

linux中的普通文件和目录文件保存在称为块物理设备的磁盘上。每个磁盘可以定义多个文件系统。

一个文件系统由逻辑块的序列组成,一个逻辑盘空间一般划分为几个用途各不相同的部分,即引导块、超级块、inode区以及数据区。

(1)引导区:是一个扇区,用来存放引导程序,用于读入并启动操作系统。

(2)超级块:用于记录文件系统的管理信息,如块个数、块大小、空闲块

(3)inode区:一个文件占据一个inode点(目录也是文件)

        第一个索引节点是该文件系统的 / 根节点,

(4)数据区:用于存放文件数据或管理数据

二、文件系统

1.概念:文件系统是操作系统中负责把用户文件存到磁盘硬件中,它的基本数据单位是文件,目的是为了对磁盘上的文件进行组织管理。

2.linux会为每个文件分配两个数据结构:索引节点和目录项。用来记录文件的元信息和目录层次结构。

(1)inode(索引节点):用来记录文件的元信息

        比如inode号,文件大小,访问权限,创建时间,修改时间,数据在磁盘的位置等。存储在硬盘当中

(2)denty(目录项):

用来记录文件的名字、索引节点指针以及其他目录项的层级关联关系,多个目录项形成目录结构。

目录项是内核维护的一个数据结构,不存放于磁盘,而是缓存在内存。而目录是个文件,存储在磁盘中。其实目录项也是从磁盘的目录文件里读来的,只是为了效率,会把已经读过的目录用目录项这个数据结构缓存在内存。

(3)目录项和索引节点的关系是多对一

一个文件可以有多个别名,而文件的inode号唯一,目录项中存放文件的名字,所以目录项与索引节点的关系是多对一。如,硬链接的实现就是多个目录项中的索引节点指向同一个文件。

3. 文件数据如何存储在磁盘上?

    磁盘读取的最小单位是扇区,512B;为了提高效率,多个扇区被组成一个逻辑块,每次读取的最小单位都是逻辑块(Linux中大小为4KB)。    

    并不会把超级块和索引节点全部加载进内存; 只有在使用的时候才把索引节点和超级块,才将其加载进内存。超级块:文件系统挂载时加入内存。索引节点区:文件被访问时进入内存。