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

    正常的使用gdb跟踪分析函数调用

    使用make rootfs命令

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

    对于宏SAVE_ALL来说,这条语句会保存当前线程的现场,然后是执行system_call,跳转到相应系统调用号所对应的服务例程当中,也就是在sys_call_table表中找到了相应的函数入口点,然后进入到系统调用表查找到系统调用服务程序的入口函数的地址,再进行跳转,这样便完成了对sys_call_table的进入。接下来伪代码马上就来到了syscall_exit,在执行完syscall_call后,马上接触并退出系统调用

    .macro INTERRUPT_RETURN  ; 中断返回
        iret
    .endm
    .macro SAVE_ALL          ; 保护现场
        ...
    .macro RESTORE_INT_REGS
        ...
    .endm
     
    ENTRY(system_call)
        SAVE_ALL
    syscall_call:
        call *sys_call_table(,%eax,4)
        movl %eax, PT_EAX(%esp)  ; store the return value
    syscall exit:
        testl $_TIF_ALLWORK_MASK, %ecx # current->work
        jne syscall_exit_work
    restore_all:
        RESTORE_INT_REGS
    irq_return:
        INTERRUPT_RETURN      ; 到这里就算执行完了
    ENDPROC(system_call)
     
    syscall_exit_work:
        testl  $_TIF_WORK_SYSCALL_EXIT, %ecx
        jz work_pending
    END(syscall_exit_work)
     
    work_pending:
        testb $_TIF_NEED_RESCHED, %cl
        jz work_notifysig
    work_resched:
        call schedule
        jz restore_all
    work_notifysig:
        ...                  ; deal with pending signals
    END(work_pending)
    

    从system_call到iret之间的整个过程可以用如下流程图表示:

  • 相关阅读:
    鱼眼相机畸变矫正资料
    异常值检测算法三:3sigma模型
    五:瑞芯微RV1109
    四:海思Hi3516CV500/Hi3516DV300
    三:瑞芯微OK3399-C开发板
    二:飞凌嵌入式FCU1201
    一:芯片概述
    六:大数据架构
    五:大数据架构回顾-LambdaPlus架构
    四:大数据架构回顾-IOTA架构
  • 原文地址:https://www.cnblogs.com/buhery/p/11735021.html
Copyright © 2011-2022 走看看