閱讀652 返回首頁    go 阿裏雲 go 技術社區[雲棲]


基於嵌入式操作係統VxWorks的多任務並發程序設計(1)――基本概念

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的多任務並發程序設計(1)――基本概念

 VxWorks的開發環境為WindRiver公司提供的Tornado,它支持的目標平台可以是X86、ARM、PowerPC等類型處理器。Tornado包含三個高度集成的部分:

  (1)運行在宿主機和目標機上的強有力的交叉開發工具和實用程序;

  (2)運行在目標機上的高性能、可裁剪的實時操作係統VxWorks;

  (3)連接宿主機和目標機的多種通訊方式,如:以太網,串口線,ICE或ROM仿真器等。

  對於不同的目標機,Tornado給開發者提供一個一致的圖形接口和人機界麵,如下圖所示:

基於嵌入式操作係統VxWorks的多任務並發程序設計(1)――基本概念

  我們通常需要一塊目標電路板來進行嵌入式係統的開發調試工作,但是相信還有相當多的讀者朋友沒有目標開發電路板,為了實現本文中代碼的調試,我們可采用兩種方式:

  (1)使用Tornado提供的VxSim模擬器來模擬調試,在此模擬器平台上,我們同樣可以實現和運行本文中將介紹的大部分程序。VxSim是一個原 型仿真器,它能使開發者在沒有實際目標硬件的情況下,先進行原型機應用程序的開發。如果我們要調試BSP程序,不能依賴此平台。其界麵很簡潔,如下圖:

基於嵌入式操作係統VxWorks的多任務並發程序設計(1)――基本概念

  (2)使用著名的VmWare虛擬機軟件虛擬一個X86目標機平台,安裝對應於X86版本的Tornado,我們可以調試BSP和一般應用程序。 VMWare是一個“虛擬機”軟件,它使用戶可以在一台機器上同時運行多個WIN2000/WINNT/WIN9X /DOS/LINUX/VxWorks等係統。VmWare是較“多啟動”是一個更好的選擇:“多啟動”係統在一個時刻隻能運行一個係統,在係統切換時需 要重新啟動機器,而VmWare則使用運行於Windows之上,各種操作係統的切換直接在VmWare軟件中進行。VmWare的界麵如下圖:

基於嵌入式操作係統VxWorks的多任務並發程序設計(1)――基本概念

最後更新:2017-04-03 12:55:36

  上一篇:go lindo與lingo軟件有什麼區別?
  下一篇:go Android 重寫係統Crash處理類,保存Crash信息到SD卡 和 完美退出程序的方法