rcore-os / rCore_tutorial_doc

Tutorial doc for rCore OS step by step (2nd edition)
https://rcore-os.github.io/rCore_tutorial_doc/
64 stars 16 forks source link

内核线程初始化 · GitBook #56

Open chyyuu opened 4 years ago

chyyuu commented 4 years ago

https://rcore-os.github.io/rCore_tutorial_doc/chapter6/part3.html

function2-llx commented 4 years ago

倒数第二个代码块上方的公式角标好像没有用大括号括起来。

moon548834 commented 4 years ago

__trapret 仅仅是利用它来设置寄存器的初始值

有一点不解,这里我理解其实实际上__trapret恢复了所有寄存器还有几个CSR,但实际上并不需要恢复所有的寄存器,只需要恢复设置的下面代码块涉及的寄存器就可以了:

                let mut tf: TrapFrame = unsafe { zeroed() };
                tf.x[2] = kstack_top;
                tf.sepc = entry;
                tf.sstatus = sstatus::read();
                tf.sstatus.set_spp(sstatus::SPP::Supervisor);
                tf.sstatus.set_spie(true);
                tf.sstatus.set_sie(false);
                tf

所以作者使用__trapret是为了方便起见,直接恢复整个中断帧,虽然多恢复了一些,但这样可以直接借用,而不需要重新写一段了,我的理解正确吗?