美文网首页
Linux内核分析 lab4 扒开系统调用的三层皮(下)

Linux内核分析 lab4 扒开系统调用的三层皮(下)

作者: learning彬 | 来源:发表于2017-03-26 23:05 被阅读0次

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

本次作业,理解上次作业的系统调用的代码


本次实验步骤:

1.将上次的函数添加到test.c中,调用menuconfig。

2.用gdb跟踪内核代码,理解系统调用原理。


menu结果展示:

图一.整体效果 图二.执行效果

调试结果展示:

使用gdb将断点订到sys_fork函数,就可以在执行时停在这,然后用n一行一行理解。

步骤如下图:

图三 .步骤一 图四.步骤二

图四:fork函数实际上调用了 do_fork()函数

图五 步骤三

图五:其中p就是新生的字进程把。

图六 步骤四

图六:p由copy_process()函数生成。

由于其中实在太细,没耐心看了,so,下面跳着来。

图七 零碎步骤

图七:对p的一些前期准备工作。

图八 零碎步骤

图八:对p的内存拷贝,命名域拷贝

图九 零碎

图九:对io啊一些拷贝

图十 拷贝结束 

图十:拷贝结束,进行系统的进程调度。

以上就是fork()系统调用,总体上就是对旧进程进行拷贝,对新进程进行枷锁。最后在进行进程调度。


系统调用流程图:

System_call -> Save_All -> Sys_call_table -> mov %eax,PT_AX() -> Syscall_exit ( -> Syscall_exit_work -> Work_pending -> Work_notifysig -> Work_researched -> schedule) -> restore_all -> irq_return



总结:

主要对fork系统调用有了一定理解。

相关文章

网友评论

      本文标题:Linux内核分析 lab4 扒开系统调用的三层皮(下)

      本文链接:https://www.haomeiwen.com/subject/mzclottx.html