20、中断处理与I/O中断详解

中断处理与I/O中断详解

异常处理机制

当异常发生时,系统会将异常向量存储在当前进程描述符中,并向该进程发送合适的信号,示例代码如下:

current->thread.error_code = error_code;
current->thread.trap_no = vector;
force_sig(sig_number, current);

当前进程会在异常处理程序终止后立即处理该信号。信号处理可以在用户模式下由进程自身的信号处理程序完成(如果存在),也可以在内核模式下进行。若在内核模式处理,内核通常会终止该进程。

异常处理程序会检查异常是在用户模式还是内核模式发生。若在内核模式,还会检查是否是由于系统调用传入无效参数导致。若出现其他内核模式异常,则可能是内核存在错误。此时,异常处理程序会调用 die() 函数,在控制台打印所有CPU寄存器的内容(即内核oops),并通过调用 do_exit() 终止当前进程。

当实现异常处理的C函数结束时,代码会执行 jmp 指令跳转到 ret_from_exception() 函数。

中断处理概述

大多数异常通过向引发异常的进程发送Unix信号来处理,这种方式能让内核快速处理异常。但对于中断,这种方法并不适用,因为中断往往在相关进程(如请求数据传输的进程)被挂起后才到达,此时运行的可能是完全不相关的进程,向当前进程发送Unix信号没有意义。

<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值