以上这段代码里定义了两个非常重要的宏,即SAVE_ALL和RESTORE_ALL
SAVE_ALL先保存用户模式的寄存器和堆栈信息,然后切换到内核模式,宏__SWITCH_KERNELSPACE实现地址空间的转换RESTORE_ALL的过程过SAVE_ALL的过程正好相反。
在内核原代码里有一个系统调用表:(entry.S的文件里)
在2.6.5的内核里,有280多个系统调用,这些系统调用的名称全部在这个系统调用表里。
在这个原文件里,还有非常重要的一段。
这一段完成系统调用的执行。
system_call函数根据用户传来的系统调用号,在系统调用表里找到对应的系统调用再执行。
从glibc的函数到系统调用还有一个很重要的环节就是系统调用号。
系统调用号的定义在include/asm-i386/unistd.h里