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.

173 lines
4.5 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.

# OS中期报告——RustOS for x86_64 SMP
2018.04.12
王润基 朱书聪
---
## 选题概述
* 将ucore用Rust重写使之更加安全和模块化。
* 参考sv6进行SMP优化使用Commuter进行测试。
---
### Why Rust?
* 系统级编程语言
* 安全内存管理模型,保证线程安全
* 支持不安全的底层操作能和C语言方便交互
* 零开销抽象,拥有现代语言特性
——适合编写OS适合处理并发问题
---
## 已经完成的调研工作
* Rust for RISCV
* RustOS
* 待移植/参考OS
* Rust与编写OS相关的平台特性
---
### Rust for RISCV
* RISCV-Rust-Toolchain
* Dockertarcieri/riscv-rust-toolchain
* 与之配合的开发环境riscv-crates
* 目前无法编译,还在开发中
鉴于这套工具链刚刚诞生非常不稳定坑太多因此我们不再考虑移植到RISCV。
---
### RustOS
* 《Writing an OS in Rust》& blog_os
* 从零开始写RustOS的教程平台x86_64
* 目前实现了Boot页式内存管理中断管理
* 已经读完了全部文章能够在本机和Docker中编译运行
* Redox
* 完成度最高的RustOS微内核架构平台x86_64
* 有GUI有自己的FS有用户程序开发环境
* 正在阅读kernel代码已经在Docker中完成编译
---
### 待移植/参考OS
* xv6ucore的起源项目非常精简但支持SMP。用来理解OS的整体运行机制。
* xv6 x86_64对比与xv6的不同参考其x86_64的实现。
* ucore_os_lab待移植的主体。
* ucore_plus参考其x86_64的实现。
* sv6参考其多核优化的实现。
---
### Rust与编写OS相关的平台特性
#### 库:
* 标准库std ×核心库core √
* core提供了最基础的语言特性支持字符串格式化输出等基础函数只需指定全局内存分配器即可享用Vec/Box等大量内置数据结构
#### 内联汇编:
* 格式类似C语言
* x86(_64)已经有封装好的库,无需手动编写
---
#### Rust-C互操作
* C语言绑定
* bindgen工具自动生成C模块的Rust接口
* 直接导入符号
* C对Rust的绑定
* 通过简单的`extern "C"`+`no_mangle`即可完成
* C直接生成RustCorrode
* 在macOS上尝试构建失败
* Port C to Rust 经验谈:
* https://github.com/carols10cents/rust-out-your-c-talk
---
* 测试:
* `cargo test`单元测试,`cargo bench`性能测试
* 由于OS运行在qemu环境中因此无法使用这个测试框架
* 但已经在Travis上配置了集成测试类似ucore
* 可以把不依赖OS环境的模块提取成crate就可以测试了
* 坑:
* 除了经常过不了编译以外,还没遇到大坑。
* Rust大法好。
---
## 已经完成的编码工作
* 准备开发环境
根据对RustOS的调研情况我们计划直接在blog_os的基础上进行开发。目前已经配置好了本地环境DockerTravis。
* 熟悉Rust语言和生态特性
实现了C语言绑定在线集成测试。
已经完成了一些OS底层驱动的移植VGASerialACPI
---
![](./WX20180412-194650@2x.png)
---
## 接下来需要做的工作
### 综述
blog_os只实现了页式内存管理和中断提供了一个RustOS的基础框架。在此基础上针对ucore的每个lab还需补全以下内容
* **lab1**
* 修改虚拟地址的映射使之与ucore匹配。
* 补全底层驱动键盘、串口、APIC重点是能产生时钟中断。
* 这部分大都是直接操作内存可以直接链接C代码以尽快跑起来之后再用Rust重写。
---
* lab2/3内存管理
* 物理内存分配器目前只分配不回收,需要完善
* 页式内存管理没有实现替换机制,需要实现
*注:由于只是要完善,不影响后面的工作*
* **lab4/5/6进程管理**
* 进程管理和调度需要重新设计、整体移植
* lab7同步互斥
* 基本的同步机制Rust标准库已经提供
* **lab8文件系统**
* 对底层依赖不大可以独立出去完成参考Redox的FS
支持SMP主要依赖进程管理模块文件系统部分委托合作小组完成。
---
### 分工
* 王润基主要负责前期ucore移植
* 朱书聪主要负责后期SMP优化
---
### 计划
* Week7完成底层硬件的移植能跑lab1
* Week8完善物理/虚拟内存管理能跑lab2/3
* Week9移植内核线程、用户进程、调度能跑lab4/5/6
* Week10支持SMP配置Commuter生成代码
* Week11-13SMP优化