• 20135239 益西拉姆 linux内核分析 扒开系统调用的三层皮(下)


    一、 给MenuOS增加time-asm命令

    代码解释

        1.-rf:强制删除
        2.clone :重新克隆
        3.time-asm:显示系统时间的汇编形式
    

    给MenuOS增加time和time-asm命令

    • 更新menu代码到最新版
    • 在main函数中增加MenuConfig
    • 增加对应的Time函数和time-asm函数
    • make rootfs

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

    解释得几点:

    • 调试的时候一直按n单步执行会进入schedule函数
    • sys-time返回后进入汇编代码处理gdb无法继续跟踪。
    • 执行int 0x80之后system_call对应的代码

    三、系统调用在内和代码中的工作机制和初始化

    回顾: 用户态和内核态的转变和匹配

    系统调用机制的初始化

    - `initmain.c start_kernel

    • trap_init();

    - archx86kernel raps.c

    #ifdef CONFIGX8632 set systemtrapgate(SYSCALLVECTER,&systemcall);

    setbit(SYSCALLVECTOR,used_vectors);

    endif

    四、简化后便于理解的sys_call伪代码

    关键的信息

    - 在系统调用之前它有可能会形成进程调度

    总结:内核可以看成很多种中断处理不同的集合。

    简单浏览system_call到iret之间的主要的代码

    1. save all:保存现场
    2. iterrupet return 实际上就是irq_return宏。
    3. work pending 里面的work notifysig是用来处理pending signal信号的。
    4. schedule是个重要的代码,决定了进程调度的代码。

    总结

    本周就是继续去学代码,还有一个上周的巩固,很充实。

  • 相关阅读:
    线程的用法
    提高VS2010的性能,VS2010不再卡
    win7 远程桌面最大化快捷键
    java类加载器
    Class类
    JDBC获得oracle数据库主键值
    Zookeeper入门基础知识
    项目js总结
    jdk8 stream项目使用
    全局请求参数去除空格
  • 原文地址:https://www.cnblogs.com/20135239-yxlm/p/5325564.html
Copyright © 2020-2023  润新知