SYSENTER / SYSEXIT与INT 0x80

时间:2014-03-07 15:47:27

标签: linux assembly x86

旧的linux版本使用“int 0x80”指令来实现系统调用,后来的版本使用“SYSENTER / SYSEXIT”指令来执行此操作。

通过“int 0x80”转移到环0后,cpu处于中断上下文中,禁止中断。但是“SYSENTER / SYSEXIT”不会产生“中断上下文”,也不会禁用中断。

这种差异是否会导致系统调用出现问题?

1 个答案:

答案 0 :(得分:5)

接到电话的人都很清楚发生了什么,并且必须应对。请记住,中断是提醒系统需要紧急注意的事情的方法,最好尽快处理。由于事件处理延迟,禁用中断会降低性能。英特尔不久前添加了新的指令SYSENTER / SYSEXIT指令,以提供更快/更简单的系统调用处理,Linux几乎立即开始使用它们。

从历史角度来看,计算机过去只有一个CPU。禁用它们的中断是一种确保互斥的(残酷)方式:只要中断被禁用,没有(几乎没有例外)可能会干扰,因为没有其他任何事情可能发生。因此强制中断是完成系统调用的一种简单方法,具有确保无干扰的额外好处。对于多CPU机器(甚至是手机!),禁用CPU处理电话的中断很少,其他人可以继续并践踏您的工作。在整个系统范围内禁用中断的成本很高,而只是为了确保相互排斥而停止整个系统是疯狂的。当前版本的Linux使用复杂的同步技术来避免这种严厉的方法,如果可能的话。因此,防止中断的保护不再那么重要了。