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结构链表构成,每个结点包含处理程序的地址指针及指向数据的指针。处理任务队列上的元素时会用到这些处理程序,同时也会用到指向数据的指针。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章