封装和接口是计算机世界最普遍的特色。系统通过封装,屏蔽了底层具体的实现细节,用户只需要知道系统提供的接口就可以方便的使用系统。Linux系统调用就是这么一个活生生的例子。通过系统调用,用户间接地访问到系统硬件和操作系统资源。这样,用户可以不管复杂的底层操作,而内核也通过这种方式有效地保证了自己的安全。
1、API(应用程序接口):
API就是我们上面说到的接口,它展示了所有操作系统能实现的功能,并提供给应用程序。Linux系统的API遵循POSIX(可移植操作系统接口)。POSIX是IEEE制定的定义类UNIX操作系统API的标准。
每个API函数的实现可能由一个系统调用实现,也可以由多个系统调用实现,当然,也可以不使用系统调用。
2、系统调用:
系统调用是内核给用户提供的接口,通常以C函数库(API)的方式进行封装。而且,C函数库通常对这些系统调用进行了封装。下图可说明系统调用、应用程序和C库的关系:
API和系统调用并不只是一对一的关系,可以是多对一,也可以是一对多。不过只能是API向下调用,而系统调用不能调用API。例如,一个API函数可以调用多个系统调用,而一个系统调用也可以被多个API函数调用。当然,应用程序也可以直接使用系统调用。
命令位于API的上层,是利用API实现的可执行程序。如ls、pwd等命令。我们要查看命令都使用了哪些系统调用,可以使用strace命令。
阅读(6161) | 评论(0) | 转发(0) |