0%

2024秋冬季开源操作系统训练营一二阶段学习总结报告-颜熙炆

阶段一:rust语言学习阶段

作为一名C++程序员,不得不说,rust确实是让人眼前一亮。

所有权机制

rust的所有权是rust语言内存安全的重要特性之一。一块内存(或者说一个值)在任一时刻只能有一个所有者,而其他的地方只能持有这块内存的引用。并且在同一时间内,不能有多个可变借用或同时存在可变和不可变借用。生命周期机制还会在编译时检查内存的生命周期,防止野指针的出现,大大地提高了内存安全性

Option

rust的Option类型(一种枚举类型),有Some和None。这与传统意义上的NULL不同,虽然麻烦了点,但是也保证了安全,并且可读性更强。Option类型是一种显式的枚举类型,要求程序员在定义一个可能为空的值时必须使用Option类型。这种方式使得空值情况成为类型系统的一部分,强制程序员在编译时考虑到值可能不存在的情况。相较之下,Null带来的麻烦反倒会比使用它的便利来说更大一点。

阶段二:rCore OS设计实现阶段

lab1

lab1实现了get_time和get_task_info。粗略地了解了一遍现有的这个框架。

lab2

lab2实现了mmap和mumap,并且重写了lab1的两个实现。由于页表有关的知识之前已经学过了,所以也是光速完成了(自己写了给v2p,虽然后面发现已经有线程的接口可供调用了,难蚌)。

lab3

lab3实现了spawn和stride调度算法(其实压根没实现调度,本来想着先过了拿分,但是截止到这篇博客写下都还没实现)。spawn通常通过fork+exec实现,在这里就各copy一点出来就行了。

lab4

lab4实现了linkat、unlinkat、fstat等。当时写完的时候发现fstat一直无法正确的输出nlink,后来才发现是我inode_id算错了。我一直在找一个只存在于虚空之中(bushi)的inode_id。

lab5

lab5实现了死锁检测(又见到了我们熟悉的dijkstra大神的身影:指银行家算法)。虽然只是粗略地实现了semaphore的检测,但是确实让我更深入的学习了这个死锁检测算法。

其他:

参加这个训练营的时候也才大二,暑假刚看完CSAPP,在看MIT的6.s081,刚看没几节课就听说了这个训练营,不仅很好地巩固了自学时所学到的知识,还学了一门新的,非常优秀的rust语言。非常享受这种解决一个又一个挑战所带来的成就感。