• 20135337朱荟潼 Linux第五周学习总结——扒开系统调用的三层皮(下)


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

    一、学习内容

    (一)给MenuOS增加time和time-asm命令(详见 :二、实验内容)

    四步

    	1.更新menu代码到最新版;
    	2.在main函数中增加MenuConfig;
    	3.增加对应的Time函数和TimeAsm函数;
    	4.make rootfs。
    

    (二)使用gdb跟踪系统调用内核函数sys_time(详见 :二、实验内容)

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

    1.进程调度的时机很重要。

    初始化

    set_system_trap_gate,设置系统陷阱门,即系统调用。

    (四)简化后便于理解system_call伪代码

    伪代码



    【7、10】宏。SAWV_ALL宏保存现场

    【16】调用系统调用号(eax的值)对应的服务程序

    【19】判断当前任务是否需要处理 syscall_exit_work(当前进程信号处理、系统需要调度)

    【21、23】不执行——>restore_all:irq_return

    【32】work_notifysig 处理信号

    【33】需要重新调度

    【35】调度结束,返回系统调度调度

    1.进程调度中会发生中断上下文切换&进程上下文切换。

    2.内核抽象理解是许多种中断处理的集合。

    (五)简单浏览system_call到iret之间主要代码

    ENTRY(system_call)

    【494】保护现场

    【502】调用了系统调用处理函数(实际是系统调用的服务程序)

    【533】至此,系统调用处理过程结束

    【595】——>【610】处理信号

    【597】决定进程调度的代码schedule

    流程图

    二、实验内容

    1.给MenuOS增加time和time-asm命令


    sys_time返回后进入汇编处理,gdb无法继续跟踪.

    2.MenuOS中添加了fork,用gdb跟踪fork分析其内核处理函数sys_clone。

    单步执行跟踪到ret_from_fork断点处继续执行汇编语句,jmp syscall_exit之后就无法跟踪。

    make rootfs:自动编译,生成根文件系统,自动启动.

    (gdb)list 查看代码.

    (gdb)s 单步调试进入函数体.

    (gdb)n 单步调试不进入函数体.



  • 相关阅读:
    67家基金子公司背景脉络梳理
    港股奇葩术语知多少
    68家信托公司7大派系股东分食图谱
    港股术语
    流动性陷阱
    ORACLE归档模式和非归档模式的利与弊
    肥尾效应
    DVP
    金融衍生品如何定价
    绿鞋机制
  • 原文地址:https://www.cnblogs.com/zzzz5/p/5308633.html
Copyright © 2020-2023  润新知