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

简介:
作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] 出处:软件报
(转载请务必注明作者与出处)

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 前些年对我国一直采取禁运措施,自从对中国的销售解禁以来,它在中国赢得了越来越多的用户。

进程、线程与任务

既然我们是讲解一种操作系统,那我们就有必要再老生长叹一次进程与线程的概念及其区别。
进程( 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 只有一个进程(内存空间和资源分配),其任务的概念与线程大致相当,所有任务之间共享内存和其它资源。

开发环境

嵌入式软件开发不同于 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 的界面如下图:




 本文转自 21cnbao 51CTO博客,原文链接:http://blog.51cto.com/21cnbao/120329 ,如需转载请自行联系原作者

相关文章
|
17天前
|
Ubuntu Java Linux
Linux操作系统——概念扫盲I
Linux操作系统——概念扫盲I
33 4
|
1月前
|
存储 算法 安全
深入理解操作系统:从基础概念到代码实践
【9月更文挑战第23天】本文将带领读者深入探索操作系统的奥秘,从基础概念出发,逐步揭示操作系统的工作原理和设计哲学。我们将通过实际代码示例,展示操作系统如何与硬件交互、管理资源以及提供用户界面。无论你是计算机专业的学生还是对操作系统感兴趣的开发者,这篇文章都将为你打开一扇通往操作系统世界的大门。
64 16
|
1月前
|
安全 Unix Linux
Unix是一个多用户、多任务的操作系统
Unix是一个多用户、多任务的操作系统
86 3
|
18天前
|
存储 iOS开发 MacOS
MacOS环境-手写操作系统-33-多任务多窗口
MacOS环境-手写操作系统-33-多任务多窗口
16 0
|
1月前
|
Web App开发 Linux iOS开发
操作系统的演变:从单任务到多核并发
在数字时代的浪潮中,操作系统作为计算机硬件与应用程序之间的桥梁,其发展历史充满了创新与变革。本文将带领读者穿越时空,探索操作系统如何从简单的单任务处理演化为今天能够高效管理多核处理器的复杂系统。我们将一窥各个时代下操作系统的设计哲学,以及它们是如何影响现代计算的方方面面。加入我们的旅程,一起见证技术的力量如何在每次迭代中重塑世界。
37 7
|
1月前
|
机器学习/深度学习 人工智能 算法
操作系统的未来:从多任务到深度学习的演变之路
本文将探讨操作系统如何从处理简单多任务发展到支持复杂的深度学习任务。我们将分析现代操作系统面临的新挑战,以及它们如何适应人工智能和大数据时代的要求。文章不仅回顾过去,也展望未来,思考操作系统在技术演进中的角色和方向。
48 3
|
1月前
|
人工智能 算法 数据挖掘
操作系统的演变:从单任务到多任务的旅程
操作系统(OS)是计算机系统的核心,它管理硬件资源、提供用户界面并运行应用程序。本文将探讨操作系统如何从单任务环境演变为支持多任务的环境,包括这一过程中的技术挑战和解决方案。我们将看到,随着计算需求的增长,操作系统必须适应更复杂的任务管理和资源分配策略,以提高效率和用户体验。通过这个旅程,我们不仅能够理解操作系统的发展,还能洞察未来可能的趋势。
47 5
|
2月前
|
机器学习/深度学习 人工智能 安全
操作系统的未来:从多任务处理到人工智能
【8月更文挑战第23天】本文将探讨操作系统的发展历程及其未来趋势,特别是人工智能在操作系统中的应用。我们将看到如何通过引入人工智能技术,操作系统能够更加智能化地管理资源,提高系统性能和用户体验。
|
2月前
|
缓存 安全 数据库
探索后端开发的核心原则与实践操作系统的未来:从多任务处理到智能优化
【8月更文挑战第23天】在数字化时代的浪潮中,后端开发作为技术架构的支柱,承载着数据处理、业务逻辑实现和系统性能优化的关键任务。本文将深入探讨后端开发的几大核心原则,包括模块化设计、性能优化、安全性强化及可维护性提升,旨在为读者揭示如何构建一个健壮、高效且安全的后端系统。通过分析这些原则背后的理念及其在实际开发中的应用,本文意在启发读者思考如何在不断变化的技术环境中,持续优化后端开发实践,以适应新的挑战和需求。
|
2月前
|
调度 UED
操作系统中的多任务处理机制
【8月更文挑战第23天】在数字时代,操作系统的核心功能之一是多任务处理。它允许用户同时运行多个程序,优化资源使用,并提高生产效率。本文将深入探讨操作系统如何实现多任务处理,以及这一机制对用户体验和系统性能的影响。通过理解多任务处理的工作原理,用户可以更好地管理计算资源,提升个人和组织的工作效率。