采用 Linux 與 DSP/BIOS RTOS 實(shí)施雙 OS 信號處理
在系統性能與編程簡(jiǎn)易性之間的權衡折中是通用操作系統與實(shí)時(shí)操作系統之間的主要區分點(diǎn)之一。
本文引用地址:http://dyxdggzs.com/article/201609/303508.htmGPOS 傾向于提供較高程度的資源抽象,這不僅可通過(guò)支持軟件模塊性與資源隔離來(lái)提高應用的便攜性、簡(jiǎn)化開(kāi)發(fā)流程,同時(shí)還能增強系統的穩健性。這使 GPOS 成為諸如網(wǎng)絡(luò )、用戶(hù)界面以及顯示管理等通用系統組件的理想選擇。
然而,該抽象需要以系統資源的精細粒度控制作為代價(jià),以滿(mǎn)足信號處理代碼等高強度算法的計算性能要求。對于實(shí)現這種高級別的控制,開(kāi)發(fā)人員通常需要采用實(shí)時(shí)操作系統 (RTOS)。
從嵌入式信號處理角度上講,我們通常要考慮兩種類(lèi)型的操作系統,即通用操作系統 Linux 與實(shí)時(shí)操作系統 DSP/BIOS。Linux 可支持更高水平的抽象技術(shù),而 DSP/BIOS 則可提供更精細的控制。
為了充分發(fā)揮這兩種操作系統的優(yōu)勢,開(kāi)發(fā)人員可采用系統虛擬機,這就使編程人員可在同一 DSP 處理器上同時(shí)運行 Linux 與 DSP/BIOS 系統。
(編者注:與 Java 虛擬機等特定編程語(yǔ)言使用的進(jìn)程虛擬機環(huán)境不同,系統虛擬機對應于實(shí)際硬件,可在相同計算環(huán)境中與其它類(lèi)似實(shí)例相隔離的情況下執行完整的操作系統。)
然而,我們要提出一個(gè)重要的問(wèn)題:為什么不使用分別運行 Linux 與 DSP/BIOS 系統的 CPU+DSP 組合器件呢?畢竟,CPU 在運行用戶(hù)接口控制代碼等方面具有更高的效率。此外,不同的內核可避免虛擬化帶來(lái)的開(kāi)銷(xiāo)。不過(guò),在同一顆芯片上集成所有功能還是很有吸引力的,原因如下:
其一,當今高性能 DSP 比前代 DSP 要強大得多,這樣可減少控制處理周期數。其二,大多數高性能 DSP 的通用性能均比前代產(chǎn)品更強,從而可實(shí)現更高效的控制代碼處理工作。
如果所有功能都可集成在 DSP 上,那么其優(yōu)勢將更加出眾。更少的芯片數量可實(shí)現更低的成本與更小的占用空間。此外,由于不再需要在耗費大量電力的處理器間數據傳輸,因此還可降低能耗。
進(jìn)度安排
操作系統最常見(jiàn)也是最有利的一個(gè)特性就是能同時(shí)執行多個(gè)任務(wù)或多個(gè)線(xiàn)程。操作系統通過(guò)時(shí)間表來(lái)管理內核處理,以連續執行相關(guān)任務(wù)。
以往,嵌入式編程人員在使用 Linux 時(shí)會(huì )擔心實(shí)時(shí)性能較低的問(wèn)題。不過(guò),對 Linux 內核的最新增強顯著(zhù)提高了其對系統事件的響應能力,從而使其可滿(mǎn)足各種企業(yè)與個(gè)人以及嵌入式產(chǎn)品的需求。
Linux 可實(shí)現線(xiàn)程的時(shí)間切片以及優(yōu)先次序時(shí)間安排。時(shí)間切片技術(shù)是指在所有線(xiàn)程之間共享處理工作周期,以確保無(wú)封鎖線(xiàn)程。這種方法通常適用于用戶(hù)接口功能,以確保在系統超載、響應較慢的情況下也不至于完全丟失用戶(hù)功能。
與此形成對比的是,優(yōu)先次序線(xiàn)程時(shí)間安排技術(shù)則可確保系統中最高優(yōu)先級線(xiàn)程的執行,直至該線(xiàn)程放棄控制為止,這時(shí)下一個(gè)最高優(yōu)先級的線(xiàn)程即開(kāi)始執行。
Linux 內核在每次從內核到用戶(hù)模式的轉換時(shí)都會(huì )對可用線(xiàn)程的優(yōu)先級進(jìn)行重新評估,這就意味著(zhù)內核最新評估的任何事件(如驅動(dòng)程序上數據的可用性)都能立即觸發(fā)新線(xiàn)程(調度器的時(shí)延響應時(shí)間內)的轉換。由于確定了基于優(yōu)先級的線(xiàn)程,其通常用于必須滿(mǎn)足實(shí)時(shí)要求的信號處理應用。
在推出 Linux 內核 2.6 版本之前,制約實(shí)時(shí)性能的主要因素是 Linux 內核會(huì )禁用中斷,且禁用時(shí)間有時(shí)會(huì )長(cháng)達數百毫秒。
就此而言,我們可以提高內核實(shí)施的效率。因為在禁用中斷時(shí),代碼的某些部分無(wú)需重新進(jìn)入,而這會(huì )增加中斷響應的時(shí)延。
目前的 2.6 版本提供了構建選項,可在整個(gè)內核代碼中以更高的頻率插入中斷再啟用指令。Linux 社區通常將該特性稱(chēng)作先占內核 (preempt kernel),盡管這會(huì )讓內核性能略有下降,但卻能夠顯著(zhù)提高實(shí)時(shí)性能。對于眾多系統任務(wù)而言,在先占性 Linux 2.6 內核與實(shí)時(shí)線(xiàn)程結合使用時(shí),將能提供足夠的性能來(lái)滿(mǎn)足實(shí)時(shí)需求。
例如,德州儀器 (TI) 的 DSP/BIOS 以軟件中斷和任務(wù)的形式僅支持優(yōu)先級調度。與 Linux 調度器一樣,軟件中斷和任務(wù)都屬于先占型的。但是,DSP/BIOS 也為應用編程人員提供了直接存取硬件中斷的條件,該資源僅適用于 Linux 內核模式。
直接存取硬件中斷使應用編程人員可在理論上實(shí)現底層硬件所支持的最短時(shí)延響應。對控制環(huán)路等需要絕對最低時(shí)延的應用而言,這種精細粒度的硬件中斷控制機制通常是一種非常重要的特性。
受保護的資源訪(fǎng)問(wèn)
Linux 與大多數通用操作系統的一個(gè)基本屬性就是用戶(hù)空間程序與所用的底層系統資源相分離。僅在工作處于監控(如內核)模式下時(shí)才允許直接訪(fǎng)問(wèn)存儲器和設備外設。
如果用戶(hù)程序希望訪(fǎng)問(wèn)系統資源,那么它必須通過(guò)稱(chēng)作驅動(dòng)器的內核模塊從內核發(fā)出請求。該應用位于用戶(hù)存儲器空間,并將通過(guò)虛擬文件訪(fǎng)問(wèn)驅動(dòng)程序。然后,虛擬文件將應用的請求轉至驅動(dòng)器執行的內核存儲器空間。
Linux 可提供特性極為豐富的驅動(dòng)器模型,其中包括標準流媒體外設、模塊存儲設備以及文件系統,甚至還包括網(wǎng)絡(luò )與基于網(wǎng)絡(luò )的文件系統。
驅動(dòng)器與用戶(hù)空間應用的分離可實(shí)現高度的穩健性。此外,通用驅動(dòng)器接口上的抽象水平使其便于將數據流傳輸給串行端口、閃存文件系統或網(wǎng)絡(luò )共享文件夾,且僅需對底層應用代碼稍作更改。
然而,實(shí)現這種靈活性需要付出代價(jià)。應用與物理資源的嚴格分離會(huì )加大開(kāi)銷(xiāo)。如果用戶(hù)空間程序要訪(fǎng)問(wèn)設備外設,則內核模式必須進(jìn)行環(huán)境交換才能處理該請求。
由于數據是成塊訪(fǎng)問(wèn),而非逐個(gè)樣本 (sample-by-sample) 訪(fǎng)問(wèn),因此通常來(lái)說(shuō)這不會(huì )造成太大的局限性。這樣,內核模式下每次塊訪(fǎng)問(wèn)僅需進(jìn)行一次環(huán)境交換即可。
但是,在某些情況下,應用代碼需與物理硬件嚴格匹配。如果使用 DSP 等對數據吞吐量要求較高且不能容忍停頓的高性能處理器時(shí),通常就會(huì )出現此類(lèi)情況。這時(shí),內核空間的物理資源與用戶(hù)空間的應用相分離的做法就可能會(huì )嚴重影響系統性能。
應用與硬件的匹配
我們不妨使用 TMS320DM643x 處理器架構來(lái)研究在執行塊視頻處理時(shí)會(huì )遇到的典型情況,該架構采用一個(gè) 600 MHz / 4800 MIPS DSP 處理內核以及諸如功能豐富的視頻端口子系統等各種多媒體外設。這種硬件通常用于將輸入視頻流進(jìn)行 H.264 格式壓縮。
為了充分發(fā)揮 DSP 內核的處理能力,處理的數據應從周期操作內部存儲器讀取,而不是從速度較慢的外部存儲器讀取。盡管在技術(shù)上可以讓具有足夠快的片上存儲器的處理器存儲一個(gè)或多個(gè)完整的視頻幀,但這種技術(shù)對大多數目標市場(chǎng)來(lái)說(shuō)成本太高。因此,采用可提供 80 KB 的單周期操作片上數據存儲器的處理器取而代之。
評論