文件系统

1、文件系统

文件系统实际上就是文件在物理存储设备上的组织结构

2、文件系统组织结构(存储设备)

在物理设备上(如:磁盘),不同的分区,文件系统类型可能不一致,每个分区都是一个文件系统,在物理存储设备上,文件的组织结构:超级块、索引节点、目录块、数据块

超级块(super block):存放文件系统类型、存储设备索引节点总量、使用量、剩余量等等相关系统信息

索引节点表(inode):每个文件在存储设备上的存放不仅仅是文件内容,还要有文件的属性(时间参数、权限、所有者等等),索引节点可以看成是对一个文件的抽象,其中包含实际文件数据在存储设备存放位置的索引,每个文件的索引节点对应一个数组成员,数组下标就是索引节点号(唯一)。总之就是文件的属性描述和存储位置索引。

目录块:目录块中存放的是文件名称和索引节点号的一一对应关系,用来快速建立文件系统内文件结构

数据块:索引节点中存放的只是文件的属性和存放位置索引,具体文件数据是存放在数据块中的。

3、文件系统组织结构(Linux内核)

上述结构是文件系统的静态结构,但是当系统运行的时候,我们是需要在操作系统中看见这些文件的结构(树形结构)和基本信息(例如ls -a查看的文件属性)的,那么文件系统就需要在操作系统中以一定的格式来去展现,Linux内核通过在内存中维护重要的几种结构体来实现:超级块对象、目录对象、索引节点对象、file文件操作对象。

超级块对象:主要揭示文件系统的类型和索引节点的读写等操作

索引节点对象:由于内存有限,并且什么时候读取、读取哪个文件这些都是偶然不确定的,我们只需要在内存中以索引节点对象的形式表示一个文件即可

目录块对象:本来描述文件有了索引节点就足够了,但是索引节点不利于对文件的检索,有了目录项对象之后,就能快速建立文件结构,方便对文件的查找和查看

file文件操作对象:当开始对文件进行操作(open、read、write等)的时候,需要对文件的操作进度等等进行记录,实际就是描述一个正在操作的文件。

4、Linux内核中虚拟文件系统(VFS)

Linux内核中为了向上提供文件的统一操作接口,向下管理支持不同的文件系统类型,引入了VFS(虚拟文件系统)。也就是说对于上层用户来说,不论设备还是文件(Linux下一切设备皆是文件),操作接口都是统一的(open、read、write),对于底层来说,文件最终存放的存储设备可能不同,这样针对文件实际操作就会不一样,但是这些对于用户是不需要考虑的。

当用户使用到对文件的操作(open、read、write)时,VFS会层层调用(不论是那种文件系统,这个过程都是一样的),最终完成对file文件操作对象相关信息的具体填充,例如不同的文件系统读写相关的文件操作不同,那么在VFS的操作下,实现file的不同操作方法填充。

你可能感兴趣的:(嵌入式操作系统)