jinxinxin163 发表于 2016-08-19 16:56

软中断处理程序A执行到一半的时候被硬件中断打断,如何回到A被打断的地方继续执行?

软中断处理程序A执行到一半的时候被硬件中断打断,如何回到A被打断的地方继续执行?
假如进程被打断,回到之前被打断的地方继续执行是可以理解的,因为有进程上下文。
但是软中断上下文是不保存cpu寄存器等信息的噢!那怎么回到当初被打断的代码处呢?

goingstudy 发表于 2016-08-20 10:27

会保存吧
当硬件中断发生时,cpu 读取vector,从idt表中找到地址,这里一般是在entry.s那里的汇编,我记得这部分汇编会save寄存器,然后去do_IRQ,最后会返回到原来的地方。

karma303 发表于 2016-08-20 10:33

[ 本帖最后由 karma303 于 2016-08-20 10:37 编辑 ]

这不算是个什么问题。
发生在内核态的硬中断不会导致堆栈切换,而且中断门入口处,内核照样会把cpu 寄存器压栈保存。

你看一看杨季文《80x86》第339和440页。

chengxta 发表于 2016-08-22 22:46

怎么能不保存呢,软中断或硬中断是可以被更高优先级的硬中断嵌套执行的,寄存器形成栈帧入栈,arm64参考代码如下:

el1_irq:
    kernel_entry 1       // 保存寄存器信息,cpu进入el1模式
    ... ...
    irq_handler         // 执行中断处理函数

.macrokernel_entry, el, regsize = 64
    sub sp, sp, #S_FRAME_SIZE - S_LR    // room for LR, SP, SPSR, ELR
    push    x28, x29
    push    x26, x27
    ... ...
    push    x2, x3
    push    x0, x1
页: [1]
查看完整版本: 软中断处理程序A执行到一半的时候被硬件中断打断,如何回到A被打断的地方继续执行?