1引言

  嵌入式系统定义义为:嵌入到对象体系中的专用计算机系统。“嵌入性”、“专用性”与“计算机系统”是嵌入式统的三个基本要素,对象系统则是指嵌入式系统所嵌入的宿主系统。目前,随着高端消费类电子产品(如PDA、手机、智能家电)的普及,嵌入式计算机系统获得了相当广泛的应用。

操作系统在嵌入式软件体系中占据着重要低位,学习和掌握相关的知识是一名嵌入式系统研发人员的必须。

  1.1本文的读者对象与写作目的

  本文针对的读者对象为入门级的嵌入式系统软件开发人员以及其他对嵌入式操作系统感兴趣的朋友,顺利阅读本文需要读者具备的基本知识能力为:

  (1)熟练的C语言程序设计能力;

  (2)操作系统的基本知识。

  如果读者具备在Windows平台下进行多线程程序设计或者其他嵌入式操作系统本台下进行多任务程序设计的经验,将对阅读本文有很大的帮助。

  本文虽然以VxWorks为介绍的主体对象,但是其中所论述的概念和方法并不局限于VxWorks操作系统本身。它们也同样适用于其它嵌入式操作系统,如WinCE、嵌入式Linux、ucos等,所谓“万变不离其宗”。

  笔者力求能以通俗和形象的语言进行论述,但是由于水平有限,文中难免存在错误和纰漏,诚盼读者朋友指正。

  1.2 为什么以VxWorks为写作对象

  之所以选择VxWorks操作系统为本文的写作对象,是因为:

  (1)VxWorks具备清晰的多任务并发控制及任务间通信的成熟机制;

  (2)VxWorks有广泛的使用基础,国内外分布着大量的VxWorks程序员;

  (3)VxWorks简单易学,便于我们集中目标讲解多任务控制程序本身。

  1.3 什么是VxWorks

   VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它凭借着良好的可持续发展能力、高性 能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据了重要一席。VxWorks具备高可靠性和实时性,因而被广泛地应用在通信、军事、航空、 航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的F-16、FA-18战斗机、B-2隐形轰炸机和爱国 者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。

VxWorks的实时性体现在它能在限定时间内执行完规定的功能并对外部的异步事件作出响应。实时操作系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合;而分时操作系统按照相等的时间片调度进程轮流运行,无法实时响应外部异步事件,因而主要应用于科学计算和实时性要求不高的场合。

  VxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。VxWorks 内核最小为 8KB,即便加上其它必要模块,所占用的空间也很小,且不失其实时、多任务的系统特征。VxWorks的内核主要包括:

  (1)多任务:为满足真实世界事件的异步性,现代操作系统需提供多任务支持,由系统内核分配CPU给多个任务并发执行。如果是单CPU,则执行方式实质是宏观并行、微观串行;

  (2)任务调度:真实世界的事件具有继承的优先级,当一个高优先级的任务变为可执行态,它会立即抢占当前正在运行的较低优先级的任务,VxWorks对 这种优先级抢占调度(Preemptive Priority Scheduling)提供了支持。同时,VxWorks也支持同优先级任务间的时间片轮转调度(Round-Robin Scheduling);

  (3)任务间的通讯与同步:在一个实时系统中,系统必须提供多个任务间快速且功能强大的通信机制,并提供为了有效地共享不可抢占的资源或临界区所需的同步机制;

  (4)任务与中断之间的通信:许多外设以中断方式与CPU通信,我们不宜在中断服务程序(ISR)中进行过多的处理,通常将相应处理交给特定任务去完成。

  VxWorks前些年对我国一直采取禁运措施,自从对中国的销售解禁以来,它在中国赢得了越来越多的用户。

  2 进程、线程与任务

  既然我们是讲解一种操作系统,那我们就有必要再老生长叹一次进程与线程的概念及其区别。

