zoukankan      html  css  js  c++  java
  • 2019-2020-1 20199318《Linux内核原理与分析》第六周作业

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

    一、试验记录

    1.在qemu中增加命令

    ①更新menu代码到最新版

    ②在代码中加入C函数、汇编函数

    ③在main函数中加入MakeConfig

    ④make rootfs

    ⑤在qemu中查看添加的命令

    ⑥分别执行新增的命令

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

    ①进入gdb调试

    ②设置断点,继续执行

    ③相对应的运行结果为

    ④查看getuid的系统调用函数

    ⑤在sys_getuid16处设置断点

    ⑥发现执行命令getuid时并没有停下

    ⑦在执行getuid_asm时停下了

    ⑧直接结束若干次单步执行,然后继续往下单步执行,发现出现了进程调度函数,返回了进程调度中的一个当前进程任务的值

    ⑨在sys_call处设置断点。发现可停,而继续执行时,刚才停下的getuid_asm也返回了值

    3.system_call到iret过程流程图


    总结

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

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

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

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


  • 相关阅读:
    如何通过setTimeout理解JS运行机制详解
    css3系列之伪类选择器
    css3系列之属性选择器
    css3系列之伪元素选择器
    css3系列之兄弟选择器
    作为了解系列之 预处理器 和 后处理器
    网络系列之跨域
    网络系列之 cookie增删改查(封装)
    网络系列之 jsonp 百度联想词
    网络系列之 什么是ajax 封装ajax
  • 原文地址:https://www.cnblogs.com/SunMaolin/p/11747757.html
Copyright © 2011-2022 走看看