linux内核启动(2)——2.7.下半部机制

2.7.        下半部机制

bottom half(又名下半部机制)是Linux提高系统中断响应和处理能力的有效机制。 发生中断时,处理器要停止当前正在执行的指令,而操作系统负责将中断发送到对应的设备驱动程序去处理。在中断的处理过程中,系统不能进行其他任何工作,因此,在这段时间内,设备驱动程序要以最快的速度完成中断处理,而其他大部分工作在中断处理过程之外进行。Linux 内核利用bottom half处理过程帮助实现中断的快速处理。在中断有效的情况下,有时需要将一个任务分割成小份,以便中断可以获取到资源及时处理,而任务则稍后再继续(例如,对数据进行后加工,唤醒等待该数据的进程等)。
Bottom halves是用于延缓内核任务执行的旧有机制,在linux 1.x中已经实现了。在2.0内核,提供了一个新机制,称为“任务队列”。
Bottom halves由global_bh_lock旋转锁控制,即是在任何CPU上每刻仅有一个bottom half工作。无论如何,当尝试执行处理程序时,如果global_bh_lock无效,则bottom half被标识为执行态,进程也就得以继续。
Linux中总共仅能注册32个bottom half,操作bottom half的函数如下:
        void init_bh(int nr, void (*routine)(void)):为运行状态宏注册bottom half处理函数。这些状态宏以XXXX_BH格式定义在include/linux/interrupt.h 文件中,例如TIMER_BH或者TQUEUE_BH。通常子系统初始化运行环境时就会调用此函数注册bottom half。
        void remove_bh(int nr):执行init_bh()相反的操作,删除指定宏。这里没有错误校验过程,因此可能会影响系统。通常子系统清除运行环境时就会调用这个函数。
        void mark_bh(int nr):将bottom half 标识为执行态。通常,一个中断处理函数就会这样做。
Bottom halves是一些全局的排斥锁,所以问题“什么时候bottom half处理函数会执行”就相当于“什么时候排斥锁会执行”。这个答案就是:a)在每一个schedule里面,b)在每一个中断或者系统调用返回时。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值