Gar*_*Yin 4 linux x86 assembly
旧的linux版本使用"int 0x80"指令来实现系统调用,后来的版本使用"SYSENTER/SYSEXIT"指令来执行此操作.
通过"int 0x80"转移到环0后,cpu处于中断上下文中,禁止中断.但是"SYSENTER/SYSEXIT"不会产生"中断上下文",也不会禁用中断.
这种差异是否会导致系统调用出现问题?
接到电话的人很清楚发生了什么,并且必须应对.请记住,中断是警告系统需要紧急注意的事情的方法,最好尽快处理.由于事件处理延迟,禁用中断会降低性能.英特尔不久前添加了新的指令SYSENTER/SYSEXIT指令,以提供更快/更简单的系统调用处理,Linux几乎立即开始使用它们.
从历史的角度来看,计算机过去只有一个CPU.禁用它们的中断是一种确保互斥的(残酷)方式:只要中断被禁用,没有任何事情(几乎没有例外)可能会干扰,因为没有其他任何事情可能发生.因此强制中断是完成系统调用的一种简单方法,具有确保无干扰的额外好处.对于多CPU机器(甚至是手机!),禁用CPU处理电话的中断很少,其他人可以继续并践踏您的工作.在整个系统范围内禁用中断的成本很高,而只是为了确保相互排斥而停止整个系统是疯狂的.当前版本的Linux使用复杂的同步技术来避免这种严厉的方法,如果可能的话.因此,防止中断的保护不再那么重要了.