没有合适的资源?快使用搜索试试~ 我知道了~
首页vxworks内核详细解读
资源详情
资源评论
资源推荐

VxWorks 内核解读
()
VxWorks 内核解读............................................................................................................................1
1 VxWorks 内核简介.........................................................................................................................3
1.1 实时内核概述......................................................................................................................3
1.1.1 实时硬件系统设计...................................................................................................4
1.1.2 实时操作系统设计...................................................................................................4
1.2 微内核操作系统设计理念..................................................................................................6
1.3 wind 微内核设计.................................................................................................................8
1.4 Wind 内核类设计思想........................................................................................................9
1.5 Wind 内核的特性..............................................................................................................12
2 VxWorks 内核设计.......................................................................................................................13
2.1 Wind 内核结构..................................................................................................................13
2.2 Wind 内核的类和对象......................................................................................................16
2.3 wind 内核特性...................................................................................................................17
2.4 Wind 内核设计的优点......................................................................................................19
3 VxWorks 内核工作原理...............................................................................................................21
3.1 Wind 内核调度器工作原理..............................................................................................21
3.2 调度器调度时机................................................................................................................24
3.2.1 第一种情况:.........................................................................................................25
3.2.2 第二种情况:.........................................................................................................27
3.2.3 第三种情况:.........................................................................................................27
3.2.4 第四种情况:.........................................................................................................28
3.3 wind 内核态分析...............................................................................................................30
4 VxWorks 内核中断处理...............................................................................................................31
4.1 Pentium 处理器概述..........................................................................................................31
4.1.1 Pentium CPU 的中断类型......................................................................................31
4.1.2 Pentium CPU 的中断响应过程..............................................................................31
4.1.3 X86 架构的计算机对外部中断的管理.................................................................32
4.2 Wind 内核中断处理流程..................................................................................................33
4.3 VxWorks 中断处理机制....................................................................................................35
4.3.1 中断发生前的准备工作.........................................................................................36
4.3.2 中断发生后的处理.................................................................................................40
4.4 小结....................................................................................................................................47
5 VxWorks 内核内存管理...............................................................................................................47
5.1 VxWorks 内存管理概述....................................................................................................48
5.1.1 VxWorks 内存布局.................................................................................................48
5.1.2 VxWorks 内存分配策略.........................................................................................50
5.1.3 VxWorks 对虚拟内存的支持.................................................................................51
5.2 VxWorks 内存分配算法....................................................................................................51

5.2.1 VxWorks 核心数据结构.........................................................................................51
5.2.2 VxWorks 核心分区初始化.....................................................................................55
5.2.3 memLibInit ()分析..................................................................................................55
5.2.4 memPartLibInit (pPool, poolSize)分析..................................................................56
5.2.5 memPartInit (&memSysPartition, pPool, poolSize)分析......................................58
5.2.6 将初始内存块加入系统分区内存池中................................................................59
5.3 VxWorks 内存分配机制....................................................................................................64
5.3.1 malloc()分配内存机制...........................................................................................64
5.3.2 内存块的分割.........................................................................................................67
5.3.3 内存块的释放 free()...............................................................................................71
5.4 VxWorks 与动态内存相关的 API....................................................................................74
5.4 VxWorks 内存分配机制总结....................................................................................75
6 VxWorks 初始化...........................................................................................................................76
6.1 处理器平台相关的初始化................................................................................................76
6.2 第一个 C 函数 usrInit()执行.............................................................................................80
6.3 usrKernelInit()函数分析....................................................................................................81
6.3.1 就绪队列.................................................................................................................82
6.3.2 定时队列设计.........................................................................................................88
6.3.3 活动队列.................................................................................................................91
6.3.4 内核延时队列.........................................................................................................94
6.4 kernelInit()构造初始化任务 taskRoot 上下文.................................................................96
6.5 初始化任务 taskRoot 的执行..........................................................................................100
7 VxWorks 内核驱动.....................................................................................................................101
7.1 VxWorks I/O 框架...........................................................................................................103
7.2 VxWorks I/O 基本接口...................................................................................................103
7.3 VxWorks 驱动层次结构..................................................................................................105
7.4 VxWorks I/O 驱动框架构成...........................................................................................105
7.4.1 系统驱动表...........................................................................................................106
7.4.2 系统设备表...........................................................................................................109
7.4.3 文件描述符...........................................................................................................112
7.4.4 三张表之间的联系...............................................................................................115
7.5 小结:..............................................................................................................................117

