理解在中断处理程序中运行程序的概念

时间:2014-01-30 22:38:27

标签: interrupt interrupt-handling

运行IOS操作系统的早期Cisco路由器通过在中断处理程序中进行数据包切换而不是“常规”操作系统进程来提高其数据包处理速度。在中断处理程序中进行数据包处理可确保操作系统内的上下文切换不会影响数据包处理。据我所知,中断处理程序是操作系统中用于处理中断的软件。如何理解在中断处理程序中完成的包交换的概念?

2 个答案:

答案 0 :(得分:1)

当事件需要操作系统或安装中断服务程序的程序立即引起注意时,最好使用中断。这与轮询相反,其中软件定期检查是否存在条件,这表明事件已经发生。 中断服务程序通常不意味着自己做很多工作。它们是为了尽快达到目的而编写的,这样才能恢复正常执行。 "正常执行"意思是,当中断发生时,位置和状态先前的处理被中断。原因是必须避免在其处理程序仍然执行时再次发生相同的中断,或者它可能被忽略,或者导致错误的结果,甚至导致软件故障(崩溃)。所以中断服务程序通常做的是,读取与该事件相关的任何数据并将其存储在队列中,表明队列经历了突变,并设置了可能发生另一个中断的事情,然后通过恢复预中断上下文来恢复。与该中断相关联的排队数据现在可以异步处理,而不会有中断的风险。

答案 1 :(得分:0)

以下是执行中断级切换的过程:

查找内存结构以确定下一跳地址和输出接口。

开放系统互连(OSI)第2层重写,也称为MAC重写,这意味着更改数据包的封装以符合传出接口。

将数据包放入传出接口的tx环或输出队列。

更新适当的内存结构(在缓存,更新计数器等中重置计时器)。

从网络接口接收数据包时引发的中断称为“RX中断”。仅当执行上述所有步骤时才会解除此中断。如果不能执行上述前三个步骤中的任何一个,则将分组发送到下一个交换层。如果下一个切换层是进程切换,则将数据包放入进入接口的输入队列以进行进程切换,并中断该中断。由于中断不能被同一级别的中断中断,并且所有接口都会引发相同级别的中断,因此在解除当前RX中断之前不能处理其他数据包。

可以在层次结构中组织不同的中断切换路径,从提供最快查找的查找到提供最慢查找的查找。用于处理数据包的最后手段始终是进程切换。并非每个中断切换路径都支持所有接口和数据包类型。通常,只有那些需要检查和更改限于包头的那些可以被中断切换。如果在转发之前需要检查数据包有效负载,则无法进行中断切换。对于某些中断切换路径可能存在更具体的约束。此外,如果输出接口上的第2层连接必须可靠(即,它包括对重传的支持),则无法在中断级别处理数据包。

以下是无法进行中断切换的数据包示例:

指向路由器的流量(路由协议流量,简单网络管理协议(SNMP),Telnet,普通文件传输协议(TFTP),ping等)。可以获取管理流量并将其定向到路由器。他们有与特定任务相关的流程。

OSI第2层面向连接的封装(例如,X.25)。有些任务太复杂,无法在中断切换路径中编码,因为要运行的指令太多,或者需要定时器和窗口。一些示例包括加密,局域传输(LAT)转换和数据链路交换加(DLSW +)等功能。

更多信息:http://www.cisco.com/c/en/us/support/docs/ios-nx-os-software/ios-software-releases-121-mainline/12809-tuning.html