lez*_*lon 0 linux system-calls linux-kernel
我试图了解使用中断的“旧”系统调用机制与当前依赖特定处理器指令的系统调用机制之间的区别。
AFAIK 在 C 程序方面的工作方式相同:即调用内核 C 函数,然后分派到正确的系统调用处理程序。那么,是什么让“新的”系统调用系统更加高效?
仅仅是因为更高效的处理器指令使调用“系统调用”比“中断”更快吗?与系统调用本身必须执行的工作量(即写入文件)相比,这种时间差异是否足够显着?
它们更快,因为它们要做的工作少得多,而且因为它们不需要从内存中读取。
当您使用软件中断发出系统调用时,CPU 不知道您在做什么。它需要从中断描述符表中读取目标 CS 和 EIP 值。CS 的值指定了目标权限级别是什么;一旦 CPU 计算出这一点,它就需要确定目标状态是什么,这涉及更多的内存读取。
SYSCALL
另一方面是完全基于寄存器的;目标特权级别提前已知,目标状态由内核设置的 MSR 指定。
与某些系统调用的持续时间相比,速度差异很小,但有许多快速系统调用。当然,整个 KPTI 业务意味着所有系统调用都很慢,但从中获得的速度增益SYSCALL
仍然值得拥有。
归档时间: |
|
查看次数: |
294 次 |
最近记录: |