VxWorks+SMP内核调度、信号量和中断机制的设计与实现
- 格式:pdf
- 大小:3.31 MB
- 文档页数:69
VxWorks操作系统简介VxWorks操作系统简介VxWorks操作系统是一种广泛应用于嵌入式系统开发的实时操作系统。
本文将详细介绍VxWorks操作系统的架构、特性、应用领域以及相关的法律名词注释。
一、VxWorks操作系统架构VxWorks操作系统采用分层架构,包括内核层、中间层以及外围应用层。
具体架构如下:⒈内核层:提供底层的操作系统服务,包括任务管理、内存管理、中断处理、设备驱动等。
内核层使用高度模块化的设计,可以根据需求选择性地加载不同的内核服务。
⒉中间层:提供更高层次的功能,如文件系统、网络协议栈、图形用户界面等。
中间层通过对内核接口的封装,提供更便捷的应用开发接口。
⒊外围应用层:包括用户应用程序和系统管理工具。
用户应用程序可以基于VxWorks操作系统的开发环境进行开发,并且通过内核和中间层提供的接口与系统进行交互。
二、VxWorks操作系统特性VxWorks操作系统有以下特点:⒈实时性:VxWorks操作系统被广泛应用于实时系统开发,具有快速响应、低延迟和可预测性等特性。
它使用了优化的调度算法和中断处理机制,确保系统对实时任务的及时响应。
⒉可靠性:VxWorks操作系统采用了可靠性设计和故障恢复机制,例如内存保护、任务隔离和异常处理等。
这些机制可最大限度地减少系统崩溃和错误的影响。
⒊可扩展性:VxWorks操作系统具有高度可扩展性,可以根据应用的需要进行灵活配置。
开发人员可以根据系统需求选择性地加载所需的内核服务和中间层模块,以达到最佳性能和资源利用。
⒋安全性:VxWorks操作系统提供了多层次的安全机制,包括权限控制、数据加密和访问控制等。
这些机制可以在网络和物理环境中保护系统不受未经授权的访问和攻击。
三、VxWorks操作系统的应用领域VxWorks操作系统在各行各业都有广泛的应用,特别适用于对实时性和可靠性要求较高的领域。
以下是一些典型的应用领域:⒈工业自动化:VxWorks操作系统被广泛用于控制系统和工业领域,如汽车制造、航空航天和机械制造等。
科技与创新┃Science and Technology&Innovation ·76·2023年第15期文章编号:2095-6835(2023)15-0076-03VxWorks下多核编程研究赵昶宇1,胡平2(1.天津津航计算技术研究所,天津300308;2.海军工程大学舰船与海洋学院,湖北武汉430033)摘要:介绍了VxWorks支持对称多处理的特性,讨论了SMP(Symmetric Multi Processing,对称多处理)配置特有的特性,重点介绍了单处理器配置和SMP配置在编程实践时在“互斥/同步机制”上的差异,并列举了实现SMP性能优化的方法。
关键词:VxWorks系统;SMP编程;对称多处理;互斥/同步机制中图分类号:TP332文献标志码:A DOI:10.15913/ki.kjycx.2023.15.022多核系统在一个系统中包含2个或2个以上处理器。
对称多处理是多核技术的一种变体,在这种技术中,一个操作系统运行在多个处理器上,并且共享内存。
VxWorks SMP是一种用于对称多处理的系统。
它与单处理器一样,具备实时操作系统的特性。
SMP和单处理器配置之间的差异是有限的,并且与对多处理的支持密切相关[1]。
SMP系统中的全部CPU(Central Processing Unit/Processor,中央处理器)不仅可以共同享用系统的全部物理内存,即系统中的所有CPU均可对所有物理内存进行读、写及运行操作。
用户可指定VxWorks 系统的内核任务和用户任务运行在任意的CPU中。
大多数API(Application Program Interface,应用程序接口)在VxWorks的SMP和单处理器是通用的,单处理器中的少数API不适合SMP系统。
同样的,SMP 系统中的部分API在单处理器中执行时无法体现在SMP中执行时的效果,有的API甚至无法在单处理器中执行。
VxWorks信号量是提供任务间通信、同步和互斥的最优选择,提供任务间最快速的通信。
也是提供任务间同步和互斥的主要手段。
VxWorks提供3种信号量来解决不同的问题。
二进制信号量是最快的最常用的信号量,可用于同步或互斥。
互斥为了解决内在的互斥问题、优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量。
计数器类似于二进制信号量,但是随信号量释放的次数改变而改变。
二进制信号量semBCreate (SEM_Q_FIFO/SEM_Q_PRIORITY , SEM_EMPTY/SEM_F ULL)有两个作用:(1)任务间的互斥--同一个任务获取和释放信号量,防止两个任务同时存取一个资源(2)任务间的同步--一个任务获取信号量,另一个任务(或者中断)释放信号量二进制信号量实现互斥使用二进制信号量可以很方便的实现互斥,互斥是指多任务在访问临界资源时具有排他性。
为了使多个任务互斥访问临界资源,只需要为该资源设置一个信号量,相当于一个令牌,那个任务拿到令牌即有权使用该资源。
把信号量设置为可用,然后把需要的资源的任务的临界代码置于semTake()和semGive()之间即可。
注明:1、互斥中的信号量与任务优先级的关系:任务的调度还是按照任务优先级进行,但是在使用临界资源的时候只有一个任务获得信号量,也就是说还是按照任务优先级获得信号量从而访问资源。
只是当前使用资源的任务释放信号量semGive(),其它任务按照优先级获得信号量。
2、信号量属性中的参数为:SEM_Q_PRIORITY。
而且在创建信号量的时候必须把信号量置为满SEM_FULL。
即信号量可用。
基本实现互斥模型:SEM_ID semMutex;semMutex = semBCreate(SEM_Q_PRIORITY, SEM_FULL);task(void){semTake(semMutex, W AIT_FOREVER);//得到信号量,即相当于得到使用资源的令牌//临界区,某一个时刻只能由一个任务访问semGive(semMutex);}二进制信号量实现同步同步即任务按照一定的顺序先后执行,为了实现任务A和B同步,只需要让任务A和B共享一个信号量,并设置初始值为空,即不可用,将semGive()置于任务A之后,而在任务B 之前插入semTake()即可。
VxWorks SMP多核编程指南本文摘自 vxworks_kernel_programmers_guide_6.8 第24章1.介绍VxWorks SMP是风河公司为VxWorks设计的symmetric multiprocessing(SMP)系统.它与风河公司的uniporcessor(UP)系统一样,具备实时操作系统的特性.本章节介绍了风河VxWorks SMP系统的特点。
介绍了VxWorks SMP的配置过程、它与UP编程的区别,还有就是如何将UP代码移植为SMP代码。
2.关于VxWorks SMP多核系统指的是一个系统中包含两个或两个以上的处理单元。
SMP是多核技巧中的一个,它的主要特点是一个OS运行在多个处理单元上,并且内存是共享的。
另一种多核技巧是asymmetric multiprocessing(AMP)系统,即多个处理单元上运行多个OS。
(1)技术特点关于CPU与处理器的概念在很多计算机相关书籍里有所介绍。
但是,在此我们仍要对这二者在SMP系统中的区别进行详细说明.CPU:一个CPU通常使用CPU ID、物理CPU索引、逻辑CPU索引进行标示。
一个CPU ID通常由系统固件和硬件决定.物理CPU索引从0开始,系统从CPU0开始启动,随着CPU个数的增加,物理CPU索引也会增加。
逻辑CPU索引指的是OS实例.例如,UP系统中逻辑CPU的索引永远是0;对于一个4个CPU的SMP系统而言,它的CPU逻辑索引永远是0到3,无论硬件系统中CPU的个数。
处理器(processor):是一个包含一个CPU或多个CPU的硅晶体单元。
多处理器(multiprocessor):在一个独立的硬件环境中包含两个以上的处理器。
单核处理器(uniprocessor):一个包含了一个CPU的硅晶体单元。
例如:a dual-core MPC8641D指的是一个处理器上有两个CPU;a quad-core Broadcom 1480指的是一个处理器上有四个CPU.在SMP系统上运行UP代码总会遇到问题,即使将UP代码进行了更新,也很难保证代码很好的利用了SMP 系统的特性。
VxWork介绍及编程VxWork介绍及编程一.嵌入式操作系统VxWorks简介VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
实时操作系统和分时操作系统的区别从操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统。
分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。
这样的系统无法实时响应外部异步事件。
实时操作系统能够在限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。
分时系统主要应用于科学计算和一般实时性要求不高的场合。
实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。
VxWorks的特点•可靠性操作系统的用户希望在一个工作稳定,可以信赖的环境中工作,所以操作系统的可靠性是用户首先要考虑的问题。
而稳定、可靠一直是VxWorks的一个突出优点。
自从对中国的销售解禁以来,VxWorks以其良好的可靠性在中国赢得了越来越多的用户。
•实时性实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。
实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的。
VxWorks 的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短。
信号量(Semaphore):信号量是解决互斥和同步协调进程最好的方法VxWorks信号量提供最快速的任务间通信机制,它主要用于解决任务间的互斥和同步。
针对不同类型的问题,有以下三种信号量:Ÿ二进制信号量(binary)使用最快捷、最广泛,主要用于同步或互斥;Ÿ互斥信号量(mutual exclusion) 特殊的二进制信号量,主要用于优先级继承、安全删除和回溯;Ÿ计数器信号量(counting) 和二进制信号量类似,保持信号量被释放(gaven)的次数 ,主要用于保护一个资源的多个例程(multiple instances of a resource)信号量控制,函数介绍:semBCreate( ) 分配并初始化一个二进制信号量semMCreate( ) 分配并初始化一个互斥信号量semCCreate( ) 分配并初始化一个计数信号量semDelete( ) 终止一个自由的信号量emTake( ) 占有一个信号量semGive( ) 释放一个信号量semFlush( ) 解锁所有等待信号量的任务semBCreate( ), semMCreate( ), and semCCreate( )返回一个信号量ID作为其它后续任务使用该信号量的的句柄。
当一个信号量被创建,它的队列(queue)类型就被确定。
等待信号量的任务队列以优先级的高低排列(SEM_Q_PRIORITY),或者一先到先得的方式排列(SEM_Q_FIFO).1.二进制信号量(binary)Taking a SemaphoreGiving a Semaphore互斥进程(Mutual Exclusion)互斥信号量有效的内锁对共享资源的进入,与屏蔽中断(disabling interrupts)和优先级锁定(preemptive locks)相比,二进制信号量将互斥的范围限制在仅与其有关的资源上。
从技术上说,创建一个信号量来保护(guarding)资源。
VxWorks操作系统简介VxWorks操作系统简介1.VxWorks操作系统概述VxWorks是一种实时操作系统(RTOS),由美国风险通信公司(Wind River Systems)开发和销售。
它广泛应用于嵌入式系统、网络设备和航空航天等领域,以其高度可靠性、实时性和可定制性而闻名。
2.VxWorks操作系统的特点与优势2.1 实时性能:VxWorks具有优秀的实时性能,能够以微秒级的精确度响应任务,并能够满足各种实时应用的需求。
2.2 可定制性:VxWorks提供了丰富的可定制选项,开发人员可以根据具体需求选择合适的开发环境、编程语言和硬件平台。
2.3 可靠性:VxWorks采用可靠性架构,能够有效地处理系统错误和异常,提供稳定性能与高可靠性。
2.4 安全性:VxWorks支持多层次的安全机制,包括访问控制、数据加密和安全认证等,保护系统免受恶意攻击。
3.VxWorks操作系统的体系结构3.1 内核:VxWorks内核提供了操作系统的核心功能,包括任务调度、内存管理、中断处理等。
它是操作系统与硬件之间的核心接口。
3.2 文件系统:VxWorks支持多种文件系统,包括RAM文件系统、ROM文件系统和网络文件系统等。
这些文件系统可用于数据存储、配置文件管理和软件更新等方面。
3.3 设备驱动程序:VxWorks提供了丰富的设备驱动程序,用于管理和控制外设设备,如串口通信、网络接口和硬盘等。
3.4 网络协议栈:VxWorks内置了多种网络协议栈,包括TCP/IP协议栈和UDP协议栈等,以实现设备间的网络通信。
4.VxWorks操作系统的开发工具4.1 Tornado集成开发环境:Tornado是VxWorks的主要开发工具,提供了图形化界面和一系列的编译、调试和部署工具,简化了开发过程。
4.2 GNU工具链:VxWorks还支持GNU工具链,包括GCC编译器、GDB调试器和Make构建工具等,为开发人员提供更灵活的开发环境。
VXWORKS内核分析1.实时操作系统的结构在计算的早期开发的操作系统的最原始的结构形式是一个统一的实体(monolithic)。
在这样的系统中,提供的不同功能的模块,如处理器管理、内存管理、输入输出等,通常是独立的。
然而他们在执行过程中并不考虑其他正在使用中的模块,各个模块都以相同的时间粒度运行。
由于现代实时环境需要许多不同的功能,以及在这样的环境中存在的并发活动所引起的异步性和非确定性,操作系统变得更加复杂。
所以早期操作系统的统一结构的组织已经被更加精确的内部结构所淘汰。
层次结构的起点----内核操作系统的最好的内部结构模型是一个层次性的结构,最低层是内核。
这些层次可以看成为一个倒置的金字塔,每一层都建立在较低层的功能之上。
内核仅包含一个操作系统执行的最重要的低层功能。
正象一个统一结构的操作系统,内核提供了在高层软件与下层硬件之间的抽象层。
然而,内核仅提供了构造操作系统其他部分所需的最小操作集。
对一个实时内核的要求一个实时操作系统内核需满足许多特定的实时环境所提出的基本要求,这些包括:多任务:由于真实世界的事件的异步性,能够运行许多并发进程或任务是很重要的。
多任务提供了一个较好的对真实世界的匹配,因为它允许对应于许多外部事件的多线程执行。
系统内核分配CPU给这些任务来获得并发性。
抢占调度:真实世界的事件具有继承的优先级,在分配CPU的时候要注意到这些优先级。
基于优先级的抢占调度,任务都被指定了优先级,在能够执行的任务(没有被挂起或正在等待资源)中,优先级最高的任务被分配CPU资源。
换句话说,当一个高优先级的任务变为可执行态,它会立即抢占当前正在运行的较低优先级的任务。
快速灵活的任务间的通信与同步:在一个实时系统中,可能有许多任务作为一个应用的一部分执行。
系统必须提供这些任务间的快速且功能强大的通信机制。
内核也要提供为了有效地共享不可抢占的资源或临界区所需的同步机制。
方便的任务与中断之间的通信:尽管真实世界的事件通常作为中断方式到来,但为了提供有效的排队、优先化和减少中断延时,我们通常希望在任务级处理相应的工作。
VxWorks内核解读-3本篇文章分析Wind内核调度器的设计原理以及其工作流程,设计支持多任务RTOS的关键是设计调度器,Wind内核调度器的目标是保证优先级最高的就绪任务处于运行状态。
为了达到这一目的,需要在Wind内核的调度点判断就绪队列中优先级最高的任务是否正在运行,如果不在运行,调度器就会让这个优先级最高的任务抢占正在运行任务的CPU。
保证就绪队列中优先级最高的任务始终占据CPU是Wind内核可抢占的实质,其采用位图查找算法来定位最高优先级的进程,该算法的时间复杂度为O(1),且与系统当前任务总数无关,即与系统负载无关,但是与系统支持的优先级数有关。
Wind内核的调度点分成两处,一处是从内核态返回(调用windExit()),另一处是中断返回(调用intExit())。
3.1 Wind内核调度器工作原理Wind内核调度器的作用:▪使得任务状态的改变完全依赖于事件和系统调用的发生;▪将一个任务从一个队列移动到另一个队列;▪如果存在的话,执行任务切换(switch)和交换(swap)钩子函数,其中任务交换钩子函数仅仅提供了wind内核使用,任务切换钩子函数是提供给用户使用;▪当系统空闲的时自旋寻找内部工作队列的空闲工作(Job)来执行;▪具有电源管理接口。
在Wind内核中调度器reschedule()的实现有两个版本,一个是用C实现新的可移植性版本,一个是具体平台汇编实现(比如x86平台汇编)的优化版本。
为了便于分析,我们选择C实现的可移植版本reschedule()调度目的是选择合适的任务到CPU上运行,然后调用切换(switch)和交换(swap)钩子函数,最后载入挑选出来的任务的上下文。
比较复杂的因素在于内核工作队列(kernel work queue)在reschedule()调用结束之前必须被检查是否为空。
在C的可移植性版本中,检查内核工作队列和加载任务的上下文是在关中断的情况下完成的,这样做的目的是避免中断ISR的竞争。