所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序能够通过这组“特殊”接口来获得操作系统内核提供的服务。比如用户能够通过进程控制相关的系统调用来创建进程、实现进程调度、进程管理等。
为什么用户程序不能直接訪问系统内核提供的服务呢?这是因为在Linux中,为了更好地保护内核空间,将程序的执行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别执行在不同的级别上,在逻辑上是相互隔离的。 因此。用户进程在通常情况下不同意訪问内核数据,也无法使用内核函数。它们仅仅能在用户空间操作用户数据。调用用户空间的函数。
可是。在有些情况下,用户空间的进程须要获得一定的系统服务(调用内核空间程序),这时操作系统就必须利用系统提供给用户的“特殊接口”——系统调用规定用户进程进入内核空间的详细位置。进行系统调用时。程序执行空间须要从用户空间进入内核空间。处理完后再返回到用户空间。
前面讲到的系统调用并非直接与程序猿进行交互的。它不过一个通过软中断机制向内核提交请求,以获取内核服务的接口。
在实际使用中程序猿调用的一般是用户编程接口——API
系统命令相对API更高了一层,,它实际上一个可运行程序,它的内部引用了用户编程接口(API)来实现对应的功能。