Linux SYSENTER/SYSEXIT vs INT 0x80

Linux SYSENTER/SYSEXIT vs INT 0x80,linux,assembly,x86,Linux,Assembly,X86,旧的linux版本使用“int0x80”指令来实现系统调用,更高版本使用“syscenter/SYSEXIT”指令来实现 通过“int 0x80”传输到环0后,cpu处于中断上下文中,中断被禁用。但“SYSENTER/SYSEXIT”不会产生“中断上下文”,中断也不会被禁用 这种差异会导致系统调用出现问题吗?无论谁接到调用,都清楚发生了什么,必须应对。请记住,中断是提醒系统出现需要紧急注意的事情的一种方式,最好尽快处理。禁用中断会降低性能,因为事件处理会延迟。不久前,intel添加了新指令SYS

旧的linux版本使用“int0x80”指令来实现系统调用,更高版本使用“syscenter/SYSEXIT”指令来实现

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


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

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


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

我怀疑Linux继续运行良好且可靠的事实可能表明交换机没有引起任何问题(或者任何出现的问题都已得到处理)……但正如我所知,Linux在自动进入中断处理程序时会做一些关键的事情(中断被禁用),重置工作通过称为“behind half machinasim”的软件中断进行安排,该中断不需要是原子代码。“不久前”--奔腾II于1997年发布,是第一个支持SysCenter的英特尔CPU。当前的x86或x64系统都不缺少这些指令,