为什么系统调用比普通的函数调用更耗时?用户态和内核态切换的代价在哪?


为什么系统调用比普通函数调用耗时?如果是因为需要用户态和内核态的切换,那么这个切换具体做了什么,哪些步骤代价大呢?

操作系统 Linux linux编程

zakulu 10 years, 9 months ago

当程序中有系统调用语句,程序执行到系统调用时,首先使用类似 int 80H 的软中断指令,保存现场,去的系统调用号,在内核态执行,然后恢复现场,每个进程都会有两个栈,一个内核态栈和一个用户态栈。当执行int中断执行时就会由用户态,栈转向内核栈。系统调用时需要进行栈的切换。而且内核代码对用户不信任,需要进行额外的检查。系统调用的返回过程有很多额外工作,比如检查是否需要调度等。

qiuzero answered 10 years, 9 months ago

Your Answer