0%

Linux系统调用

专注于用户空间的系统级编程–即内核之上的所有内容。

计算机系统内存分为系统空间和用户空间。通常,用户是不能够直接访问系统空间、调用系统函数的,
但用户可以通过系统调用进入内核空间,获取内核服务。

用户进程对系统函数的成功调用,将进行相应的用户空间到系统空间的转换。
进入内核后,不同的系统调用会找到各自对应的内核函数入口地址,由内核函数提供服务

以调用系统调用fork()来分析如下:

fork()系统调用

从图中我们可以看出,调用fork()实际上是调用了中断0x80,通过事先初始化好的IDT,
程序转移到了_system_call,最终通过一个函数指针数组sys_call_table[]转化成了调用sys_fork()。

系统调用起到了连接用户进程和操作系统的桥梁作用,由于桥两端处于不同的态,因此需要使用中断来过渡。