什么事系统调用
- linux虚拟地址空间分为用户空间和内核空间
- 用户空间不可直接访问内核空间,帝王班的内核空间可直接访问用户空间
- 用户空间只能通过系统调用访问内核空间
- 系统调用时内核提供的一组函数接口,使得用户空间上进程可以和内核空间交互
系统调用过程
- 执行用户程序
- 根据glibc中实现,取得系统调用号,将其存入EAX并执行int $0x80(128号中断)
- 用户态可以传递变量、参数值给内核,内核态运行时候会保存用户进程的一些寄存器值等(上下文环境)
- 触发中断后内核根据系统调用号执行对应的中断处理函数
- 系统调用结束将访问址存入EAX,返回中断处理函数
- 中断处理函数根据存储用户态进程上下文环境恢复用户态,同时用户态就获取了内核态函数执行的返回值
系统调用汇编
1 | // pid = fork(); |
系统调用实现分析
待续
添加系统调用
待续