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 内核分析 -- 系统调用的工作过程(二)
http://blog.soul11201.com/2016/03/26/mooc-linux-kernel-5/