SYSENTER/SYSEXIT vs INT 0x80



旧的Linux版本使用" INT 0x80"指令来实现系统调用,以后的版本使用" sysenter/sysexit"指令。

通过" int 0x80"传输到环0后,CPU处于中断上下文,中断。但是" sysenter/sysexit"不会产生"中断上下文",而中断不会被禁用。

此差异会导致系统调用问题吗?

谁得到呼叫的人很清楚,并且必须应付。请记住,中断是一种提醒系统需要紧急关注的方法,最好尽快处理。随着事件处理的延迟,禁用中断会降低性能。不久前,英特尔添加了新的说明sysenter/sysexit说明,以提供更快/更简单的系统呼叫处理,Linux几乎立即开始使用它们。

对于一些历史的角度,计算机曾经有一个CPU。禁用它们的中断是确保相互排斥的(残酷的)方式:只要中断被禁用, nothing (几乎没有例外)可能会干扰,因为没有其他事情可能发生。因此,强迫中断是一种完成系统调用的简单方法,具有确保不干扰的额外好处。使用多CPU机器(甚至是手机!),在CPU上打断了打断通话的中断很少,其他人则可以继续进行工作。在整个系统范围内禁用中断是昂贵的,只是停止整个系统只是为了确保相互排斥是疯狂的。当前版本的Linux使用复杂的同步技术,以避免使用这种重型方法。因此,防止中断的保护已经不再那么重要了。

最新更新