进程(Process) 是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合,它本身没有任何运行 的含义,只是一个静态实体。而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待 状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。

  线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥 有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。

  根据进程与线程的设置,操作系统大致分为如下类型:

  (1)单进程、单线程,MS-DOS大致是这种操作系统;

  (2)多进程、单线程,多数UNIX(及类UNIX的LINUX)是这种操作系统;

  (3)多进程、多线程,Windows NT(以及基于NT内核的Windows 2000、XP等)、Solaris 2.x和OS/2都是这种操作系统;

  (4)单进程、多线程,可以认为VxWorks是这种操作系统。VxWorks只有一个进程(内存空间和资源分配),其任务的概念与线程大致相当,所有任务之间共享内存和其它资源。

  3 开发环境

嵌入式软件开发不同于PC机Windows操作系统之上的应用软件开发,它一般需要一个交叉编译和调试环境。编译和调试软件运行在宿主机上(我们通常使用的PC机,Windows操作系统),它们按照目标平台CPU指令集生成目标代码,并将目标代码下载到目标机上运行;此后,主机和目标机需建立通讯连接,并传输调试命令和数据。调试方式如下图所示:

VxWorks的开发环境为WindRiver公司提供的Tornado,它支持的目标平台可以是X86、ARM、PowerPC等类型处理器。Tornado包含三个高度集成的部分:

  (1)运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;

  (2)运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;

  (3)连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE或ROM仿真器等。

  对于不同的目标机,Tornado给开发者提供一个一致的图形接口和人机界面,如下图所示:

  我们通常需要一块目标电路板来进行嵌入式系统的开发调试工作,但是相信还有相当多的读者朋友没有目标开发电路板,为了实现本文中代码的调试,我们可采用两种方式:

  (1)使用Tornado提供的VxSim模拟器来模拟调试,在此模拟器平台上,我们同样可以实现和运行本文中将介绍的大部分程序。VxSim是一个原 型仿真器,它能使开发者在没有实际目标硬件的情况下,先进行原型机应用程序的开发。如果我们要调试BSP程序,不能依赖此平台。其界面很简洁,如下图:

  (2)使用著名的VmWare虚拟机软件虚拟一个X86目标机平台,安装对应于X86版本的Tornado,我们可以调试BSP和一般应用程序。 VMWare是一个“虚拟机”软件,它使用户可以在一台机器上同时运行多个WIN2000/WINNT/WIN9X /DOS/LINUX/VxWorks等系统。VmWare是较“多启动”是一个更好的选择:“多启动”系统在一个时刻只能运行一个系统,在系统切换时需 要重新启动机器,而VmWare则使用运行于Windows之上,各种操作系统的切换直接在VmWare软件中进行。VmWare的界面如下图:

