Linux 内核分析 -- 系统调用的工作过程(二)

1
2
3
4
5
6
7
8


使用gdb跟踪分析一个系统调用内核函数(您上周选择的那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl ,推荐在实验楼Linux虚拟机环境下完成实验。
根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图,撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:
题目自拟,内容围绕系统调用system_call的处理过程进行;
博客内容中需要仔细分析system_call对应的汇编代码的工作过程,特别注意系统调用返回iret之前的进程调度时机等。
总结部分需要阐明自己对“系统调用处理过程”的理解,进一步推广到一般的中断处理过程。

用到的 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 别名

进程调度的整个流程

  1. 调用 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

  2. 调用中断处理程序 system_call

  1. 调用结束,恢复 restore_all

Linux 内核分析 -- 系统调用的工作过程(二)
http://blog.soul11201.com/2016/03/26/mooc-linux-kernel-5/
作者
soul11201
发布于
2016年3月26日
许可协议