You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# SimpleFileSystem Rust移植报告
王润基 2018.05.05
## 任务目标
* 用Rust重新实现SFS模块力求精简
* 以crate库的形式发布不依赖OS支持单元测试
* 导出兼容ucore的C接口能链接到ucore lab8中替换原有实现
* 在RustOS中使用
## 结构设计
自底向上:
#### 硬盘数据结构层
和SFS在硬盘上具体的存储结构相关。位于`structs.rs`。
这部分定义了硬盘上的数据结构完全照搬C中的定义并实现了一些Rust辅助方法。
#### SFS层
和SFS在内存中的对象相关。位于`sfs.rs`。
这部分主要定义了两个对象:`SimpleFileSystem`和`INode`。
它们依赖下层的具体结构实现上层VFS的接口完成具体的文件操作。
由于利用了Rust的一些模块的特性这两个结构体的定义和C中很不一样。
#### VFS层
文件系统通用接口。位于`vfs.rs`。
这部分主要定义了三个接口:`FileSystem``INode``Device`。
其中前两个是需要具体文件系统实现的。Device是依赖项提供读写方法。
它们基本照搬C中的定义但换成了Rust风格更加本质。
由于C在语言层面缺乏对接口的支持ucore中是用struct和函数指针实现接口功能。但在Rust中就是简单的Trait。
#### C兼容层
将Rust风格的VFS导出为ucore可用的C接口。位于`c_interface.rs`。
这部分导入了ucore中`stat` `iobuf` `device`等结构将他们实现Rust的Trait。同时将VFS层中的Trait转化成C函数接口。
除此之外还要导入ucore中的一些基础设施例如`kmalloc` `kfree` `cprintf` `panic`
## Rust带来的好处
* 利用RAII特性使用一些小Wrapper结构进行自动标记和断言大大减轻开发者心智负担。例如Mutex锁RefCell访问检查Dirty脏标记Rc引用计数。
* 从始至终严格的访问控制只要不滥用unsafe可快速并行化并保证安全。
* 语言描述能力强代码量少。对比C的SFS模块1100+行Rust只用了700+行除去单元测试和C兼容层
## 接下来的目标
* 接入ucore中能够跑起来
* 实现mksfs等周边工具
* 多线程支持及并行优化