分析system_call中断处理过程

来源:互联网 发布:免费下载图片软件 编辑:程序博客网 时间:2024/04/29 19:24

第一部分

使用gdb跟踪分析一个系统调用内核函数
这里写图片描述
图1 在menuOs中添加pid和pidasm菜单选项后使用dgb跟踪,设置断点sys_getpid

这里写图片描述
图2 sys_getpid返回后进入汇编代码处理无法使用dgb继续跟踪

第二部分

这里写图片描述
图3 系统调用处理过程的汇编伪代码

分析:可以从简化的伪代码理解system_call开始到iret结束之间的整个过程。
首先是定义的各种宏INTERRUPT_RETURN(iret)、SAVE_ALL、RESTORE_INT_REGS
然后进入系统调用首先SAVE_ALL,查找系统调用表后调用相应的调用函数,exit时会判断当前的任务是不是要进行syscall_exit_work,如果不需要处理就restore_all,然后irq_return就结束了。若有sys_exit_work,则进入sys_exit_work,可能会有一个进程调度时机,可能会发生进程上下文切换。
这里写图片描述
图4 流程图

第三部分

和上周实验相比,本周更深入的跟踪和分析了系统调用从system_call到iret之间的处理过程。当系统调用发生时,内核处理系统调用服务,结束返回时回到用户态之前可能发生进程调度。内核可以抽象成不同种类的中断的集合。

小市民 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

0 0