前言:我在跟身边的嵌入式工程师同行交流的时候,发现大家对嵌入式 系统的 内核不是
特别了解,而网上对于 的 内核也没有系统性的解读与分析,因此我决定发表一系列的博文来系
统性地解读 内核的设计思想。我选择的是 系统的 版本内核(这个版本的代码网
上都有分享 ),在分析的过程中,大家有任何的疑问,都可以给我留言,以便我进一步的完善博文,
使得后来者阅读起来更为流畅。
本文首先从实时内核的定义出发,对实时操作系统进行了介绍,并对实时操作系统的特点进行了说明,接
着从内核的功能和结构角度介绍了整体式内核,层次式内核,以及微内核。最后对具有微内核特性的
内核进行了介绍。
1 VxWorks 内核简介
1.1 实时内核概述
实时”表示控制系统能够及时处理系统中发生的要求控制的外部事件。从事件发生到系统产生响应的反应
时间称为延迟(Latency)。对于实时系统,一个最重要的条件就是延迟有确定的上界这样的系统属于确定性系
统。满足这个条件后,根据这个上界大小再区分不同实时系统的性能。这里的“系统”是从系统论的观点讲的一
个功能完整的设计,能够独立和外部世界交互、实现预期功能。这包括实时硬件系统设计、实时操作系统设计、
实时多任务设计 ! 部分。后两者可以概括为实时软件系统设计。实现实时系统是这 ! 部分有机结合的结果。
从另外一个角度,即实时程度看,可以把系统分为硬实时系统和软实时系统。硬实时系统是这样一种系统,
它的时间要求有一个确定的截止期限"#,超出截止期限的响应,即是计算无误,也是无法容忍的错误
结果,通常会引起严重的后果,这样的系统属于硬实时系统。对于软实时系统来说,“实时性”仅仅是“程度”概念,
在提交诸如中断、计时和调度的操作系统服务时,系统定义一个时间范围内的延迟。在该范围内,越早给出响
应越有价值,只要不超出范围,晚点给出的结果价值下降,但可以容忍。
因此一个 $%& 内核必须满足许多特定的实时环境所提出的基本要求,这些包括:
多任务:由于真实世界的事件的异步性,能够运行许多并发进程或任务是很重要的。多任务提供
了一个较好的对真实世界的匹配,因为它允许对应于许多外部事件的多线程执行。系统内核分配
'() 给这些任务来获得并发性。
抢占调度:真实世界的事件具有继承的优先级,在分配 '() 的时候要注意到这些优先级。基于
优先级的抢占调度,任务都被指定了优先级, 在能够执行的任务(没有被挂起或正在等待资源)
中,优先级最高的任务被分配 '() 资源。换句话说,当一个高优先级的任务变为可执行态
内核中称为就绪态 $#*&#,它会立即抢占当前正在运行的较低优先级的任务。
快速灵活的任务间的通信与同步:在一个实时系统中,可能有许多任务作为一个应用的一部分执
行。系统必须提供这些任务间的快速且功能强大的通信机制。内核也要提供为了有效地共享不可抢
占的资源或临界区所需的同步机制。
方便的任务与中断之间的通信:尽管真实世界的事件通常作为中断方式到来,但为了提供有效的
排队、优先化和减少中断延时,我们通常希望在任务级处理相应的工作+'&,,, 内核采用了这种
策略。所以需要任务级和中断级之间存在通信。
性能边界:一个实时内核必须提供最坏情况的性能优化,而非针对吞吐量的性能优化。我们更期
望一个系统能够始终以 - 微妙+执行一个函数,而不期望系统平均以 .- 微妙+执行该函数,
但偶尔会以 / 微妙+执行它。

