前言
大家好,我是姚宇飞,非常高兴能参与到这次 os tutorial summer of code 的活动中来。我来自哈尔滨工业大学(深圳),目前大二。
在参加这次活动之前,我虽然对rust和risc-v并没有过多了解,但是我却对操作系统有着浓厚的兴趣,在学校还没有学习到相关内容之前,我就已经自学了os原理和linux内核设计
总体上来说,这次的第一阶段学习过程还算顺利,初步学习了Rust并且了解了 RISC-V 指令集的实现。从零开始,一步一步完成了一个简单os的设计,我还尝试为实验提供的os代码进行了自己的改进和功能添加
以下是每个阶段的总结,也希望和大家分享一些自己的学习经验。
自学rust编程
这部分我参考了《rust编程之道》,《由浅入深》以及learn by examples,以及按照项目要求完成了 rustlings 以及一些笨办法系列和leetcode的练习。
由于Rust一开始就是一门奔着良好安全性的语言,作为现代语言,他是精心设计过的,也因此会更加难以熟练一些。但是这一切的复杂都保证了程序的安全性很高,特别适合拿来进行os的设计。
rust 的基本语法难度不大,初学过程中主要难点就是生命周期和所有权引用问题。好在后期操作系统的实践过程中并没有涉及到许多Rust语法的小trick,大部分内容都可以通过现查api来解决。
实验中也使用了一些关于裸指针和不安全代码部分。
RISC-V 学习
这部分我参考的是《RISC-V 手册 一本开源指令集的指南》,由于我具有一定的mips基础,所以我仅仅使用了很少的时间去看这块内容,只是做了基本了解。
可以看出,RISC-V是一个很优秀的处理器架构,具有RISC系列精简指令集的各种优点,而且还可以进行模块扩展。
对于我们的实验,需要关注的就是特权架构相关的部分,包括M/S/U模式,异常处理,以及虚拟内存和分页方案的部分。
rCore Tutorial 实验部分
这一部分是这次第一阶段实习的最主要部分,前面的内容只是为了做铺垫。
我主要分为了三个部分去完成
1.实验总体框架的建立
根据实验指导书和辅助代码,我一步一步按照lab搭建并跑通了实验内容,对整个rcore内核进行一个最基本的摸排
2.os模块分析和细节深入
这一部分我重新按照各个文件夹的功能的不同进行重新整理,分析并梳理了各个结构或者函数的作用,并且对语法也进行了一定分析
3.os的改进
这一部分我实现了一个基于优先级分配时间片的调度算法和虚拟内存置换器
一些感想
- 通过这个实习,我基本了解了Rust语法,Risc-V以及简单os的设计
- 学会了github的使用
- 非常感谢老师同学们对我的帮助