免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2103 | 回复: 3

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2016-08-19 16:56 |显示全部楼层
软中断处理程序A执行到一半的时候被硬件中断打断,如何回到A被打断的地方继续执行?
假如进程被打断,回到之前被打断的地方继续执行是可以理解的,因为有进程上下文。
但是软中断上下文是不保存cpu寄存器等信息的噢!那怎么回到当初被打断的代码处呢?

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
发表于 2016-08-20 10:27 |显示全部楼层
会保存吧
当硬件中断发生时,cpu 读取vector,从idt表中找到地址,这里一般是在entry.s那里的汇编,我记得这部分汇编会save寄存器,然后去do_IRQ,最后会返回到原来的地方。

论坛徽章:
13
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00每日论坛发贴之星
日期:2016-08-14 06:20:00操作系统版块每日发帖之星
日期:2016-08-14 06:20:00每日论坛发贴之星
日期:2016-08-13 06:20:00数据库技术版块每日发帖之星
日期:2016-08-13 06:20:00程序设计版块每日发帖之星
日期:2016-08-13 06:20:00IT运维版块每日发帖之星
日期:2016-08-13 06:20:00每日论坛发贴之星
日期:2016-08-12 06:20:00数据库技术版块每日发帖之星
日期:2016-08-12 06:20:00程序设计版块每日发帖之星
日期:2016-08-12 06:20:00操作系统版块每日发帖之星
日期:2016-08-12 06:20:00综合交流区版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-08-20 10:33 |显示全部楼层
[ 本帖最后由 karma303 于 2016-08-20 10:37 编辑 ]

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

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

论坛徽章:
0
发表于 2016-08-22 22:46 |显示全部楼层
怎么能不保存呢,软中断或硬中断是可以被更高优先级的硬中断嵌套执行的,寄存器形成栈帧入栈,arm64参考代码如下:

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

.macro  kernel_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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP