0%

2023秋开源操作系统训练营第二阶段小结-r27153733

第一阶段

一阶段的rustlings是挺好的rust入门题目,也是没有什么阻碍的完成了100道题。

第二阶段

lab1

这一个lab没什么难度,实现taskinfo不需要太多os相关的知识。

lab2

这一个lab开始上强度了,需要弄懂很多os知识。

关于sys_get_timesys_task_info,题目有提到splitted by two pages问题,但是直接整个转换成物理地址写入也能过测试,

我理解的处理splitted by two pages的方法是,对每一个字段,获取他的物理地址,然后写入。

或者像buffers那样,直接逐字节拷贝进Vec<&'static mut [u8]>

不知道上面的方法是否正确。

关于mmapmunmap,本来是想保存在MemorySet.areas下,但是考虑到回收的内存段可能是分配的内存段的子集,要实现MapArea的分裂,还有性能问题,

就直接在MemorySet下挂一个btree管理了(感觉在mmap这种需求下抽象成MapArea反而是一种负担)。

lab3

lab3感觉比lab2简单,spwan直接复用TaskControlBlock::new再进行一些操作,stride也是采用了简单的实现。

本来想实现,即使stride溢出,也能选择正确的程序(无符号相减,结果转有符号与0比),因为时间问题直接用u64解决咕咕咕了。

补充

感觉test还是少了。