教你怎样把Linux变为及时利用体系
发布日期:2011-05-20
已往很多嵌入式体系不是一个利用体系,大概是提供商的专有内核,大概是DOS利用体系的扩展。显然这些要领并不克不及适应即日嵌入式体系开辟的恳求!现有的一些贸易及时利用体系,只管提供了很小的内核和多任务开辟环境,但性能并不睬想,也不切合如今及时嵌入式市场的需求。
因此,人们把眼光投向了通用利用体系(比喻Windows、Solaris、Linux),渴望把它们“改造”为及时利用体系。通常这些利用体系结果强大,布局巨大,易于软件的二次开辟,实用性强,并且提供编程职员熟习的标准API。别的,这些利用体系也提供了一些对及时软件开辟的支持。然而,这些利用体系用于嵌入式体系的开辟回存在不敷。嵌入式体系恳求具备高可靠性,餍足应用需求的可剪裁性,以及比通用利用体系恳求更高的及时性。
做为嵌入式体系开辟的办理方案,Linux在浩繁通用利用体系中具有唯一无二的上风。
起首,Windows和Solaris等专有贸易利用体系的剪裁受到商家的严格控制。这大大限定了开辟者的剪裁深度。而Linux依照GPL协议,开放全部体系源代码,非常易于剪裁。
其次,同别的开放源码的通用利用体系(如FreeBSD)相比,Linux在多种处理惩罚处罚器、开辟板支持和软件开辟东西支持上有很强的上风。
Linux最初也是作为通用利用体系而筹划开辟的,但提供了一些及时处理惩罚处罚的支持。这包括支持大部分POSIX标准中的及时结果,支持多任务、多线程,具有丰富的通讯机制等。
Linux还提供切合了POSIX标准的调理战略,包括FIFO调理战略、时间片轮转调理战略和静态优先级抢占式调理战略。其默认的调理战略是第三种。Linux还提供了内存锁定结果,以克制在及时处理惩罚处罚中存储页被换出,也提供了切合POSIX 标准的及时信号机制。
一个致命标题是,Linux在用户态支持可抢占调理战略,而在内核态却不支持抢占式调理战略。如许运行在Linux内核态的任务(或体系调用)是不克不及被别的优先级更高的任务所抢占的,如许就会引起优先级逆转标题。别的,Linux利用体系的克制处理惩罚处罚句柄是不可调理的,不克不及依优先级曲折调理。而在及时体系中,却渴望克制处理惩罚处罚句柄同及时任务一样,可以有优先级来被体系的调理步调所调理。
别的,我们还体贴和任务相适时间干系的时钟精度,以及由于资源共享而带来的优先级逆转标题。Linux中硬件时钟克制的默认时间隔绝是10ms,全部的软件时钟都是靠硬件来触发的。而大抵同步机制(互斥)不支持优先级承继又很大概导致优先级逆转。
独立核要领
Linux作为及时体系的独立核要领是指计划一种完全独立的及时内核,但其API 与Linux内核相兼容。这种要领的理论底子是一款精良的及时利用体系必须在其筹划之初就充分思量到体系及时性的恳求,并可以大概提供切合标准的API。这种实现要领对很多与POSIX 兼容的专有及时体系提供商很有吸引力。
这种要领的范畴性是由于筹划了一个完全独立的及时内核而没有利用原有Linux内核,导致Linux体系的一些上风难以承继,尤其是与Linux内核干系的一些上风无法得到。比如Linux内查对大量硬件的广泛支持,Linux内核轶群的可靠性、稳固性等。别的,由于这种要领并没有通过修改Linux内核代码来开辟及时内核,而是在Linux体系之上重新筹划了一个及时内核,如许的开辟并不恳求源代码开放。因此,Linux一些基于开放源代码的上风也势必受损。着末一点,恣意基于Linux内核的开辟结果也无法方便地应用到及时内核中。
固然这种实现要领也从Linux体系中得到了很多好处。由于Linux体系的支持,及时内核就并不须要“真”的去实现。并且熟习Linux体系的开辟职员也可以很快地熟习这种要领开辟出的及时体系。人们也会天然地想到用Linux体系做嵌入式体系的开辟平台。别的,要是这种及时体系的API是Linux体系API子集的话,我们还可以只在Linux主机上仿真,举行应用步调的开辟和调试,免除了长途调试之苦!
与Linux API的兼容程度是评估这类及时体系的一个告急指标。要是一个及时体系兼容了全部Linux API,那么就容许全部Linux上的应用步调和库在其上运行利用。因此,这将会带来一个巨大的好处,全部在Linux上可用的第三方软件均可以在其上利用。固然,开辟一款如许兼容全部Linux API的及时体系决不是件容易的事,尤其是敷衍单个开辟商来说。
以是,大量的第三方软件并不克不及很容易地移植到及时体系中来,这点不敷,也使Linux的上风大打扣头!
双核要领
这种要领在同一硬件平台上采取了两个相互共同,共同变乱的体系内核,一个内核提供精确的及时多任务办理,另一个内核提供巨大的非及时通用结果。
这种要领是通过在Linux利用体系的最底层增长一层及时内核层来实现的。及时内核认真硬件办理并提供及时任务办理。及时内核还用软件“仿照”惯例Linux体系对底层硬件的利用/克制克制,而不是真正的利用克制控制寄存器。Linux内核被看做及时内核中优先级最低的任务来调理,只有当没有可运行的及时任务时Linux内核才被调理。
这种要领的一个关键地点是运行在惯例Linux内核上的全部非及时任务必须是支持可抢占式调理的。如许才华做到对及时内核提供精确及时包管没有恣意影响。由于及时内核非常小,并不会增长整个别系的负载,全部这些对开辟及时性恳求严格的及时软件都提供了有力保障。
这种要领的弊端在于及时任务的开辟是直接面向提供精确及时办事的小及时内核的,而不是结果强大的惯例Linux内核。因此,及时任务是运行在体系内核层的,这就意味着这些及时任务可以运行在没有内存掩护的级别之上。以是,一个及时任务的错误大概会导致整个别系的瘫痪!更要命的是,这些及时任务的开辟由于面对的是小的及时内核,而不克不及直接利用Linux API和第三方软件及运行库。
这种开辟模式表现我们必须要映射用举行静态阐发。把它阐发成及时部分和非及时部分。在大多环境下,这是件功德情。它迫使开辟职员将应用体系阐发成及时子体系和非及时子体系两部分。但很显然,利用这种开辟模式也限定了应用的典范!由于,这种用二元论见解对待及时体系的要领并不得当全部的应用。在一些应用中,及时部分和非及时部分的边界并不好坏常明白,时期大概存在着差别程度的软及时部分。
这种要领的另一个不敷之处是,开辟模式殽杂了及时应用的两个不干系维度――结果需求和及时需求。它恳求应用的及时需求必须限定于由及时内核提供的结果需求限度以内。而及时内核提供的结果支持非常有限。固然我们也可以扩展及时内核的结果,比如增长及时网络结果等。然而,新建长的部分很有大概会重叠Linux内核已有结果,而导致了不须要的体系“膨胀”,并折损这种要领的价格。 修改核要领
这种要领是基于已有Linux体系对及时软件开辟的支持,举行源代码级修改而使Linux变成一个真正的及时利用体系。这种要领也是和Linux哲学切合合的。恣意基于Linux内核源代码修改的产品,都要依照GPL 协议,对全部软件职员开放源代码。一旦很多人以为它是有效的,就会有人对它举行维护,大概是殽杂在通用Linux内核中,大概是单独分出一个及时Linux分支。
这种要领的中间原则是经心选择部分窜改,就可以餍足一系列干系Linux及时开辟。别的,由于这些窜改都是相对局部的,不会从底子上变革Linux的内核。并且一些窜改还可以通过惯例Linux的可加载模块要领完成。在须要时体系可以动态加载该结果模块,在不须要时还可以动态卸载该模块。
比如,修改之一是内核抢占式调理。把内核从非抢占式变成抢占式是布局上的大变动,并大概引起很多标题,但很多标题已经在Linux支持SMP 的时间办理了。因此,内核的抢占式修改就可以大抵地利用SMP 挂钩。另一个修改点是前面提到过的使克制处理惩罚处罚句柄可调理。另有一些修改是全局的,比喻修改体系时钟办事来提供更高精度的“心跳”,而不增长不须要的体系负载,大概是提供在内核实现互斥机制来支持优先级承继。
资源核要领
这种要领是为办理传统及时利用体系中牢固优先级抢占式调理战略的范畴性而孕育孕育产生的。牢固优先级抢占式调理算法没有任务间的临时掩护。因此,可预见的任务相适时间依赖于对全部更高优先级任务实行时间的预测。在如许的体系中,可预见性是与全局干系的,并且大概被一个糟糕任务而影响的。别的,这种用静态见解对待及时体系也是不当的。在很多及时应用中,更渴望及时体系可以根据应用步调得到资源动态地调解任务属性,以求得到最优结果。
资源核要领是一种以资源为中间来引导及时内核提供精确的、有包管的、可抢占的获取体系资源的要领。只要及时应用所需资源可以由内核背景资源办理步调调配餍足,及时内核是容许及时应用可配置的。因此,及时内核着实是提供了及时应用可构建的底子――从配置大抵的及时体系到巨大的及时体系,都可以通过动态地变革及时任务属性和它们在整个别系中的优先级来餍足。
这种要领的最大长处是体系具有很好的壮实性、可精确预见的及时性。另一个长处是容许应用步调根据实际环境动态调解自身属性。别的,这种要领非常得当嵌入式体系的开辟。