00000003.htm

来自「水木社区 embeded 版精华区 下载」· HTM 代码 · 共 319 行 · 第 1/3 页

HTM
319
字号
&nbsp;&nbsp;&nbsp;&nbsp;获得互斥信号量&nbsp;<br />搜索空闲内存块链表&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;释放互斥信号量&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;值得注意的是搜索一个足够大的空闲内存块的可能的冗长的时间是发生在调用任务&nbsp;<br />的上下文中。这是可以被高优先级的任务抢占的(除了信号量调用的这段执行时间)。&nbsp;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;在一个标准的统一结构的实时内核中,内存分配例程操作如下:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;进入内核&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;搜索空闲内存块链表&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;退出内核&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;整个内存分配发生在内核级,任务抢占被禁止如果高优先级的任务在此时变为就绪&nbsp;<br />态,它必须等待直到内核为低优先级的任务完成内存分配。有些操作系统甚至在这段市&nbsp;<br />时间禁止中断。&nbsp;<br />任务级操作系统服务&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Wind&nbsp;River&nbsp;System的实时操作系统,VxWorks,显示了这样设计的一个最小内核是&nbsp;<br />能够满足需求的。VxWorks是现在能够获得的独立于任何处理器的、拥有相当小内核的、&nbsp;<br />功能完全的层次结构的实时操作系统。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VxWorks在内核之上提供了大量的功能。它包括内存管理,一个完整的BSD4.3网络包&nbsp;<br />,TCP/IP,网络文件系统(NFS),远程过程调用(RPC),UNIX兼容的链接加载模块,&nbsp;<br />C语言的解释界面,各种类型的定时器,性能监测组件,调试工具,额外的通信工具如管&nbsp;<br />道、信号和套接字,I/O和文件系统,和许多功能例程。这些都不是运行在内核级,所以&nbsp;<br />不会禁止中断或任务抢占。&nbsp;<br />可配置性&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;实时应用有多种内核需求。没有哪个内核有一个用来满足每种需求的很好的设计折&nbsp;<br />衷。然而,一个内核可以通过配置来调整特定的性能特性,裁减实时系统来最好地适应&nbsp;<br />一个应用的要求。不可预见的内核配置性以用户可选择的内核排队算法的形式提供给应&nbsp;<br />用。&nbsp;<br />排队策略&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VxWorks中的排队库是独立于使用他们的内核队列功能而执行的,这样提供了将来增&nbsp;<br />加新的排队方式的灵活性。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;在VxWorks中有各种内核队列。就绪队列是一个按优先级索引的所有等待调度的任务&nbsp;<br />队列。滴答队列用于定时功能。信号量是一个等待信号量的被阻塞任务的链表。活动队&nbsp;<br />列是一个系统中所有任务的一个先进先出(FIFO)的链表。这些队列中的每个队列都需&nbsp;<br />要一个不同的排队算法。这些算法不是被内嵌在内核中,而是被抽取到一个自治的、可&nbsp;<br />转换的排队库中。这种灵活的组织形式是满足特殊的配置需求的基础。&nbsp;<br />可扩展性&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;支持不可预见的内核扩展的能力与以有功能的可配置性是同样重要的。简单的内核&nbsp;<br />接口和互斥方法使内核级功能扩展相当容易;&nbsp;在某些情况下,应用可以仅利用内核钩子&nbsp;<br />函数来实现特定的扩展。&nbsp;<br />内部钩子函数&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;为了不修改内核而能够向系统增加额外的任务相关的功能,VxWorks提供了任务创建&nbsp;<br />、切换和删除的钩子函数。这些允许在任务被创建、&nbsp;上下文切换和任务被删除的时候额&nbsp;<br />外的例程被调用执行。这些钩子函数可以利用任务上下文中的空闲区创建wind内核的任&nbsp;<br />务特性。&nbsp;<br />未来考虑&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;有许多系统函数现在变得越来越重要,而且会影响到内核设计时的抢占延时。尽管&nbsp;<br />涉及这些问题一个完整的讨论超出了本文的范围,但值得简单地提一下。&nbsp;<br />RISC/CISC&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;设计一个独立于CPU的操作系统一直是一个挑战。随着新的RSIC(精简指令集)处理&nbsp;<br />器变得很流行,这些难度也加大了。为了在RISC环境下有效地执行,内核和操作系统需&nbsp;<br />要有执行不同策略的灵活性。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;例如,考虑在任务切换时内核执行的例程。在CISC(复杂指令集,如680x0或80x86&nbsp;<br />)CPU,内核为每个任务存储一套完整的寄存器,在运行任务的时候将这些寄存器换入换&nbsp;<br />出。在一个RISC机器上,这样是不合理的,因为涉及到太多的寄存器。所以内核需要一&nbsp;<br />个更精密复杂的策略,如为任务缓存寄存器,允许应用指定一些寄存器给特殊的任务。&nbsp;<br />&nbsp;<br />移植性&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;为了使wind内核在他们出现的结构上能够运行,需要有一个可移植的内核版本。这&nbsp;<br />使移植是可行的,但不是最优化的。&nbsp;<br />多处理&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持紧耦合的多处理需求要求实时内核的内部功能包含,在理想情况下,在远&nbsp;<br />端请求内核调用,如从一个处理器到另一个处理器。这就要涉及到信号量调用(为处理&nbsp;<br />器间同步)和任务调用(为了控制另一个CPU上的任务)。这种复杂性无疑会增加内核级&nbsp;<br />功能调用的开销,但是许多服务如对象标识可以在任务级执行。在多处理系统中保持一&nbsp;<br />个最小内核的优点是处理器之间的互锁可以有较好的时间粒度。大的内核将在内核级消&nbsp;<br />耗额外的时间,仅能获得粗糙的互锁时间粒度。&nbsp;<br />Ada&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Ada语言为实时系统设计者提供了象聚会机制这样的任务原语。异常处理、任务终止&nbsp;<br />、终止替换和聚会都将潜在地影响内核设计。这些操作可以由前面讨论的任务和同步机&nbsp;<br />制构造,为了保持减小抢占延时的设计目标,许多工作能够在任务级执行。&nbsp;<br />4.&nbsp;实时内核的重要尺度&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;许多性能特性被用来比较以有的实时内核,这些包括:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;快速的任务上下文切换----由于实时系统的多任务的特性,系统能够快速地从一个&nbsp;<br />任务切换到另一个任务是很重要的。在分时系统中,如UNIX,上下文切换是在ms级。Wi&nbsp;<br />nd内核执行原始上下文切换只用17us。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;最小的同步开销----因为同步是实现资源互斥访问的基本方法,这些操作所引起的&nbsp;<br />开销最小化是很重要的。在VxWorks中,请求和释放二值信号量仅用8us。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;最小的中断延时----因为外部世界来的事件通常以中断的形式到来,操作系统快速&nbsp;<br />的处理这些中断是很重要的。内核在操作一些临界数据结构的时候必须禁止中断。为了&nbsp;<br />减小中断延时,必须使这些时间最小化。Wind内核的中断延时小于10us。&nbsp;<br />抢占延时对性能指标的影响&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;当许多的实时解决方案被提交给应用工程师时,&nbsp;性能指标对于评估供应商的产品变&nbsp;<br />得越来越重要。不象上下文切换和中断延时,抢占延时很难测量。所以它很少在说明中&nbsp;<br />被提及。但是考虑到当内核通常禁止上下文切换会长达数百微妙,而声称一个50us的固&nbsp;<br />定长度(与任务个数无关)的上下文切换时间是毫无意义的。除了很难测量外,抢占延&nbsp;<br />时可能会削弱许多性能指标的有效性。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Wind内核通过减小内核的大小来尽量减小抢占延时。&nbsp;包含繁多功能的内核必将引起&nbsp;<br />长的抢占延时。&nbsp;<br />5.&nbsp;结论&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;为了满足对实时内核日益增加的要求,如新的调度算法、多处理、Ada和RISC结构,&nbsp;<br />wind内核始终以灵活性和可配置性为设计目标。它所提供的优秀的运行性能将成为实时&nbsp;<br />应用需求新标准。&nbsp;<br />d&nbsp;<br />&nbsp;<br />--&nbsp;<br />&nbsp;<br />※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;smth.org·[FROM:&nbsp;166.111.161.11]&nbsp;<br /><a href="00000002.htm">上一篇</a><a href="javascript:history.go(-1)">返回上一页</a><a href="index.htm">回到目录</a><a href="#top">回到页首</a><a href="00000004.htm">下一篇</a></h1></center><center><h1>BBS 水木清华站∶精华区</h1></center></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?