- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内核改造概要设计
内核裁剪与实时性改造
总体设计报告
文件状态:
[√] 草稿
[ ] 正式发布
[ ] 正在修改 文件标识: RD-TEMP-SD- ARCHITECTURE 当前版本: 1.0 作 者: 邹晟 完成日期: 2006-6-22
广东省Linux公共服务技术支持中心
文件修改控制
版本号 拟制日期 拟制人 版本描述 存档编号 V2006-6-22 邹晟 初始版本
这表包含文档修订的历史记录,“版本描述”中简述主要的变更内容,“存档编号”在存档时填写。
上面输入项提供了模板编制的一个单独例子作为解释。当你创建修订信息时应该删除以下输入项。
下文的正文字体是5号字,宋体。
目 录
1 引言 3
1.1 编写目的 3
1.2 参考资料 3
2 系统概述 3
3 设计策略 3
4 系统总体结构 3
5 模块1(中断线程化)的原理 3
6 模块2(内核锁机制)的原理 15
7 模块3(内核定时器)的原理 25
8 模块4(内核裁剪)的原理 36
9 系统环境的配置 36
9.1 开发环境的配置 36
9.2 运行环境的配置 36
引言
编写目的
本文档为内核裁剪及内核实时性改造的概要设计,目的是为了方便了解项目的总体设计结构和原理。
参考资料
见svn中prj5/branchs/modules/kernel/ref目录
系统概述
本系统是为了提高Linux2.6内核的实时性和减小内核体积而研究制作出的内核补丁,设计目标是使Linux2.6内核的中断延迟时间减小到50us以内,任务调度时间减小到100us以内,同时内核体积在700k以内。
设计策略
针对使Linux2.6内核的中断延迟时间减小到50us以内的目标,我们采取了将中断线程化处理和修改锁机制的策略;针对使任务调度时间减小到100us以内的目标,采取了使用高精度内核定时器模块ktimers的策略;针对使内核体积在700k以内的目标,采取了减少调试信息、精简部分函数、去处不必要的功能模块等策略。
系统总体结构
模块1(中断线程化)的原理
5.1 概述
在Linux标准内核中,中断是最高优先级的执行单元,不管内核当时处理什么,只要有中断事件,系统将立即响应该事件并执行相应的中断处理代码,除非当时的中断关闭(即使用local_irq_disable失效了IRQ)。因此,如果系统有严重的网络或I/O负载,中断将非常频繁,实时任务将很难有机会运行,也就是说毫无实时性可言。而中断线程化是实现Linux实时性的一个重要的步骤,中断线程化后,中断将作为内核线程运行而且赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级,这样,实时任务就可以作为最高优先级的执行单元来运行,即使在严重负载下仍有实时性保证。
另外在实时Linux中,spinlock被mutex所取代,而中断处理代码中大量运用了spinlock,中断处理代码就有可能因为得不到锁而需要被挂到等待队列上去。但是只有可调度的进程才可这么做,如果中断处理代码仍然使用原来的spinlock,那么mutex取代spinlock改进实时性的努力大打折扣。所以基于这样,有必要对中断进行线程化。
原理及方法
在Ingo Molnar 的实时补丁中,中断线程化的实现方法是: 在内核初试化阶段init调用init_hardirqs函数来为每一个非紧急中断创建一个内核线程,IRQ号为0的赋予实时优先级49,IRQ号为1的赋予实时优先级48,依次到IRQ线程的实时优先级最低为25。对于非arm的中断处理,原来的do_IRQ被分成两部分,架构相关的部分放在arch/*/kernel/irq.c的文件中,名称仍为do_IRQ。中断发生后,在do_IRQ作了必要的架构相关处理后,就会调用通用的__do_IRQ,__do_IRQ会判断中断是否被线程化了(根据中断描述符的状态字段是否包含SA_NODELAY),如果是将唤醒相应的处理线程,否则直接调用handle_IRQ_event来处理。
中断系统关键代码分析
1.中断系统相关数据结构分析。
为了使得设备驱动程序能够完全的通过抽象的中断处理能够处理各种不同的中断控制器(处理中断)。Linux内核设计了通用的中断处理层,设备驱动程序只要应用通用的内核API函数就能request enable disable 和 free中断。而不需要根据不同的硬件平台而修改代码。在原来Linux的中断处理应用中,所有的中断处理的入口__do_IRQ需要通过中断类型和运行标志处理各种中断逻辑类型的中断,此外中断处理时入口函数还要假定某类特定的中断硬件类型,这种中断处理方法为中断使用者带来了不必要的麻烦,另外也不易进行扩展。
文档评论(0)