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.

2.2 KiB

SimpleFileSystem Rust移植报告

王润基 2018.05.05

任务目标

  • 用Rust重新实现SFS模块力求精简
  • 以crate库的形式发布不依赖OS支持单元测试
  • 导出兼容ucore的C接口能链接到ucore lab8中替换原有实现
  • 在RustOS中使用

结构设计

自底向上:

硬盘数据结构层

和SFS在硬盘上具体的存储结构相关。位于structs.rs

这部分定义了硬盘上的数据结构完全照搬C中的定义并实现了一些Rust辅助方法。

SFS层

和SFS在内存中的对象相关。位于sfs.rs

这部分主要定义了两个对象:SimpleFileSystemINode

它们依赖下层的具体结构实现上层VFS的接口完成具体的文件操作。

由于利用了Rust的一些模块的特性这两个结构体的定义和C中很不一样。

VFS层

文件系统通用接口。位于vfs.rs

这部分主要定义了三个接口:FileSystemINodeDevice

其中前两个是需要具体文件系统实现的。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等周边工具
  • 多线程支持及并行优化