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

    《庖丁解牛》第5章——系统调用的三层机制(下)

    一、学习内容及试验过程总结

    5.1 给MenuOS增加命令

    给MenuOS增加time和time-asm命令

    • 更新menu代码到最新版
    • 在main函数中增加MenuConfig
    • 增加对应的Time函数和TimeAsm函数
    • make rootfs
      过程及结果如图所示


    我使用的是20号系统调用,实验过程如下

    5.2使用gdb跟踪系统调用内核函数sys_time

    5.3系统调用在内核代码中的处理过程

    二、使用gdb分析我的系统调用内核函数(20号系统调用)

    首先是在MenuOS中增加一个Pid方法,实现库函数API触发getpid系统调用。再增加一个PidAsm方法,实现汇编代码触发getpid系统调用,过程及结果入股
    使用gdb跟踪系统调用内核函数sys_getpid

    查源代码,发现之前对这个系统调用的理解是错误的。真的是不看不知道啊

    此处的pid并不是pid,而是当前进程所属线程组的id,即getpid系统调用返回的是tgid(the thread group id of the current process).通常情况下tgid和pid是相同的,除非在clone上指定了CLONE_THREAD,在这种情况下相同组的所有线程他们的tgid都是一样的。

    这是google的翻译,感觉还是他的好理解一点

    追踪代码



    三、学习中遇到的问题

    1.如果安装插件过慢(默认的是美国的镜像元),可以考虑更改ubunut镜像元
    修改Ubuntu的apt-get源为国内镜像源的方法,中科大镜像元

    2.ubunut安装QEMU的时候出现的问题
    输入命令sudo apt-get install qemu,安装完后显示

    但是输入qemu后连续按Tab显示出了qemu支持的架构,百度之后发现是没有指定qemu的架构,测试qemu-sysytem-i386是可以运行的,如果想输入qemu就运行,应该加上代码sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu添加了一个软连接

    3.运行MenuOS新增加的time-asm函数时,会出现内核崩溃的情况,提示kernel panicked
    这里我们的豪哥(这是豪哥的博客园)给出了解释:test.c文件中使用库函数API触发系统调用和汇编代码触发系统调用这两部分代码都没有错误,是因为编译器的原因导致的内核崩溃。因此需要把menu目录下的Makefile文件中的编译器gcc改到4.8版本,输入代码sudo apt-get install gcc-4.8 lib32gcc-4.8-dev

    这样就可以运行time-asm了

  • 相关阅读:
    char
    export和export default
    递归打印文件目录
    centso7 安装redmine
    sonar结合jenkins
    sonar安装
    gitlab+jenkins
    centos5 安装redmine
    elk安装最佳实践
    elk认证模块x-pack安装
  • 原文地址:https://www.cnblogs.com/bowendky/p/9971171.html
Copyright © 2011-2022 走看看