Linux 内核分析 -- 系统调用的工作过程(二)
1 | |
用到的 gdb 命令
已知的含义功能的就不赘述了。
|指令/参数|功能| |---|| |file |加载符号表| |b|| |s|| |finish|完成函数执行,跳出函数| |n|| |c|| |l||
用到的 qemu 参数
| -s | |
| -S |
系统调用断点设置
系统调用列表 http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl 格式为
<number> <abi> <name> <entry point> <compat entry point>
含义为:
| number | 系统调用号 |
| abi | cpu 架构 |
| name | 系统调用名 |
| entry point | 系统调用,中断服务处理程序名 |
| compat entry point | entry point 别名 |
进程调度的整个流程
调用
trap_init()初始系统中断向量表1
2
3
4#ifdef CONFIG_X86_32
set_system_trap_gate(SYSCALL_VECTOR, &system_call);
set_bit(SYSCALL_VECTOR, used_vectors);
#endif调用中断处理程序 system_call
- 保存现场 SAVE_ALL
- 根据具体是系统调用号,调用具体的中断服务处理程序
call *sys_call_table(,%eax,4) - 信号处理、进程调度,其代码执行流程简化如下:
- 调用结束,恢复
restore_all
Linux 内核分析 -- 系统调用的工作过程(二)
https://noname007.github.io/2016/03/26/mooc-linux-kernel-5.html