64位系统调用的过程,
使用了特殊的指令syscall(加载msr到rip),该指令将cpu ring从3变为0,并执行保存在MST_LSTAR的syscall函数的地址。
wrmsrl(MSR_LSTAR, (unsigned long)entry_SYSCALL_64)
entry_SYSCALL_64_after_hwframe(汇编)
查找到系统调用号与函数的对应表
do_syscall_64 -> syscall_tablenr完成系统调用
完成后,调用prepare_exit_to_usermode和
USERREG_SYSRET64 swapgs sysretq 返回用户态
相比于32位时int 80中断的模式,效率上应该会好很多。
总结
64位相对于32位系统,多使用了一个特殊模块寄存器,不使用中断,效率上应该高很多。