2019-2020-1 20199318《Linux内核原理与分析》第六周作业

第5章 系统调用的三层机制(下)

一、试验记录

1.在qemu中增加命令

①更新menu代码到最新版
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第1张图片

②在代码中加入C函数、汇编函数
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第2张图片

③在main函数中加入MakeConfig
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第3张图片

④make rootfs
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第4张图片

⑤在qemu中查看添加的命令
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第5张图片

⑥分别执行新增的命令
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第6张图片

2.gdb跟踪分析一个系统调用内核函数

①进入gdb调试
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第7张图片

②设置断点,继续执行
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第8张图片

③相对应的运行结果为
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第9张图片

④查看getuid的系统调用函数

⑤在sys_getuid16处设置断点

⑥发现执行命令getuid时并没有停下
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第10张图片

⑦在执行getuid_asm时停下了
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第11张图片

⑧直接结束若干次单步执行,然后继续往下单步执行,发现出现了进程调度函数,返回了进程调度中的一个当前进程任务的值
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第12张图片

2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第13张图片

⑨在sys_call处设置断点。发现可停,而继续执行时,刚才停下的getuid_asm也返回了值
2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第14张图片

3.system_call到iret过程流程图

2019-2020-1 20199318《Linux内核原理与分析》第六周作业_第15张图片


总结

对系统调用处理过程的理解:

  • 具体的系统调用与系统调用号绑定,然后然后都记载在一个系统调用表内,每次使用系统调用时都是通过这样的绑定关系,由系统调用号去找系统调用表然后查找到所对应的系统调用的位置。

  • 同理,中断处理过程也是一样的,它也是经由中断向量号作为索引去查表,然后执行相应的具体的中断处理程序去处理中断。

  • 简而言之就是“两个号&两张表”。


你可能感兴趣的:(2019-2020-1 20199318《Linux内核原理与分析》第六周作业)