1:::{note} 2本文作者: 龙进 3 4Email: <longjin@DragonOS.org> 5::: 6 7# 概述 8 9  在本文中,我们将介绍DragonOS文件系统的架构设计。 10 11## 总览 12 13  如下图所示,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 └───────────────────────┬─────────────────────────┘ 29 │ 30 │ 31 VFS: ┌──────▼─────┐ 32 │ │ 33 │ File │ 34 │ │ 35 └──────┬─────┘ 36 │ 37 ┌────────▼────────┐ 38 │ │ 39 │ MountFS │ 40 │ │ 41 └────┬────────────┘ 42 │ 43 Filesystems: ┌─────────────┼─────────────┬────────────┐ 44 │ │ │ │ 45 ┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼────┐ ┌─────▼─────┐ 46 │ │ │ │ │ │ │ │ 47 │ FAT │ │ DevFS │ │ ProcFS │ │ RamFS │ 48 │ │ │ │ │ │ │ │ 49 └───────────┘ └───────────┘ └──────────┘ └───────────┘ 50``` 51 52## 系统调用接口 53 54  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  关于接口的具体含义,可以参考 [DragonOS系统调用接口](../../syscall_api/index.rst)。 71 72## 虚拟文件系统(VFS) 73 74  VFS是DragonOS文件系统的核心,它提供了一套统一的文件系统接口,使得DragonOS可以支持多种不同的文件系统。VFS的主要功能包括: 75 76- 提供统一的文件系统接口 77- 提供文件系统的挂载和卸载机制(MountFS) 78- 提供文件抽象(File) 79- 提供文件系统的抽象(FileSystem) 80- 提供IndexNode抽象 81- 提供文件系统的缓存、同步机制(尚未实现) 82 83 84  关于VFS的详细介绍,请见[DragonOS虚拟文件系统](vfs/index.rst)。 85 86## 具体的文件系统 87 88  DragonOS目前支持的文件系统包括: 89 90- FAT文件系统(FAT12、FAT16、FAT32) 91- DevFS 92- ProcFS 93- RamFS 94