Operating system 为什么我应该尽量减少在代码中使用系统调用?
我想知道是否有任何理由最小化代码中系统调用的使用,以及不使用系统调用的替代方法是什么,有人会说使用API,但API反过来使用系统调用Operating system 为什么我应该尽量减少在代码中使用系统调用?,operating-system,system-calls,Operating System,System Calls,我想知道是否有任何理由最小化代码中系统调用的使用,以及不使用系统调用的替代方法是什么,有人会说使用API,但API反过来使用系统调用 这是真的吗???因为大多数系统调用都有固有的开销。系统调用是进入内核的一种手段,内核是获得某种服务的受控网关 执行系统调用时,会执行一些操作(警告,这是一种简化): 调用库(包装器)函数 函数将参数放在预期的位置。该函数还将系统调用的编号放入eax 该函数调用一个陷阱(int0x80或其他) 处理器切换到内核模式 内核调用一些系统调用例程 寄存器保存到内核堆栈中
这是真的吗???因为大多数系统调用都有固有的开销。系统调用是进入内核的一种手段,内核是获得某种服务的受控网关 执行系统调用时,会执行一些操作(警告,这是一种简化):
- 调用库(包装器)函数
- 函数将参数放在预期的位置。该函数还将系统调用的编号放入
eax
- 该函数调用一个陷阱(
或其他)int0x80
- 处理器切换到内核模式
- 内核调用一些
例程系统调用
- 寄存器保存到内核堆栈中
- 参数被检查为有效
- 执行该操作
- 寄存器从内核堆栈中恢复
- 处理器返回到用户模式
- 函数(最终…)返回
首先,如果您使用框架或API(例如,通过使用wxWidgets而不是手动呈现windows或GNU C库),那么您的代码可以在不同的操作系统之间移植
其次,如果您使用的是API,那么如果制造商改变了操作系统的工作方式,您就不会有问题,因为API(应该)与以前一样。我现在想到的唯一原因是可移植性问题。如果使用系统调用,代码将仅在该操作系统上运行。如果您需要将同一个源代码编译到另一个操作系统,您将遇到麻烦,API可能完全不同。但是当调用API时,在这里,我们必须做更多的工作??如果我们完全省略系统调用的使用,还有一件事可以做任何工作???@AMIT当调用正常函数时,不需要涉及内核。您可以简单地认为只执行粗体部分。例如,如果您有一个添加两个数字的函数,那么就没有理由陷入内核模式。