Wince與Linux的實時性對比與分析(摘自電子發燒友網)

引言

  嵌入式實時操作系統(RTOS,Real Time Operating System)爲嵌入式應用的開發者提供了系統級的支撐環境,極大地簡化了嵌入式軟件系統的設計過程,成爲操作系統中一個非常重要的分支。隨着RTOS在嵌入式系統中的大量應用,RTOS的選擇與評價成爲了一個重要的問題。一個RTOS的評價要從很多角度進行,如體系結構、API的豐富程度、網絡支持、可靠性等。其中,實時性是RTOS評價的最重要的指標之一,實時性的優劣是用戶選擇操作系統的一個重要參考。評價一個操作系統的實時性應該着重考察它的哪些指標,以及如何進行測試,是本文着重討論的問題。

1 操作系統實時性的主要指標

  嚴格地說,影響嵌入式操作系統實時性的因素有很多。限於篇幅,本文只列出影響操作系統實時性的6個主要因素。

(1) 常用系統調用平均運行時間
  即系統調用效率,是指內核執行常用的系統調用所需的平均時間。可以參考POSIX標準,按照進程、線程、同步原語(信號量和互斥體等)、文件、內存、中斷處理、時鐘、時間分類,選取部分常用的系統調用進行測試,如建立/刪除進程與線程、建立/刪除文件、讀/寫文件、設置/得到優先級、創建/釋放信號量、分配/釋放內存空間、加載/卸載中斷處理模塊等。選取的樣本不可能十分完整,在這裏只是作爲一種方法提出,僅供參考。

(2) 任務切換時間
  任務切換時間是指事件引發切換後,從當前任務停止運行、保存運行狀態(CPU寄存器內容),到裝入下一個將要運行的任務狀態、開始運行的時間間隔,如圖1所示。

按此在新窗口瀏覽圖片
圖1 任務切換時間

  需要注意的是,要使任務進行切換,需要一定的事件觸發。通常,這個事件是同步原語,使任務切換,並且過程可被監控。但是,同步原語的操作會帶來一定的系統開銷,而且不同操作系統的各種同步原語操作效率不同。因此,對被測操作系統使用其支持的各種同步原語進行任務切換測試,選取各自用時最少者——這裏稱爲“最佳原語”,作爲測量值,以使誤差最小。經過對Mutex、Semaphore、Critical Section、SVR5 Semaphore、POSIX Semaphore、pthread_mutex的測試之後,測得WinCE的最佳原語爲Critical Section,而Linux的最佳原語爲 pthread_mutex。

(3) 線程切換時間
  線程是可被調度的最小單位。在嵌入式系統的應用系統中,很多功能是以線程的方式執行的,所以線程切換時間同樣是考察的一個要點。測試方法及原理與任務切換類似,不再介紹。

(4) 任務搶佔時間
  任務搶佔時間是高優先級的任務從正在運行的低優先級任務中獲得系統控制權所消耗的時間,如圖2所示。

按此在新窗口瀏覽圖片
圖2 任務搶佔時間

(5) 信號量混洗時間
  信號量混洗時間指從一個任務釋放信號量到另一個等待該信號量的任務被激活的時間延遲,如圖3所示。

按此在新窗口瀏覽圖片
圖3 信號量混洗時間

  在嵌入式系統中,通常有許多任務同時競爭某一共享資源,基於信號量的互斥訪問保證了任一時刻只有一個任務能夠訪問公共資源。信號量混洗時間反映了與互斥有關的時間開銷,是RTOS實時性的一個重要指標。

(6) 中斷響應時間
  中斷響應時間是指從中斷髮生到開始執行用戶的中斷服務程序代碼來處理該中斷的時間。中斷處理時間通常不僅由RTOS決定,而且還由用戶的中斷處理程序決定,所以不應包括在測試框架之內。

  針對這些指標的部分或全部,已經有了爲數不少的測試方法和測試程序,例如Rhealstone方法,大量的benchmark(lmbench、HbenchOS等)。但這些測試方法及程序或者是由於計時方法的不足導致計時精度不夠,或者是由於需要過多的專業硬件設備(如邏輯分析儀、示波器,等),使得測試要求過高,測試條件不易達到,均存在着一定的缺陷。針對這些問題,本文中提出了一種基於CPLD與目標系統結合的測試方法,較好地解決了這些問題。

