后续会出代码分析
1.文件系统的概述
1.1 文件系统是磁盘管理的目录
1.2 是Linux中操作所有硬件设备的接口
1.3 有系统的功能机制
文件系统也叫应用程序,写应用程序不仅要存在文件系统中,并且还要使用文件系统的诸多功能。
1.4 文件系统的使用
1.4.1 板卡上电后首先由UBOOT启动初始化板卡,将Linux内核移到内存中并运行.
1.4.2 由Linux内核自行做初始化等操作,挂载了第一个应用程序(根文件系统)
1.4.3 根文件系统会提供磁盘管理服务,glibc 设备节点 配置文件 应用程序 shell命令
宏观:
文件系统包括的重要部分:
1. 标准库,glibc opengl 等等
2. 配置文件 /etc/init.d/rcS 想要开机运行什么软件 载入什么画面 执行什么命令都在里面
3.设备节点 /dev/console 控制台节点
4.架构程序 对多种服务和功能进行系统接口封装
5. SEHLL的实现 所有的shell命令都在文件系统中
2.文件系统的启动( busybox)
UBOOT给kernel传入tagglist类型参数,kernel给busybox传入参数。接收之后进行解析和应用。
3.Linux中使用文件系统的组成部分
3.1 有关于Linux中高速缓冲区的管理程序。 buffer.c
3.2 文件系统的底层通用函数(对于硬盘的读写 分配 释放等,对于目录的节点管理 inode 内存与磁盘的映射)
3.3 对文件数据进行读写操作模块(VFS:虚拟文件系统 硬件驱动和文件系统的关系 pipe 块设备(磁盘 光驱等))
3.4 文件系统与其他程序的接口实现(fopen 关闭 创建等使用文件的调用方式)
4.文件系统的基本概念再分析
磁盘中要有目录的映射,我们把磁盘分成盘片,每一个盘片都有一个文件系统的子系统(章节目录)
引导块:用来引导设备的,引导块可以为空
超级块:是文件子系统的描述符(记录该盘片的逻辑块位图的地址,i节点位图的地址,通过设备号可以获取)
逻辑块位图:其每一位对应一个逻辑块的使用情况,对应逻辑块如果使用了则逻辑位图对应位置1
i节点位图:其每一位对应一个i节点的使用情况,对应i节点如果使用了则i节点位图上的改byte位置1
逻辑块: 用来存储数据的数据存储单元
i node节点:目录 与 磁盘的桥接 文件的属性描述(类似于文件的名片)与磁盘一对一映射
流程:先通过设备号获取到超级块再获取逻辑块位图找到相关逻辑块,再通过读写函数进行读取或者写入
5.高速缓冲区
高速缓冲区是用户程序和磁盘交互的媒介
高速缓冲区的管理要素:
5.1 映射关系(内存与磁盘之间的映射关系)
5.2 应用程序与高速缓冲区的交互API
5.3 磁盘的交互API
5.4 高速缓冲区的管理系统(循环链表+哈希表+单链表)
5.5 高速缓冲区的工作流程
高速缓冲区中存储着对应的块设备驱动的数据 当从块设备中读取数据的时候,OS首先会从高速缓冲区中进行检索,如果没有则从块设备中读出数据,如果有并且是最新的,就直接和该高速缓冲区进行数据交互。
当需要把数据写到块设备中时,系统会在高速缓冲区中申请一块空闲的缓冲块来临时存放这些数据。以至于什么时候把数据写到设备中去,则是通过设备数据同步实现的。
6.虚拟文件系统VFS
概念:文件是有多种类型的 b c p s l - d 但是都可以用open read ioctl lseek来操作。这里的通用性就是由虚拟文件系统来完成。
-------------------------------------------------
内核文件fs
1.inode.c
存放了文件的各种信息 比如文件类型 文件权限 最后修改时间等等
2.buffer.c 高速缓存区
高速缓冲区是文件系统访问块设备钟的数据的必经要道。为了提高系统性能,内核就在内存中开辟了一个高速数据缓冲区,并将其划分成一个个与磁盘数据块大小相等的缓存块来使用和管理。
3.bitmap.c inode.c namei.c super.c 文件系统底层函数
bitmap.c 程序包括对i节点位图和逻辑块位图进行释放和占用处理函数。
inode.c
namei.c 程序主要包括函数namei() 将给定文件路径映射到其节点
super().c 专门用于处理文件系统超级块
4.block_dev.c file_dev.c char_dev.c pipe.c read_write.c 文件中数据访问操作
前4个文件的代码共同实现了read_write.c中的read()和write()系统调用
block_dev.c 用于读写块设备特殊文件中的数据
file_dev.c 用于访问一般的正规文件
pipe.c 文件中实现了管道读写函数
5.open.c 文件操作相关的系统调用
主要有文件的创建,打开,关闭,文件宿主和属性的修改等等
6.fcntl.c 文件控制系统调用和文件句柄(描述符)复制系统调用
7.stat.c 文件用于实现取文件状态信息系统调用
未完待续 。。后续将完成代码分析