较旧的linux版本使用“int 0x80”指令来实现系统调用,而较新的版本使用“SYSENTER/SYSEXIT”指令来实现。

通过“int 0x80”传输到环0后,cpu处于中断上下文,并且禁用了中断。但是“SYSENTER/SYSEXIT”不会产生“中断上下文”,并且不会禁用中断。

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

最佳答案

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

从历史的 Angular 来看,计算机以前只有一个CPU。禁用中断是确保相互排斥的一种(残酷的)方式:只要禁用了中断,就不会有任何干扰(几乎没有异常(exception)),因为不会发生任何其他事情。因此,强制中断是完成系统调用的一种简单方法,并具有确保无干扰的额外好处。使用多CPU机器(甚至是手机!),在CPU上禁用中断来处理 call 的购买很少,其他人可以继续进行并践踏您的工作。在整个系统范围内禁用中断是很昂贵的,并且仅停止整个系统只是为了确保相互排斥是疯狂的。当前版本的Linux使用复杂的同步技术来尽可能避免使用繁琐的方法。因此,针对中断的保护已不再那么重要。

08-16 10:42