linux内核抢占的实现机制分析(论文版)

linux内核抢占的实现机制分析(论文版)

ID:34090030

大小:371.35 KB

页数:4页

时间:2019-03-03

linux内核抢占的实现机制分析(论文版)_第1页
linux内核抢占的实现机制分析(论文版)_第2页
linux内核抢占的实现机制分析(论文版)_第3页
linux内核抢占的实现机制分析(论文版)_第4页
资源描述:

《linux内核抢占的实现机制分析(论文版)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第28卷第3期惠州学院学报(自然科学版)Vol28No32008年6月JOURNALOFHUIZHOUUNIVERSITYJun2008Linux内核抢占的实现机制分析1,21曾树洪,刘卫国(1.中南大学信息科学与工程学院,湖南长沙410083;2.惠州学院计算机科学系,广东惠州516015)摘要:早期的Linux内核是不可抢占的,在Linux对SMP多处理器系统支持的基础上,linux内核2.6版支持内核抢占。本文以Linux2.6.11版本内核为基础,深入地分析了Linux

2、可抢占内核的实现原理。关键词:Linux系统;实时;可抢占;SMP中图分类号:TP39文献标识码:A文章编号:1671-5934(2008)03-0056-041引言随着计算机技术和信息化技术的发展,信息家电、手持设备、无线设备等个性化设备的出现,嵌人式系统成为了现在研究的热点。Linux以其开放源码、功能强大以及广泛支持等优点而广泛应用于嵌入式系统。嵌人式系统往往对实时性能要求比较高,运用在嵌入式系统中的Linux系统必须具有很好的实时响应性能。实时不仅要[1]求逻辑结果正确,而且还有时间要

3、求,一个实时任务应当在限定的时间内完成。影响Linux实时性能的因素有很多,中断处理机制、定时器的时钟精度、内核是否可被抢占、实时任务调度机制和调度算法等,我们只有很好的理解了Linux在这些方面的处理机制,才能对内核代码进行改进使其应用于具体的实时系统中。因此,分析研究Linux内核抢占的实现机制是非常重要的。2Linux的内核抢占机制早期的LINUX内核是不可抢占。当进程处在用户态时,不论内核是不是抢占的,在适当的时候都可能发生进程切换,比如有更高优先级的任务被唤醒时,但是当一个进程处于内核态,除非

4、它自愿放弃CPU,否则将一直占用CPU,直到完成或退出内核。为了分析内核不可抢占时进程的切换过程,假设当前系统中只有两个进程A和B,图1,进程A运行在用户态,在t1时刻,进程A被中断(如频繁发生的时钟中断等),在中断处理程序结束前的某一时刻,优先级更高的进程B变为了可执行状态,在中断返回时(t2时刻),调度程序被调用,切换到进程B,进程B开始运行,直到进程B结束的t3时刻,调度程序再次被调用,切换到进程A,进程A继续运行。图1用户态图2内核态图2,进程A运行在内核态,在t1时刻,进程A被中断(如频

5、繁发生的时钟中断等),在中断处理程序结束前的某一时刻,优先级更高的进程B变为了可执行状态,由于内核是不可抢占的,在中断返回后,进程A继续运行,收稿日期:2008-05-26作者简介:曾树洪(1979-),男,四川泸州人,讲师,在读工程硕士研究生,研究方向为嵌入式操作系统。第3期曾树洪等:Linux内核抢占的实现机制分析∀57∀直到进程A结束时,调度程序被调用,切换到进程B,进程B才开始运行。这种情况下,优先级高的进程B的执行被延迟了,严重影响了实时系统的性能。把Linux内核设计成不可抢占,主要是为了简

6、化内核代码设计,在单CPU情况下,避免了多个进程同时执行所带来的并发问题,大大简化了内核的同步和保护机制。但内核的不可抢占,也严重的影响了Linux的实时性能。Linux内核从2.0版本开始支持SMP多处理器,在多处理器系统上,内核中可以有多个进程同时在不同的CPU上运行,SMP多处理器系统面临同样的进程并发执行问题。这样在支持SMP多处理器的基础上,内核抢占的实现也就容易了,Linux内核从2.6版本开始,正式加入了对内核抢占的支持。下面以2.6.11版本的内核代码为基础来分析Linux可抢占内核的实现

7、。为了实现内核抢占,在每个进程的thread_info描述符里定义了一个preempt_count的变量和一个flags变[2]量:/include/asm-i386/Thread_info.hstructthread_info{structtask_struct*task;!!unsignedlongflags;__s32preempt_count;!!};preempt_count变量作为抢占计数器使用,初始值为0,当preempt_count>0时,禁止内核抢占。flags变量里存放的是一些标志

8、位,用来记录挂起进程的切换请求、挂起信号、单步执行等,其中位3用来标志是否需要进程切换:/include/asm-i386/Thread_info.h#defineTIF_NEED_RESCHED3/*reschedulingnecessary*/在内核抢占点,内核会检查TIF_NEED_RESCHED标志是否被设置。如果TIF_NEED_RESCHED标志被设置,并且preempt_count为0的话,表明有一个更为重要的任

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。