1.学习ch3,初识进程结构,现在的栈被利用的不太好,是按二维数组来申请的。
2.其中有一个思考题,在schduler函数中,我们每次都从头开始寻找进程,那么下次当第一个进程yield以后,还是会从头寻找到它。所以不满足每个都运行一遍的要求
3.令我思考了比较久的一个点是:idle的ra寄存器为什么会在swtch函数中起作用?我找了很久源代码中的ra寄存器的赋值,最后并没有找到。结果使用qemu debug程序后。我发现在scheduler函数中会编写一个永久的for循环,而调用swtch函数时return address会被设置为for循环的最后一行,反汇编中也就是一条j型向后跳的指令。通过这个在下次切换至idle进程的时侯重新进入for循环,然后找到runnable,再次进行swtch。
这个问题上次已经碰到过,这次重新又温习了一次。