2

或者,换句话说:syscall和之间有什么区别int <kernel-interrupt-number>

我能想到的唯一明显原因是中断号因操作系统而异,并且拥有一个新的、独特的指令可以提供更高的一致性。然而,系统调用的数量和参数仍然因操作系统而异,因此一致性的增益非常低。

可能拦截中断需要内核做更多的工作?(因此使用 有性能提升syscall

4

1 回答 1

2

你在正确的轨道上;教学的动机syscall主要是表现。您可以在 AMD 的“SYSCALL 和 SYSRET 指令规范”中阅读更多相关信息。

文档的一些摘录:

为了启动对操作系统的调用,应用程序通过门描述符(任务、中断、陷阱或调用门)将控制权转移给操作系统。通过使用 CALL 指令或软件中断来完成控制传输。与分段相关的开销会减慢设置这些控制门(以及稍后通过 RET 或 IRET 指令返回)的速度。
……
SYSCALL 和 SYSRET 是用于低延迟系统调用和在具有平坦内存模型且无分段的操作系统中返回的指令。这些指令已通过减少通常进行的检查和内存引用的数量进行了优化,因此与当前的 CALL/RET 指令方法相比,调用或返回所需的内部时钟周期数不到四分之一。

于 2013-06-25T11:11:21.677 回答