所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些入口点被称为系统调用。Unix所用的技术是为每个系统调用在标准C库中设置一个具有相同名字的函数。用户进程用标准C调用序列来调用这些函数,然后,函数又用系统所要求的技术调用相应的内核服务。 从实现者的角度来看,系统调用和库函数之间的区别是很大的;但是从用户角度来看,区别又不是非常重要了。我们需要明确的是,系统调用通常是不能替换的,但是我们可以自定义库函数。以存储器分配函数malloc为例,UNIX系统中处理存储器分配的是sbrk(2),它并不是一个通用的存储器管理器,如果用户不喜欢malloc的操作方式,是可以自定义自己的malloc函数的,我们可以看到,两者的职责不同,内核中的系统调用分配另外一块空间给进程,而库函数malloc则在用户空间管理。总之,应用程序可以调用系统调用或者库函数,而很多库函数的实现是靠系统调用的。配图如下:
阅读(1174) | 评论(0) | 转发(0) |