第一阶段
一阶段的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还是少了。