【发布时间】:2021-08-04 01:02:55
【问题描述】:
我正在阅读 Galvin 的恐龙书,遇到了问题中提出的困难。
通常应用程序开发人员根据应用程序编程接口 (API) 设计程序。 API 指定了一组可供应用程序员使用的函数,包括传递给每个函数的参数以及程序员可以预期的返回值。
文字补充说:
在幕后,构成 API 的函数通常代表应用程序程序员调用实际的系统调用。例如,Win32 函数
CreateProcess()(不出所料用于创建新进程)实际上调用了 Windows 内核中的NTCreateProcess()系统调用。
从以上两点我了解到:程序员使用API,对API的函数调用对应于他们想要进行的系统调用。 API 中的相关函数实际上进行了系统调用。
接下来的文字让我有点困惑:
大多数编程语言的运行时支持系统(编译器随附的库中内置的一组函数)提供了一个系统调用接口,该接口可作为系统调用的链接,由操作系统。 系统调用接口拦截 API 中的函数调用,并在操作系统中调用必要的系统调用。 通常,每个系统调用都关联一个数字,系统调用-call 接口维护一个根据这些数字索引的表。然后系统调用接口调用操作系统内核中的预期系统调用并返回系统调用的状态和任何返回值。
上面的摘录让我觉得API中的函数并没有直接进行系统调用。运行时支持系统的系统调用接口中可能有内置函数,正在等待API中函数的系统调用事件。
以上是文中解释系统调用接口工作原理的示意图。
后面的文字解释了C标准库中系统调用的工作原理如下:
这很清楚。
【问题讨论】:
标签: api operating-system system-calls