2022年Linux操作系统实时性分析 .pdf
《2022年Linux操作系统实时性分析 .pdf》由会员分享,可在线阅读,更多相关《2022年Linux操作系统实时性分析 .pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、收稿日期:2006 - 12 - 07作者简介:余 兵( 1982 - ) ,男,江西丰城人,硕士研究生,研究方向为实时操作系统;黎忠文,博士,副教授,研究方向为实时嵌入式系统的设计与开发。Linux操作系统实时性分析余 兵,黎忠文(厦门大学信息科学与技术学院,福建 厦门 361005)摘 要 :随着 Linux 操作系统在嵌入式实时系统中的广泛应用,有效地提高Linux 有限的实时性能是一个重要问题,而Linux 内核可抢占调度是实时性能的改进的关键。对 Linux 内核调度器的工作原理进行了深入分析,并阐述了调度延迟是其实时性不强的原因,然后介绍通过可抢占机制对Linux内核进行改造,测试
2、了改进后的内核的实时性。关键词 :Linux ;实时性 ; 可抢占内核; 调度延迟中图分类号: TP316. 8 文献标识码:A 文章编号 :1673 - 629X(2007)09 - 0041 - 04Analysis of LinuxReal - time MechanismYU Bing ,L I Zhong 2wen(Computer and InformationEngineering College , Xiamen University, Xiamen 361005 ,China)Abstract :With the wide application of Linux opera
3、tion system in embedded real - time system fields , the enhancement of Linuxreal -time performance becomes more and more important.Preemptive kernel is a decisive condition of a systems real - time performance.This paper analyzesof Linux scheduler andpresents that the scheduler latency is the major
4、causeof Linux OSnon - real - time. Thenpre2sent a solution to enhance the real - time performance of Linux.In the end , the simulation results are represented.Key words :Linux ;real - time ;preemptive kernel ;scheduler - latency0引 言Linux是一个性能卓越、 技术上处于前沿的现代操作系统。 但它是一个通用的分时操作系统,具有内核不可抢占 、 被动调度、优先级倒置、定
5、时粒度粗糙等特点。Linux内核的这些固有特点,使得Linux系统对实时任务的响应时间具有很大的不确定性和不可预测性。这样应用在实时性要求比较高的环境中,就有必要对Linux内核做进一步的改进 。Linux操作系统在实时系统领域面临这些挑战已经引起了业界的重视,目前已经有多种措施来提高Linux系统的实时性能 。主要的策略有:(1)增加实时子内核。如美国新墨西哥洲大学计算机系开发的RT - Linux1 ,它是由两个子内核构成,一个用于Linux环境,一个用于实时环境。另外遵循GPL的RTAI2 (实时应用程序接口)也类似于这种方式。这两种方法可以有效改善系统中断延迟时间的问题。但这种策略设计
6、了一个完全独立的实时核心而没有使用原有Linux内核,导致Linux系统的一些优势难以继承,尤其是与Linux内核相关的一些优势无法获得。比如Linux内核对大量硬件的广泛支持,Linux核心超群的可靠性、稳定性等。 另外,由于这种方法并没有通过修改Linux内核代码来开发实时内核,而是在Linux系统之上重新设计了一个实时核心,这样的开发使得源代码不开放。(2)为Linux打实时补丁3 。这样可以借助Linux操作系统的源代码补丁来提高系统的实时性能。当前主要的实时补丁有低响应时间补丁、 抢占任务补丁以及实时调度程序补丁等等。综合考虑上面两种策略,通过修改Linux操作系统的源代码来提高系统
7、的实时性更具有优势。目前国内也已经有很多实时化改造的研究。但这些研究很多要么是只给出国外一些具有代表性的实时化改造方案4 ,要么是从理论的角度笼统地介绍实时性的改造5 ,都没有通过深入研究Linux源代码来分析Linux实时性的改进 。对系统实时性的改造是一个很庞大的工程,面面俱到会导致分析不深入。因此在深入分析Linux有关进程调度和中断的源代码基础上,着重介绍通过抢占任务补丁来提高Linux的实时性。第17卷 第9期2007年9月计 算 机 技 术 与 发 展COMPU TER TECHNOLO GY AND DEV ELOPMENT Vol. 17No. 9Sep.2007名师资料总结
8、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 1Linux操作系统实时性的瓶颈1. 1实时操作系统的指标首先来看实时操作系统对 “实时” 的衡量指标。一般来讲主要有两大指标,一是“中断处理延迟”,二是“任务调度延迟”。(1)中断处理延迟 。中断处理延迟是从中断产生到CPU开始响应该中断的时间段。最影响这个指标的是处理器关中断以及中断控制器屏蔽掉中断整个区域的代码量,无论是操作系统内核还是驱动程序还是应用程序(某些实时操作系统允许应用程序关中
9、断) ,都会影响这个指标 。另外影响这个指标的是硬件所产生的中断延迟,但这里所说的中断延迟只考虑软件产生的延迟,硬件产生的中断延迟一般只是通过提高硬件的处理速度来降低 。(2)任务调度延迟 。任务调度延迟是指从系统需要进行进程调度到实际开始进行进程调度的时间段。一般来说,可以用当前运行低优先级任务的系统中出现了高优先级任务的时刻到高优先级任务被调度后开始运行的这段时间来衡量。这里主要关注任务调度延迟这个指标,因为Linux系统之所以“实时性” 不好,很大程度上就是因为任务调度延迟太大。而影响这个指标最大因素是“内核抢占性”。对于Linux这样一个区分用户级和内核级的操作系统而言,如果内核不可抢
10、占,那就意味着最大任务调度延迟指标会受到运行时间最长的那个系统调用时间的影响(原因在下文分析)。当然还有别的因素会影响任务调度延迟,如使用操作系统的虚存管理等 。总之,Linux内核实时性不强,很大程度就是任务调度延迟过长,而导致调度延迟过长主要因素是内核不可抢占。1. 2内核的不可抢占和关中断Linux 2. 4内核的调度方式可以说是 “有条件的可抢占” 方式6 。当进程在用户空间运行时,不管自愿不自愿,一旦有必要(例如,高优先级的进程已就绪) ,内核就可以暂时剥夺其运行而调度其他进程。可是一旦进程进入了内核空间,这时尽管内核知道应该要调度,但却不会发生,一直要回到用户空间的前夕才能剥夺其运
11、行。下面结合Linux 2. 4的原代码和特定情景来做进一步分析,此情景的执行过程如图1所示7 。假设当前系统只有两个任务A ,B(理想化的假设) ,且任务B的优先级高于任务A的优先级。 从t0时刻起,任务A在用户空间运行,任务B在睡眠,等待某事件中断唤醒。t1时刻,任务A要通过系统调用完成某个操作,这样,任务A就进入内核空间运行了。t2时刻,某个事件发生引起外部中断发生(该中断处理程序会唤醒任务B ,这种情况在实时操作系统中很常见)。在内核中唤醒一个睡眠中的进程要调用函数wake-up-pro2cess() ,代码在kernel/ sched.c中。下面是该函数中比较重要的语句:图1 任务响
12、应模型p - state =TASK-RUNNIN G; / / 把进程的状态设置为TASK-RUNNIN Gadd-to-runqueue(p) ; / / 把该进程挂入到可执行队列中reschedule-idle(p) ; / / 将所唤醒的进程p 与当前进程进行比较 ,如果所唤醒的进程优先级更高,就将当前进程的进程描述符中的 need-resched域置为 1void reschedule-idle(struct task-struct3 p). . . . . .tsk = cpu-curr (this-cpu)/ / 进程 tsk 是当前运行的进程if ( preemption-go
13、odness( tsk , p ,this-cpu)1) / / 被唤醒的进程优先级高tsk - need-resched = 1 ;/ / 当前进程的need-resched置为 1. . . . . .任务B的优先级高于任务A ,因此任务A的进程描述符的neee-resched被置为1。由于t2时刻系统在内核态下运行,CPU可能关中断,所以中断不能马上响应。直到t3时刻,内核态代码使能中断响应(Linux内核退出临界区) ,这个时候CPU开始响应在t2时刻产生的中断,并立刻开始执行中断服务程序;当中断服务程序执行完之后(在这个中断服务程序中唤醒了任务B) ,中断返回。注意到此时返回的还是内
14、核空间,此时不会发生任务调度,即使内核知道有更高优先级的任务需要调度。原因是Lin2ux2. 4中发生调度的必要条件是从系统空间返回到用户空间 。因此,内核响应中断后,要到任务A的系统调用返回时才会发生调度,任务B才有可能被运行。?24?计算机技术与发展第17卷名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 具体代码如下:ENTR Y(ret-from-intr )# 中断返回. . . . . . . .277 testl (
15、VM-MASK | 3) , %eax# 判断返回到用户空间还是内核空间278 jne ret-with-reschedule# 返回到内核空间不发生调度279 jmp restore-all. . . . . . .217 ret-with-reschedule:218 cmpl 0 ,need-resched ( %ebx)# 即使 need-resched为 1 也不会发生调度219 jne reschedule在t4时刻,中断返回到内核空间继续执行任务A ,t5时刻任务A系统调用完成以后返回,此时返回的用户空间,testl( VM2MASK | 3) , %eax结果非0 ,因此会跳转
16、到ret-with-reschedule处引起任务调度。由于任务B的优先级高,在t5时刻发生调度后,任务B获得运行的资格 。在这个情景中,任务调度延迟时间是(t5 - t4) ,这段时间基本上等于中断返回后任务A系统调用的时间。所以最大任务调度延迟指标会受到运行时间最长的那个系统调用时间的影响。如果恰好任务A系统调用过长的话,那么调度就会过分地推迟,任务调度延迟时间会过大。而实时系统对响应时间有严格的规定,要求有很小的调度延迟。这样长的调度延迟对许多实时应用是无法满足的,这也是现实情况下优先级逆转的情况 。2实时性的改进Linux内核不可抢占性既不满足实时调度算法的要求,也不能满足实时系统对外
17、界事务响应延迟的要求,所以为了将Linux作为实时操作系统,提高它的实时性,必须让内核具有抢占性。Linux内核之所以被设计成不可抢占的,是为了保护内核的数据结构不被破坏,由此可以得出,如果内核可以抢占,必须提供一种保护机制用以保护内核的数据结构和临界资源。 幸运的是为了支持对称并行处理器体系(SMP)设计的spinlock宏定义恰好符合这一要求。因而,内核可抢占方案的实现也就顺理成章了。内核抢占的基本思想就是让调度程序获得更多的执行机会,从而减少了从一个事件发生到调度程序被执行的时间间隔,也就是降低任务响应延迟。在当前进程具有被“安全” 地抢占的条件,并且有一个等待处理的重新调度请求,内核就
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Linux操作系统实时性分析 2022 Linux 操作系统 实时 分析
限制150内