系统调用与库函数

     linux操作系统提供了良好定义、数量有限、直接进入内核的入口点,这些入库点成为系统调用。linux中位每个系统调用在标准C库中设置一个具有同样名字的函数。用户进程用标准C调用序列来调用这些函数,然后函数又用系统所要求的技术调用相应的内核服务。

     对于开发者来说,内核系统调用接口和标准C库这两者没有什么区别,因为他们都为我们所写的应用程序提供服务,但是对于系统开发者来说系统调用与库函数之间有根本的区别。例如我们可以替换库函数或者自己编写库函数但是系统调用通常是不能被替换的。如果要替换系统调用,必须重新编写内核里面系统调用服务函数,重新编译内核才能让系统调用正常运行。

     从存储空间分配函数malloc为例,我们有很多方法可以进行存储空间分配及其相关的无用空间回收,并不存在对所有进程都最优的一种技术,linux系统调用中处理存储空间分配的是sbrk。我们可以这样理解内核中的系统调用分配一块空间给进程,而库函数malloc则在用户层次管理这一空间。

     上面所讲的就是库函数和系统调用都做了同一件事情就是内存分配,但是他们工作的层次从软件上来说不在同一个层,所以不具备可比性性,职责不同。

     对于从应用程序到库函数到系统调用,特别是库函数到系统调用在现代操作系统中往往会存在虚拟文件系统这一层在两者中间,所以如果要详细的分析系统调用和库函数还需分析虚拟文件系统这一层次与这两者之前的关系。

原文地址:https://www.cnblogs.com/qiuheng/p/5684026.html