Linux环境编程笔记--文件与目录

1、ext2文件系统

示意图:Linux环境编程笔记--文件与目录Block(块):
物理磁盘是由一个个的区(所谓的扇区)连接成一片,每个区是 512 字节。为了能有组织,有计划的使用磁盘,设计者把连续若干个(比如2个,4个,8个)区连成一组,抽象出 block 的概念。如果使用 2 个区为一组,那一个 block 的大小就是 1KB。如今,磁盘也不在是什么昂贵资源,动辄就是几百G大小,通常在设计 block 的时候都使用 8 区连成一组,即一个 block 是 4KB。

Boot Block(引导区):
无论如何,Boot Block 都占用 1KB,它并不以你划分的 block 大小来改变自己。即使你划分的 block 大小是 4KB,Boot Block 也只占用 1KB 大小。这个块,是专门为启动CPU的时候保留的(我没说是启动操作系统)。
在你摁下开机键的那一刻,CPU 一上电,硬件会主动把 Boot Block 复制到内存的0x7c00这个位置,然后CPU 就从这个位置开始执行,后面的事情,就是一步一步的把操作系统引导起来。

inode table(inode表)
inode表中存放了inode节点,inode节点记录了文件存放位置、文件权限、最近打开时间等信息。但是并没有存储文件名,文件名则是被放在了称为目录项的结构体中
Linux环境编程笔记--文件与目录

inode bitmap(inode位图)和block bitmap(块位图):
位图中的每一位用来表示一个位置,为1则表示被占用,为0表示没有被占用。inode位图用来记录inode表的占用情况,block位图记录block的占用情况。
Linux环境编程笔记--文件与目录

Group Descriptor Table(组描述符表)
一个组描述符表,它不仅存储当前组的信息,也会保存其它组的信息。这是一种备份思想。组描述符表中存储的组描述符。
组描述符中保存了 inode 位图和 block 位图在哪个 block 上。除此还有 inode 表的位置等等。
Linux环境编程笔记--文件与目录

Super Block(超级块):
记录一些全局信息,如:inode节点个数、block个数、第一个数据块的位置等。
Linux环境编程笔记--文件与目录