特殊考虑:由于对实时内核的要求的增加,必须考虑对内核支持不断增加的复杂功能的要求。这
包括多进程处理比如 $%(,对更新的、功能更强的处理器结构比如 0+1'()
的支持。
1.1.1 实时硬件系统设计
实时硬件系统设计是其它两部分的基础。实时硬件系统设计要求在满足软件系统充分高效的前提下,必须
提供足够的处理能力。例如,硬件系统提供的中断处理逻辑能同时响应的外部事件数量、硬件反应时间、内存
大小、处理器计算能力、总线能力等,以保证最坏情况下所有计算仍然得以完成。多处理的硬件系统还包括内
部通信速率设计。当硬件系统不能保证达到实时要求时,可以确信整个系统不是实时的。目前,各种硬件速度
不断提高,先进技术大量涌现,硬件在大多数应用中已经不是实时系统的瓶颈。因而,实时系统的关键集中在
实时软件系统设计,这方面也成了实时性研究的主要内容,也是最复杂的部分。许多场合甚至对实时硬件系统
和实时操作系统不加区分。
1.1.2 实时操作系统设计
先来看实时操作系统性能评价的几个主要指标:
中断延迟时间:对一个实时操作系统来说,最重要的指标就是中断关了多长时间,所有实时系统
在进入临界区代码段之前都要关中断,执行完临界代码之后再开中断。关中断的时间越长,中断延
迟就越长。因此中断延迟时间可以表述为关中断的最长时间与开始执行中断服务子程序第一条指令
的时间之和,有时也表述为从系统接收中断信号到操作系统做出响应,进入中断服务程序的时间。
中断响应时间:中断响应时间定义为从中断发生到开始执行用户中断服务子程序代码来处理这个
中断的时间。中断响应时间包括开始处理这个中断前的全部开销。中断响应时间包含了中断延迟时
间,因此在考虑一个实时系统对外部中断的处理时间时,通常指考虑中断响应时间。典型地将执行
用户代码之前保护现场,将 '()的各寄存器推入堆栈的时间记为中断响应时间。
任务切换时间:多任务之间进行切换所花费的时间,即从前一个任务开始保存上下文的第一条指
令开始,到后一个任务恢复上下文开始运行第一条指令为止的时间段。
从实时性角度看,操作系统经历了前后台系统、分时操作系统和实时操作系统 ! 个阶段。
前后台系统(Foreground/Background System)其实没有操作系统,系统中只运行一个无限主循
环,没有多任务的概念,但是通过中断服务程序响应外部事件。在前后台系统中,对外部事件的实时响应特性
从两方面看。
中断延迟时间:主循环一般保持中断开放状态,因此前后台系统中断响应非常快,并且通常允许
嵌套;
中断响应时间:需要经历一次主循环才能对中断服务程序中采集的外部请求进行处理,因此系统
响应时间决定于主循环周期。
分时操作系统(Time-sharing Operating System)将系统计算能力分成时间片,按照一定的策略分
配给各个任务,通常在分配过程中追求某种意义上的公平,分时操作系统不保证实时性。
实时操作系统(RTOS)的目的是实现对外部事件的实时响应,即根据前面对实时性的定义,实时操作系统
必须在确定的时间内给出响应。实时操作系统必须满足下面 2 个条件:
可抢占式的优先级调度内核,当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当
前任务的 '()使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了 '() 的控制
权,即始终保证优先级最高的任务拥有 '() 使用权,如图 .. 所示

中断具有优先级,且中断可嵌套,即高优先级的中断可以打断正在执行的低优先级中断处理程序,
优先得到执行,等到其处理完毕再回到低优先级的任务继续执行,
防止优先级反转,系统服务的优先级由请求该服务的任务的优先级确定,具有优先级保护机制,
以防止优先级翻转;优先级翻转式指当一个高优先级的任务被迫等待一个低优先级的任务不确定的
完成时间的时候,优先级反转将会发生。考虑下面的情景:任务 %.、%、%! 是三个优先级依次
降低的任务。%! 已经通过获取与保护资源相关的信号量,从而获取了这些资源。当 %. 抢占 %! 通
过获取相同的信号量来竞争这些资源的时候,%! 将会被阻塞。如果我们能够保证 %. 阻塞的时间不
会长于 %! 正在执行后释放这些资源的时间,情况不会发生特别严重,毕竟 %. 占用的这个资源是
不可抢占的。但是低优先级的任务是脆弱的,通常会被中等优先级的任务所抢占。例如此时的
%,这将会使 %! 无法释放 %. 需要的资源。这种情况将会一直存在,将会使得处于最高优先级的
%. 阻塞的时间不确定。示意图如 .。
1.2 优先级反转示意图
剩余63页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1