0%

2021操作系统夏令营总结-黄文禹

总结

在这次夏令营中,我主要做了几件事情:

  • Rust 编程能力的提升,通过使用 Rust 编写 OS,对 Rust 这门语言有了更进一步的掌握
  • rCore-Tutorial 的实验,通过这次实验的学习,弄明白了以前上课很多感到模糊的概念。
  • zCore 的学习和编写 zCore-Tutorial 的文档。通过 zCore 的学习,了解了什么是微内核,什么是内核对象,使用内核对象有什么好处。我主要负责编写了第三章内存管理的内容,在一开始看代码的时候对 VMO 和 VMAR 之间的关系十分模糊,在张译仁助教的帮助下对这些概念有了比较清楚的认识,顺利的完成了第三章的文档,但是我觉得这份文档在用词和一些地方的解释仍然不够清楚,我会继续学习,然后继续把这份文档进一步完善。

踩坑

在使用弱连接编写代码时候踩了一个坑,我觉得可以放进这份总结给大家提供一个参考。
出问题的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// kernel-hal
#[linkage = "weak"]
#[export_name = "hal_console_putchar"]
pub fn console_putchar(_c: usize) {
unimplemented!()
}

//kernel-hal-unix
#[export_name = "hal_console_putchar"]
pub fn console_putchar(c: usize) {
println!("{}", c);
}

// 在 main 中调用了 console_putchar

当我 cargo run 运行的时候会报:thread 'main' panicked at 'no implemented' /path/lib.rs:7:5,这个路径指向的就是 kernel-hal 中的 console_putchar()。也就是连接的时候无法连接到具体的实现上去。在寻求萧洛元和张译仁助教的帮助后,发现是因为实现的函数的库被编译器优化掉了。解决办法是:需要在 main 中直接使用一次 kernel-hal-unix 这个库。

致谢

十分感谢陈渝,向勇老师提供的这次参与夏令营的机会,能让我感受到了 OS 的魅力,让我更加坚定在研究生阶段选择这个方向作为自己的研究方向。还十分感谢张译仁等助教在夏令营阶段提供的帮助,在他们的帮助下,我顺利的完成了第一阶段和第二阶段的学习。