Linux内核机制

Linux的中断处理包含两部分:低级处理部分和高级处理部分。低级处理部分负责响应中断信号,保证中断信号到来时能及时响应,同时完成数据读取和传送。这一阶段要快速。高级处理处理和设备相关的各种数据结构。这一部分占一次中断的大部分时间。

Linux把一次中断处理分割为两个部分:快速的top half处理和慢速的bottom half处理。Top half处理硬件发出的中断请求,它必须在下一次中断到来前完成。这一阶段完成设备和缓冲区之间的数据传递。Bottom half处理与设备相关的数据结构,bottom half允许接收新的中断请求。

2、内核机制的数据结构

bottom half函数的请求和bottom half函数的执行都在内核中完成,不涉及发出请求中断的进程。bottom half用一个32位的指针数组完成处理。Linux采用数组方式实现内核机制,数组的每一项指向一个内核处理程序。

Linux系统中最多可以有32个不同的内核处理程序,每个内核处理程序管理一个任务队列。bh_base是一个存储32个处理程序入口的指针数组。bh_mask和bh_active分别表示那些处理程序是否已经安装和激活。他们都是32位大小的数组。第N位被置位则表示bh_base的第N个元素有一个内核处理程序或第N个内核处理程序被激活。(被激活的意思是可被调度程序调度执行)。

当设备驱动或内核需要调度某任务,而该任务不能马上被执行,则将该任务插入相应的系统队列。然后,内核发出信号,通知它需要调用某个内核处理程序。系统通过设置bh_active相应位实现操作。每当系统调用结束并返回调用进程前都要检查bh_active,如果有置1位,则调用对应的内核处理程序,检查顺序是从第0位到第31位。

调用时bh_active对应位会被清除。

3、任务队列

任务队列由一个tq_struct结构链表构成,每个结点包含处理程序的地址指针及指向数据的指针。处理任务队列上的元素时会用到这些处理程序,同时也会用到指向数据的指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值