1:::{note}
2本文作者: 龙进
3
4Email: <longjin@DragonOS.org>
5:::
6
7# 概述
8
9&emsp;&emsp;在本文中,我们将介绍DragonOS文件系统的架构设计。
10
11## 总览
12
13&emsp;&emsp;如下图所示,DragonOS的文件系统相关的机制主要包括以下几个部分:
14
15- 系统调用接口
16- 虚拟文件系统
17    - 文件抽象(File)
18    - 挂载文件系统(MountFS)
19- 具体的文件系统
20
21```text
22            ┌─────────────────────────────────────────────────┐
23            │                                                 │
24Syscall:    │   sys_open, sys_read, sys_write, sys_close,     │
25            │                                                 │
26            │   sys_lseek, etc..                              │
27            │                                                 │
28            └───────────────────────┬─────────────────────────┘
293031    VFS:                     ┌──────▼─────┐
32                             │            │
33                             │    File    │
34                             │            │
35                             └──────┬─────┘
3637                           ┌────────▼────────┐
38                           │                 │
39                           │     MountFS     │
40                           │                 │
41                           └────┬────────────┘
4243   Filesystems:   ┌─────────────┼─────────────┬────────────┐
44                  │             │             │            │
45            ┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼────┐ ┌─────▼─────┐
46            │           │ │           │ │          │ │           │
47            │    FAT    │ │   DevFS   │ │  ProcFS  │ │   RamFS   │
48            │           │ │           │ │          │ │           │
49            └───────────┘ └───────────┘ └──────────┘ └───────────┘
50```
51
52## 系统调用接口
53
54&emsp;&emsp;DragonOS的文件系统相关的系统调用接口主要包括以下几个:
55
56- `sys_open`:打开文件
57- `sys_read`:读取文件
58- `sys_write`:写入文件
59- `sys_close`:关闭文件
60- `sys_lseek`:定位文件指针
61- `sys_mkdir`:创建目录
62- `sys_unlink_at`:删除文件或目录(通过参数`flag`区分到底是删除文件还是目录)
63- `sys_ioctl`:控制设备 (未实现)
64- `sys_fstat`:获取文件状态(未实现)
65- `sys_fsync`:同步文件(未实现)
66- `sys_ftruncate`:截断文件(未实现)
67- `sys_fchmod`:修改文件权限(未实现)
68- 其他系统调用接口(未实现)
69
70&emsp;&emsp;关于接口的具体含义,可以参考 [DragonOS系统调用接口](../../syscall_api/index.rst)。
71
72## 虚拟文件系统(VFS)
73
74&emsp;&emsp;VFS是DragonOS文件系统的核心,它提供了一套统一的文件系统接口,使得DragonOS可以支持多种不同的文件系统。VFS的主要功能包括:
75
76- 提供统一的文件系统接口
77- 提供文件系统的挂载和卸载机制(MountFS)
78- 提供文件抽象(File)
79- 提供文件系统的抽象(FileSystem)
80- 提供IndexNode抽象
81- 提供文件系统的缓存、同步机制(尚未实现)
82
83
84&emsp;&emsp;关于VFS的详细介绍,请见[DragonOS虚拟文件系统](vfs/index.rst)。
85
86## 具体的文件系统
87
88&emsp;&emsp;DragonOS目前支持的文件系统包括:
89
90- FAT文件系统(FAT12、FAT16、FAT32)
91- DevFS
92- ProcFS
93- RamFS
94