基于嵌入式操作系统VxWorks的多任务并发程序设计(1)――基本概念的更多相关文章

  1. 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制

    4 任务与任务状态 VxWorks实时内核Wind提供了基本的多任务环境.对用户而言,宏观上看起来,多个任务同时在执行.而本质而言,在微观上,系统内核中的任务调度器总是在根据特定的调度策略让它们交替运 ...

  2. 嵌入式操作系统VxWorks中网络协议存储池原理及实现

    嵌入式操作系统VxWorks中网络协议存储池原理及实现 周卫东 蔺妍 刘利强 (哈尔滨工程大学自动化学院,黑龙江 哈尔滨,150001) 摘  要  本文讨论了网络协议存储池的基本原理和在嵌入式操作系 ...

  3. 【重学计算机】操作系统D6章:并发程序设计

    1. 并发程序的基本概念 程序顺序性 内部顺序性:CPU严格按照顺序执行指令 外部顺序性:程序员设计程序时往往用顺序设计的思想 顺序程序特性 程序执行的顺序性 计算环境的封闭性: 程序执行时犹如独占资 ...

  4. 【转】嵌入式操作系统VxWorks中TFFS文件系统的构建

    时间:2005-02-20 来源:21IC中国电子网 作者:771所加固机工程部 蔡本华 高文炜 关键字:VxWorks   TFFS   嵌入式操作系统   文件系统       摘要:目前的嵌入式 ...

  5. 基于嵌入式Linux的千兆以太网卡驱动程序设计及测试

    一. 引言 千兆以太网是一种具有高带宽和高响应的新网络技术,相关协议遵循IEEE 802.3规范标准.采用和10M以太网相似的帧格式.网络协议和布线系统,基于光纤和短距离同轴电缆的物理层介质,更适用于 ...

  6. 学习STM32,你不得不了解的五大嵌入式操作系统

    学习STM32,你不得不了解的五大嵌入式操作系统                                                  原标题:学习STM32,你不得不了解的五大嵌入式操作 ...

  7. PC端操作系统、移动端操作系统、嵌入式操作系统

    左侧部分已是历史的操作系统,右侧的还是活跃的操作系统.安卓系统Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序-- 移动电话工作所需的全部软 ...

  8. RT-thread嵌入式操作系统相关的问题

    面试中问到 RT-thread嵌入式操作系统相关的问题 RT-thread操作系统调度器的实现细节 RT-Thread中提供的线程调度器是基于优先级的全抢占式调度: 在系统中除了中断处理函数.调度器上 ...

  9. 《实战Java高并发程序设计》读书笔记

    文章目录 第二章 Java并行程序基础 2.1 线程的基本操作 2.1.1 线程中断 2.1.2 等待(wait)和通知(notify) 2.1.3 等待线程结束(join)和谦让(yield) 2. ...

随机推荐

  1. [DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.11向量化 向量化是消除代码中显示for循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学 ...

  2. 【原创】POI 生成Excel文件并下载

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apa ...

  3. NoSQL在大数据中的应用

    一.序言 NoSQL是Not Only SQL的缩写,而不是Not SQL,指的是非关系型的数据库,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等.相比传统数据库 ...

  4. React原理探索- @providesModule 模块系统

    @providesModule是什么 react抛出组件化的概念后,对于开发者而言,为了提高代码的可读性与结构性,通过文件目录结构去阐述组件嵌套关系无疑是一个很好的办法,但是目录级别的加深,同时让re ...

  5. 安装与配置cacti 0.8.8b

    cacti安装与配置 一.安装所需要的软件 Apache    安装Apache文档 Mysql      安装Mysql文档 Php       安装PHP文档 Rrdtool    安装rrdto ...

  6. HDU 4333 Revolving Digits

    扩展KMP的应用 我们发现本题的关键在于如何高效的判断两个同构字符串的大小关系,想到如果能够预处理出每一个同构字符串与原字符串的最长公共前缀,那么直接比较它们不一样的部分就好,扩展KMP正好是用来处理 ...

  7. [转载]完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ (好像现在这个博客已经挂掉了,在网上找到的全部都是转载) 今天在清北学堂听课,听到了一些很令人吃惊的消息.至于这消息具体是啥,等 ...

  8. BZOJ 4004: [JLOI2015]装备购买 [高斯消元同余 线性基]

    和前两(一)题一样,不过不是异或方程组了..... 然后bzoj的新数据是用来卡精度的吧..... 所有只好在模意义下做啦 只是巨慢无比 #include <iostream> #incl ...

  9. 二维码开源库ZBar-windows下编译和使用

    源码 下载最新Zbar源码(http://zbar.sourceforge.net/),网站的WIKI是空白的,所以只能在源码包里找使用说明了,很遗憾Windows下怎么编译没说明,只是说明了Wind ...

  10. Angular 向组件传递模板的几种方法

    最近在写一个日期选择器组件,为了满足将来可能出现的各种需求,所以需要能够高度的自定义组件的样式.为了达到这个目的,需要能够在日期选择器组件外控制每个日期格子内要显示的内容,比如,标上节假日之类的.这时 ...