来自内核的陷阱

作者: 橡树人 | 来源:发表于2020-12-19 19:59 被阅读0次

    问题1: 如何处理来自内核空间的陷阱?

    处理步骤:

    • 保存被打断内核线程的所有寄存器的值;
    • 处理陷阱:设备中断或者异常;
    • 返回到被陷阱打断的任何代码处;

    调用链:

    • 处理路径:kernelvec->kerneltrap
    • 返回路径:kerneltrap->kernelvec

    问题2:如何处理设备中断?

    • 见第5章;

    问题3:如何处理异常?

    • 调用panic,停止执行。

    问题4:kernelvec将寄存器的值保存到哪了?

    • 被打断内核线程的栈上

    问题5:如果发生了计时器中断,且某个进程的内核线程在执行(不是调度线程),会发生什么?

    kerneltrap会暂时放弃CPU,给其他线程一次执行的机会。

    问题6:kernelvec都做了哪些事?

    处理陷阱:

    • 保存所有寄存器的值;
    • 调用kerneltrap

    从陷阱中返回:

    • 从被打断内核线程栈中弹出所有寄存器的值;
    • 执行sret,即拷贝sepc的值到pc中;
    • 恢复被打断代码的执行;

    问题7:kerneltrap都做了哪些事?

    调用devintr来检查陷阱。

    • 如果是设备中断,则直接处理;
    • 如果是异常,则调用panic,停止执行;

    相关文章

      网友评论

        本文标题:来自内核的陷阱

        本文链接:https://www.haomeiwen.com/subject/ipvcnktx.html