或者换句话说:syscall
和int <kernel-interrupt-number>
之间有什么区别?
我能想到的唯一明显的原因是中断号在操作系统中不同,并且拥有一个新的,唯一的指令可以提供更高的一致性。但是,系统调用数字和参数在操作系统中仍然存在差异,因此一致性的提高非常低。
可能拦截中断需要更多的内核工作? (因此使用syscall
)
答案 0 :(得分:2)
你走在正确的轨道上; syscall
指令的动机主要是表现。您可以阅读有关此in AMD's "SYSCALL and SYSRET Instruction Specification"的更多信息。
文档中的一些摘录:
启动对操作系统,应用程序的调用 通过门描述符将控制权转移到操作系统(任务, 中断,陷阱或调用门)。控制传输通过使用完成 CALL指令或软件中断。设置这些控制门 (以及后来通过RET或IRET指令返回)是 与分段相关的开销减慢了速度。
....
SYSCALL和SYSRET是用于低延迟的指令 具有平面的操作系统中的系统调用和返回 记忆模型,没有分割。这些说明有 通过减少检查和内存的数量进行了优化 通常发出的引用,以便进行调用或返回 小于内部时钟周期数的四分之一 与当前的CALL / RET指令方法相比。