2 比對平臺及測試方法

2.1 比對測試平臺介紹

  爲了更好地對嵌入式系統中各層次的軟件系統(包括操作系統、Bootloader、用戶應用程序以及其他系統程序)進行評測,我們設計並實現了雙嵌入式系統比對實驗平臺。實驗平臺以2塊研華PCM7230開發板(基於PXA255處理器)和1個CPLD器件爲核心,開發板上運行被測操作系統,保證了測試環境的完全相同;CPLD器件負責產生中斷負載、雙系統的同步置位/復位觸發與計時功能,保證了測試結果的精確,並且易於比對、觀察,突出評測過程比對的特點。圖4是比對測試平臺的邏輯結構。

按此在新窗口瀏覽圖片
圖4 比對測試平臺的邏輯結構

  下面列出的是比對平臺中主要的硬件型號與種類。

  ◇ CPU:XScale (400 Hz)。
  ◇ 時鐘:HT1381。
  ◇ ROM:1 MB AMD。
  ◇ SDRAM:64 MB。
  ◇ Flash:32 MB。
  ◇ I/O資源: 包含RS232(COM1~4),RS485(COM5),2個USB Host和1個USB Client,Ethernet DM9000.10/100 basedT,以及AMI120擴展總線接口。

2.2 測試與計時方法

  在測試過程中,採用當前比較流行的基準測試程序法(benchmark)對上述實時性指標進行評測。針對每一指標,編寫相應的測試程序。在測試過程中,一個最基本原則是儘可能地減小測量誤差,採用多種策略減小其他因素對測試的影響,例如關閉內核中部分不需要的進程,以縮短內核佔用CPU時間;禁用數據Cache和指令Cache,以避免高速緩存對RTOS相應指標的影響;對同一指標進行高頻度重複測試,統計其最大值、最小值和平均值等,得到儘可能客觀的結果。

  與通常的基準測試方法相比較,本測試方法的特點是採用CPLD器件與測試程序相結合的方法,利用CPLD與開發板上豐富的引腳資源,通過CPLD進行編程,可方便地對被測試系統產生中斷負載、同步觸發,而且不會增加被測系統的額外負載。同時,減少系統調用的次數,使測試結果更加精確,更接近內核自身的運行值。

  另外,測試過程的計時功能通過CPLD編程實現,與傳統的利用RTOS內核的時間系統調用計時方式相比,解決了不同操作系統系統調用返回值精度不夠、單位不統一的問題。由於比對平臺中的CPLD器件選用的是Xilinx公司的XC9500系列,其最高系統時鐘頻率爲100 MHz,引腳到引腳的最大時延爲10 ns,因此實現的計數器計時精度可以達到數十ns,幾乎可以忽略不計,極大提高了計時精度,如圖5所示。

按此在新窗口瀏覽圖片
圖5 CPLD測試、計時方法

  整個測試過程主要分爲4部分:準備工作,內核測試程序編程,CPLD編程,與外界交互部分的實現。準備工作包括編譯內核、修改Bootloader等,Bootloader通過對i?boot?lite?1.8進行修改,使其可應用於比對平臺上;內核測試程序按照前面所提到的6個指標,劃分爲6個模塊,分別編寫;CPLD編程主要包括計時程序、中斷負載加載程序等;外界交互部分主要包括串口通信、以太網卡驅動。下面是部分CPLD上的VHDL程序源碼。其中,fenpin爲時鐘頻率,flagreci爲接收信號;當使用按鍵人工控制時,flagsend和flagstop爲計時開始和結束。

process(fenpin,flagsend,flagreci,flagstop)
begin
  flag<=flagsend & flagreci & flagstop;
  if(fenpin′ event and fenpin='1') then
    if(flag="0010000") then
      if(tempsendout="0000000000000111") then
        tempsendout<=tempsendout;
  else
    tempsendout<=tempsendout+'1';
  end if;
  countout<=countout+'1';
  if(tempsendout="0000000000000111") then
    outsend<='0';
    outsendled<='0';
    iscounting<='1';
  else
    outsend<='1';
    outsendled<='1';
    end if;
  else
    iscounting<='0';
    signdisp<='1';
    end if;
  end if;
