什么是系统调用?
每个进程的虚拟地址空间可以划分为两个部分:用户空间和内核空间。在用户态下只能访问用户空间;而在核心态下,既可以访问用户空间,又可以访问内核空间。系统调用是在内核完成的。
Linux的系统调用作为c库的一部分提供:
#include <linux/unistd.h> /* all system calls need this header */。
一些关系:Linux API>C库(包括标准C库和系统调用)
我们用的linux命令调用了系统调用。命令strace可以看命令都调用了什么系统调用。
系统调用的实质:为内核函数提供外部接口。进入内核后,不同的系统调用会找到各自对应的内核函数,这些内核函数被称为系统调用的“服务例程”

系统调用的执行过程:
当用户态的进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数。系统调用处理程序执行下列操作:
在内核栈保存大多数寄存器的内容
调用名为系统调用服务例程(system call service routine)的相应的C函数来处理系统调用
通过ret_from_sys_call(  )函数从系统调用返回

Logo

更多推荐