From 45b8371173b070028457f7ee64be33f68b4f9ada Mon Sep 17 00:00:00 2001 From: login Date: Sat, 25 Mar 2023 14:51:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EVFS=E6=96=87=E6=A1=A3?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20(#209)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 1.新增vfs设计文档 2.修改文档版权标志为"2022-2023, DragonOS Community" 3.修改电脑版文档页面的宽度为90% * layout.html末尾加空行 --- docs/_templates/layout.html | 8 +++ docs/conf.py | 4 +- docs/introduction/build_system.md | 2 +- docs/kernel/filesystem/index.rst | 1 + docs/kernel/filesystem/overview.md | 93 ++++++++++++++++++++++++++ docs/kernel/filesystem/vfs/api.md | 3 - docs/kernel/filesystem/vfs/design.md | 58 ++++++++++++++++ docs/kernel/filesystem/vfs/index.rst | 12 +++- docs/kernel/filesystem/vfs/overview.md | 11 --- docs/syscall_api/index.rst | 2 + 10 files changed, 176 insertions(+), 18 deletions(-) create mode 100644 docs/_templates/layout.html create mode 100644 docs/kernel/filesystem/overview.md create mode 100644 docs/kernel/filesystem/vfs/design.md delete mode 100644 docs/kernel/filesystem/vfs/overview.md diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html new file mode 100644 index 00000000..c6794aca --- /dev/null +++ b/docs/_templates/layout.html @@ -0,0 +1,8 @@ +{% extends "!layout.html" %} + {% block footer %} {{ super() }} + + + +{% endblock %} diff --git a/docs/conf.py b/docs/conf.py index 4d3b0988..a772f3d6 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,8 +18,8 @@ # -- Project information ----------------------------------------------------- project = 'DragonOS' -copyright = '2022, fslongjin' -author = 'fslongjin' +copyright = '2022-2023, DragonOS Community' +author = 'longjin' # The full version, including alpha/beta/rc tags release = 'dev' diff --git a/docs/introduction/build_system.md b/docs/introduction/build_system.md index 83087462..f3774d0b 100644 --- a/docs/introduction/build_system.md +++ b/docs/introduction/build_system.md @@ -146,7 +146,7 @@ sudo chown $USR /dev/kvm   假设您的计算机上已经安装了git,您可以通过以下命令,获得DragonOS的最新的源代码: ```shell -git clone https://github.com/fslongjin/DragonOS +git clone https://github.com/DragonOS-Community/DragonOS cd DragonOS ``` diff --git a/docs/kernel/filesystem/index.rst b/docs/kernel/filesystem/index.rst index 73061581..7233e385 100644 --- a/docs/kernel/filesystem/index.rst +++ b/docs/kernel/filesystem/index.rst @@ -9,5 +9,6 @@ todo: 由于文件系统模块重构,文档暂时不可用,预计在2023年4 :maxdepth: 1 :caption: 目录 + overview vfs/index diff --git a/docs/kernel/filesystem/overview.md b/docs/kernel/filesystem/overview.md new file mode 100644 index 00000000..1238f5a8 --- /dev/null +++ b/docs/kernel/filesystem/overview.md @@ -0,0 +1,93 @@ +:::{note} +本文作者: 龙进 + +Email: +::: + +# 概述 + +  在本文中,我们将介绍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 diff --git a/docs/kernel/filesystem/vfs/api.md b/docs/kernel/filesystem/vfs/api.md index cd271716..9df9e38e 100644 --- a/docs/kernel/filesystem/vfs/api.md +++ b/docs/kernel/filesystem/vfs/api.md @@ -1,4 +1 @@ # VFS API文档 - - - diff --git a/docs/kernel/filesystem/vfs/design.md b/docs/kernel/filesystem/vfs/design.md new file mode 100644 index 00000000..ab4ade62 --- /dev/null +++ b/docs/kernel/filesystem/vfs/design.md @@ -0,0 +1,58 @@ +:::{note} +本文作者: 龙进 + +Email: +::: + +# 设计 + + +  VFS的架构设计如下图所示: + +```text + ┌─────────┐ + │ │ + │ read │ + File │ │ + │ write │ + │ │ │ + │ │ ioctl │ + │ │ │ + │ │ lseek │ + │ │ │ + │ │ etc.. │ + │ └─────────┘ + │ + ▼ ┌──────────────────────────────────────────────────────────────────────────────┐ + MountFS │ Maintain the mount tree and handle the mounting of file systems. │ + │ │ In particular, it handles the "crossing file system boundaries" condition │ + │ │ while doing "lookup" or "find" operations. │ + │ └──────────────────────────────────────────────────────────────────────────────┘ + │ + │ + │ +Filesystems: │ + │ + ▼ ┌────────────────────────────────────────────────────────────────────┐ + xxxFSInode │ Implement corresponding operations based on different file systems │ + └────────────────────────────────────────────────────────────────────┘ +``` + +## 1. File +  File结构体是VFS中最基本的抽象,它代表了一个打开的文件。每当进程打开了一个文件,就会创建一个File结构体,用于维护该文件的状态信息。 + +## 2. Traits + +  对于每个具体文件系统,都需要实现以下的trait: + +- FileSystem:表明某个struct是一个文件系统 +- IndexNode: 表明某个struct是一个索引节点 + +  一般情况下,FileSystem和IndexNode是一对一的关系,也就是,一个文件系统对应一种IndexNode。但是,对于某些特殊的文件系统,比如DevFS,根据不同的设备类型,会有不同的IndexNode,因此,FileSystem和IndexNode是一对多的关系。 + +## 3. MountFS + +  挂载文件系统虽然实现了FileSystem和IndexNode这两个trait,但它并不是一个“文件系统”,而是一种机制,用于将不同的文件系统挂载到同一个文件系统树上. +所有的文件系统要挂载到文件系统树上,都需要通过MountFS来完成。也就是说,挂载树上的每个文件系统结构体的外面,都套了一层MountFS结构体。 + +  对于大部分的操作,MountFS都是直接转发给具体的文件系统,而不做任何处理。同时,为了支持跨文件系统的操作,比如在目录树上查找,每次lookup操作或者是find操作,都会通过MountFSInode的对应方法,判断当前inode是否为挂载点,并对挂载点进行特殊处理。如果发现操作跨越了具体文件系统的边界,MountFS就会将操作转发给下一个文件系统,并执行Inode替换。这个功能的实现,也是通过在普通的Inode结构体外面,套一层MountFSInode结构体来实现的。 diff --git a/docs/kernel/filesystem/vfs/index.rst b/docs/kernel/filesystem/vfs/index.rst index 8d9ee96f..4e29346f 100644 --- a/docs/kernel/filesystem/vfs/index.rst +++ b/docs/kernel/filesystem/vfs/index.rst @@ -4,10 +4,20 @@ VFS虚拟文件系统 在DragonOS中,VFS作为适配器,遮住了具体文件系统之间的差异,对外提供统一的文件操作接口抽象。 +VFS是DragonOS文件系统的核心,它提供了一套统一的文件系统接口,使得DragonOS可以支持多种不同的文件系统。VFS的主要功能包括: + +- 提供统一的文件系统接口 +- 提供文件系统的挂载和卸载机制(MountFS) +- 提供文件抽象(File) +- 提供文件系统的抽象(FileSystem) +- 提供IndexNode抽象 +- 提供文件系统的缓存、同步机制(尚未实现) + + .. toctree:: :maxdepth: 1 :caption: 目录 - overview + design api diff --git a/docs/kernel/filesystem/vfs/overview.md b/docs/kernel/filesystem/vfs/overview.md deleted file mode 100644 index 30bd7b21..00000000 --- a/docs/kernel/filesystem/vfs/overview.md +++ /dev/null @@ -1,11 +0,0 @@ -# DragonOS虚拟文件系统概述 - -## 简介 - -  DragonOS的虚拟文件系统是内核中的一层适配器,为用户程序(或者是系统程序)提供了通用的文件系统接口。同时对内核中的不同文件系统提供了统一的抽象。各种具体的文件系统可以挂载到VFS的框架之中。 - -  与VFS相关的系统调用有open(), read(), write(), create()等。 - -## **TODO** - -  VFS的设计与实现讲解 \ No newline at end of file diff --git a/docs/syscall_api/index.rst b/docs/syscall_api/index.rst index cd9eb95b..1145e005 100644 --- a/docs/syscall_api/index.rst +++ b/docs/syscall_api/index.rst @@ -1,3 +1,5 @@ +.. _syscall_api: + 系统调用API ====================================