首先,要明确一条清晰的 IO 栈路线;
其次,要了解每一个途径地点的大致用途;
最后,可以深入了解内核调用的代码路线;
文件 IO 的内核路线
IO 从用户态走系统调用进到内核,内核的路径:VFS → 文件系统 → 块层 → SCSI 层 。这里提一点,Linux 的 “文件” 的概念已经升华了,一切皆文件,网络 IO 其实进到内核也是走 VFS 。
这条路径可以完全记到心里,更深入的细节可以后续基于这个框架去补充。那么接下来我们稍微了解下这 IO 路径途径的 4 个节点分别做哪些事情?
内核 IO 路线的节点
1 VFS 层
VFS ( Virtual File System 、Virtual FileSystem Switch )层是 Linux 针对文件概念封装的一层通用逻辑,它做的事情其实非常简单,就是把所有文件系统的共性的东西抽象出来,比如 file ,inode ,dentry 等结构体,针对这些结构体抽象出通用的 api 接口,然后具体的文件系统则只需要按照接口去实现这些接口即可,在 IO 下来的时候,VFS 层使用到文件所在的文件系统的对应接口。
它的作用:为上层抽象统一的操作界面,在 IO 路径上切换不同的文件系统。
假设现在你想要写个内核文件系统,那么只需要按照 Linux 预设的一些 api 接口,实现起来就行了。
2文件系统