03月30, 2019

金枪鱼之夜 - rCore: a Linux compatible teaching operating system in Rust

好久没参加tunight了,今天去听杰哥讲用Rust写的OS,收获很大。现记录一下学到的东西。

杰哥是学Stanford CS140e课之后打算参与rCore的开发的。

  • Hex Packet Decoder,解析网络包的网站。
  • 有人用Go写了操作系统(OSDI 18: The benefits and costs of writing a POSIX kernel in a high-level language)。
  • 现在比较新的中断控制器是MSI(X),我之前那个OS用的是8259A,后来是想用APIC代替8253 timer和PIC,其实我已经对这些东西有点晕了,不过似乎也没必要用了。以后会把这个坑填上。
  • 一个OJ叫评测鸭,是贵系某同学搞的,跑在自己写的OS上。
  • netns,虚拟化网络设备
  • ld应该是GCC里collect2组件的一个wrapper。
  • QEMU的一些快捷键,比如CTRL+A X退出之类的,调试的时候方便,回头试试。
  • rCore似乎用的是BusyBox。WXC之前好像讲过这玩意,还有musl和alpine。rCore也用了musl。
  • dig,以前一直没想起来用。需要IP的话比ping少个字母。
  • QEMU的monitor可以调试很多东西,比较方便,比如info registers

对于rCore,我问了些问题:

  • 为什么用Rust:相比C更严格。不过Stanford CS140e又要改回C了,据说因为斯坦福只有这老师一个人会Rust。
  • shell怎么弄的:自己写的,判断命令直接fork进程执行。
  • 文件系统怎么弄的:自己写的,跟uCore类似,简单的inode搞搞。

最主要的收获是,我原本写的OS遇到跳转中断服务例程的时候直接挂掉的问题不知道怎么调试了,因为gdb只能精确到汇编级。杰哥提供了一个方案,可以改QEMU的源码,在模拟CPU的执行过程的代码处加printf。杰哥说他这么调试过,QEMU编译很快,只要一两分钟。回头可以试试,可以不用弃坑了Orz。

本文链接:https://diary.fanzheng.org/post/2019-03-30.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。