|
@@ -0,0 +1,93 @@
|
|
|
|
+:::{note}
|
|
|
|
+本文作者: 龙进
|
|
|
|
+
|
|
|
|
+Email: <[email protected]>
|
|
|
|
+:::
|
|
|
|
+
|
|
|
|
+# 概述
|
|
|
|
+
|
|
|
|
+  在本文中,我们将介绍DragonOS文件系统的架构设计。
|
|
|
|
+
|
|
|
|
+## 总览
|
|
|
|
+
|
|
|
|
+  如下图所示,DragonOS的文件系统相关的机制主要包括以下几个部分:
|
|
|
|
+
|
|
|
|
+- 系统调用接口
|
|
|
|
+- 虚拟文件系统
|
|
|
|
+ - 文件抽象(File)
|
|
|
|
+ - 挂载文件系统(MountFS)
|
|
|
|
+- 具体的文件系统
|
|
|
|
+
|
|
|
|
+```text
|
|
|
|
+ ┌─────────────────────────────────────────────────┐
|
|
|
|
+ │ │
|
|
|
|
+Syscall: │ sys_open, sys_read, sys_write, sys_close, │
|
|
|
|
+ │ │
|
|
|
|
+ │ sys_lseek, etc.. │
|
|
|
|
+ │ │
|
|
|
|
+ └───────────────────────┬─────────────────────────┘
|
|
|
|
+ │
|
|
|
|
+ │
|
|
|
|
+ VFS: ┌──────▼─────┐
|
|
|
|
+ │ │
|
|
|
|
+ │ File │
|
|
|
|
+ │ │
|
|
|
|
+ └──────┬─────┘
|
|
|
|
+ │
|
|
|
|
+ ┌────────▼────────┐
|
|
|
|
+ │ │
|
|
|
|
+ │ MountFS │
|
|
|
|
+ │ │
|
|
|
|
+ └────┬────────────┘
|
|
|
|
+ │
|
|
|
|
+ Filesystems: ┌─────────────┼─────────────┬────────────┐
|
|
|
|
+ │ │ │ │
|
|
|
|
+ ┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼────┐ ┌─────▼─────┐
|
|
|
|
+ │ │ │ │ │ │ │ │
|
|
|
|
+ │ FAT │ │ DevFS │ │ ProcFS │ │ RamFS │
|
|
|
|
+ │ │ │ │ │ │ │ │
|
|
|
|
+ └───────────┘ └───────────┘ └──────────┘ └───────────┘
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+## 系统调用接口
|
|
|
|
+
|
|
|
|
+  DragonOS的文件系统相关的系统调用接口主要包括以下几个:
|
|
|
|
+
|
|
|
|
+- `sys_open`:打开文件
|
|
|
|
+- `sys_read`:读取文件
|
|
|
|
+- `sys_write`:写入文件
|
|
|
|
+- `sys_close`:关闭文件
|
|
|
|
+- `sys_lseek`:定位文件指针
|
|
|
|
+- `sys_mkdir`:创建目录
|
|
|
|
+- `sys_unlink_at`:删除文件或目录(通过参数`flag`区分到底是删除文件还是目录)
|
|
|
|
+- `sys_ioctl`:控制设备 (未实现)
|
|
|
|
+- `sys_fstat`:获取文件状态(未实现)
|
|
|
|
+- `sys_fsync`:同步文件(未实现)
|
|
|
|
+- `sys_ftruncate`:截断文件(未实现)
|
|
|
|
+- `sys_fchmod`:修改文件权限(未实现)
|
|
|
|
+- 其他系统调用接口(未实现)
|
|
|
|
+
|
|
|
|
+  关于接口的具体含义,可以参考 [DragonOS系统调用接口](../../syscall_api/index.rst)。
|
|
|
|
+
|
|
|
|
+## 虚拟文件系统(VFS)
|
|
|
|
+
|
|
|
|
+  VFS是DragonOS文件系统的核心,它提供了一套统一的文件系统接口,使得DragonOS可以支持多种不同的文件系统。VFS的主要功能包括:
|
|
|
|
+
|
|
|
|
+- 提供统一的文件系统接口
|
|
|
|
+- 提供文件系统的挂载和卸载机制(MountFS)
|
|
|
|
+- 提供文件抽象(File)
|
|
|
|
+- 提供文件系统的抽象(FileSystem)
|
|
|
|
+- 提供IndexNode抽象
|
|
|
|
+- 提供文件系统的缓存、同步机制(尚未实现)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+  关于VFS的详细介绍,请见[DragonOS虚拟文件系统](vfs/index.rst)。
|
|
|
|
+
|
|
|
|
+## 具体的文件系统
|
|
|
|
+
|
|
|
|
+  DragonOS目前支持的文件系统包括:
|
|
|
|
+
|
|
|
|
+- FAT文件系统(FAT12、FAT16、FAT32)
|
|
|
|
+- DevFS
|
|
|
|
+- ProcFS
|
|
|
|
+- RamFS
|