end process;

  測試程序的代碼較多,這裏不一一列出,僅給出程序中嵌入的與CPLD交互的部分代碼片段供參考。

#define base_add (*(volatile unsigned *)0x40E00000)
#define gpio3_derect (*(volatile unsigned *)(0x40E00000+0x0C))
#define gpio3_out1 (*(volatile unsigned *)(0x40E00000+0x18))
int to_CPLD(void) {
  gpio3_derect = 0x8;//設置引腳爲輸出
  gpio3_out1 = 0x8;//輸出一個高電平
}

  代碼的前段定義了相關寄存器的地址,在測試過程中,使用PXA255的GPIO3引腳與CPLD交互,實現計時功能。由於需要在內核態運行,故該函數作爲一個模塊編譯進內核,測試程序中通過ioctl系統調用執行此段代碼,將信號發送給CPLD,CPLD計算2次信號的間隔時間,實現計時功能。

3 Linux、WinCE的測試結果及分析

  根據上述指標體系及測試方法,我們對Linux和WinCE進行了相關的測試。其中,Linux版本爲2.4.19,WinCE版本爲WinCE.Net。由於當硬件平臺與運行環境不同時,即使同一內核運行時體現的性能指標也會不同,所以對不同RTOS的評測只有在相同平臺環境下進行比對纔有其價值,測試以評價爲目標,評價以比對爲依據。表1是對上述兩種內核的評測結果。由於篇幅所限,這裏只列出了平均時間,最大、最小值沒有列出。

表1 Linux和WinCE比對評測結果指標
按此在新窗口瀏覽圖片

  從表1中可以看出,在任務切換時間、線程切換時間、系統調用平均運行時間幾項指標中,Linux2.4.19和WinCE.Net相差不大;但在任務搶佔時間、信號量混洗時間、中斷響應時間幾項指標中,WinCE.Net明顯優於Linux2.4.19。總的來說,WinCE.Net的實時性優於Linux2.4.19。下面從兩種操作系統的特點、內部實現機制等方面來解釋說明上述測試結果。

  Linux與WinCE均允許不同進程的優先級相同,這一點不同於μC/OS等實時內核(μC/OS中每個任務的優先級唯一),所以採用的調度算法都是搶佔式和時間片輪轉的混和式調度策略。因此,在同優先級的進程切換時,二者指標相差不大。

  測試中使用的Linux2.4.19並非是爲嵌入式實時系統設計的專用操作系統,只是對原有的通用內核進行了一定的裁剪;而WinCE.Net雖然也不是一個嚴格意義上的實時內核,但卻是專門爲嵌入式系統設計的。所以,在任務搶佔和中斷響應方面,WinCE要顯著強於Linux。另外,Linux2.4.19在內核級並不支持搶佔,這也是它的搶佔時間大於WinCE的一個主要原因。不過,這一點在2.6版本的Linux內核中已經得到了解決。

  系統調用效率上,WinCE.Net要優於Linux2.4.19,但是Linux的系統調用更加符合POSIX標準,更加規範,而且更加開放。

  綜上所述,在對實時性要求較高的嵌入式系統中,WinCE.Net要比Linux2.4.19更加適用,並且WinCE.Net在開發類桌面系統中繼承了微軟的一貫優勢,使得開發更加容易。但是,如果系統的實時性要求不高,Linux也許是更合適的選擇,因爲使用它可以降低成本,並且完全對用戶透明,便於修改定製。若想使用Linux作爲操作系統開發實時性要求較高的系統,則應對其做適當的實時性改造,或者直接使用已經過實時改造的Linux內核,如RTLinux等。

4 總結與展望

  本文介紹的測試方法與傳統的純軟件測試方法相比,具有精度高、易於比對的特點,且測試的複雜度並沒有顯著地增加;與單純的硬件測試方法相比,具有性價比高、需要設備少、擴展性強等特點,且測試精度差別不大,但功能不如邏輯分析儀、示波器等專用硬件設備強大。本文介紹的嵌入式操作系統實時性指標體系還有着較大的完善和擴展空間,每一個指標都可以進一步細化。若能在不同的負載條件下利用本文的測試方法進一步測試,則可使得測試結果更加全面客觀。

本文摘自:http://www.lyctr.com/shownews.asp?id=193

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章