第一阶段
一阶段的rustlings
是挺好的rust入门题目,也是没有什么阻碍的完成了100道题。
第二阶段
lab1
这一个lab没什么难度,实现taskinfo
不需要太多os
相关的知识。
lab2
这一个lab开始上强度了,需要弄懂很多os
知识。
关于sys_get_time
和sys_task_info
,题目有提到splitted by two pages
问题,但是直接整个转换成物理地址写入也能过测试,
我理解的处理splitted by two pages
的方法是,对每一个字段,获取他的物理地址,然后写入。
或者像buffers
那样,直接逐字节拷贝进Vec<&'static mut [u8]>
。
不知道上面的方法是否正确。
关于mmap
和munmap
,本来是想保存在MemorySet.areas
下,但是考虑到回收的内存段可能是分配的内存段的子集,要实现MapArea
的分裂,还有性能问题,
就直接在MemorySet
下挂一个btree
管理了(感觉在mmap
这种需求下抽象成MapArea
反而是一种负担)。
lab3
lab3
感觉比lab2
简单,spwan
直接复用TaskControlBlock::new
再进行一些操作,stride
也是采用了简单的实现。
本来想实现,即使stride
溢出,也能选择正确的程序(无符号相减,结果转有符号与0比),因为时间问题直接用u64
解决咕咕咕了。
补充
感觉test
还是少了。