Linux-系统调用
- 什么是系统调用?
- 系统调用流程
什么是系统调用
系统调用是操作系统提供给程序开发人员使用系统服务接口
系统调用流程
Linux 提供了 glibc 库, 它封装了系统调用接口, 对上层更友好的提供服务, 系统调用最终都会通过 DO_CALL 发起, 这是一个宏定义, 其 32 位和 64 位的定义是不同的
32位系统调用
用户态
a. 将请求参数保存到寄存器
b. 将系统调用名称转换为调用号保存到eax中
c. 通过软中断ENTER_RETURN 进入内核态
内核态
a. 将用户态的寄存器保存到pt_regs中
b. 在系统调用表 sys_call_table中根据调用号找到响应函数
c. 执行函数,将返回值写入pt_regs中ax位置
d. 通过INTERRUPT_RETURN 根据pt_regs恢复用户态进程
64位系统调用
用户态
a. 将请求参数保存到寄存器
b. 将系统调用名称转换为系统调用号保存到寄存器rax中
c. 通过syscall进入内核态
内核态
a. 将用户态寄存器保存到pt_regs中
b. 在系统调用表sys_call_table 中根据调用号查找对于函数
c. 执行函数,将返回值写入pt_regs中的ax位置
d. 通过sysretq返回用户态