请描述 “应用程序”,”系统命令“,“C标准库”,“POSIX标
2018-11-07 本文已影响0人
太平小小草
答:
1,通常情况下,应用程序是通过 "操作系统的API" 而不是直接通过 "系统调用" 来编程。 (尽管 "应用程序" 可以直接使用 "系统调用",系统调用也是内核和 "应用程序" 之间的沟通桥梁。)
2,“POSIX标准API” 是最通用的 “操作系统的API”。
3,“操作系统的API” 和 ”系统调用“ 之间有着直接的关系,一个 “操作系统的API” 函数可以由一个 ”系统调用“ 实现,也可以通过调用多个 ”系统调用“ 来实现,还可以完全不使用任何 ”系统调用“。
4,“操作系统的API” 通常都以C库(注意,不专指标准库)的方式提供,每个 ”系统调用“ 在C库中都具有相应的封装函数。系统调用与其在C库封装函数的名称常常相同,比如,read系统调用在C库中的封装函数即为read函数(read为posix库函数,在头文件<unistd.h> 中)。
5,”系统命令“ 位于C库的更上层,是利用C库实现的可执行程序,比如最为常用的ls、cd、pwd等命令。
6,”系统调用“最终必须具有明确的操作。”应用程序“通过系统调用进入内核后,会执行各个”系统调用“对应的 ”内核函数“,即 “系统调用服务例程”,比如系统调用getpid的服务例程 是 内核函数sys_getpid。
7,"系统调用" 服务例程之外,内核中存在着大量的 "内核函数"。有些局限于某个内核文件自己使用,有些则是export出来供内核其他部分共同使用。对于export出来的 “内核函数”,可以使用ksyms命令或通过/proc/ksyms文件查看。