Skip to content

entry to the kernel

进入内核的代码都包含在 entry.S 中,应该说是进入内核的所有入口都在这里。只看了系统调用相关的代码,在进入内核的时候进行用户栈到内核栈的切换,然后就是将相关的上下文保存到了内核栈中。但是让我比较惊奇的是,在进行上下文切换的时候,只保存了整数相关的寄存器,浮点相关的寄存器和向量寄存器没有看到保存,后来发现这是内核的 Lazy FPU Save/Restore 机制,即默认内核处理的时候不会用到浮点和向量,在进入内核的时候设置浮点和向量不可用。当内核里面真正的使用到了浮点和向量的时候,cpu 触发一个 NM(Device Not Available)异常,上下文被保存,同时这些向量应该变得可用。

机制应该就是这样进入和退出是逆过程,具体的复杂程度在具体的系统调用实现中。