多任務

多任務處理是指用戶可以在同一時間內運行多個應用程式,每個應用程式被稱作一個任務.Linux、windows就是支持多任務的作業系統,比起單任務系統它的功能增強了許多。

當多任務作業系統使用某種任務調度策略允許兩個或更多進程並發共享一個處理器時,事實上處理器在某一時刻只會給一件任務提供服務。因為任務調度機制保證不同任務之間的切換速度十分迅速,因此給人多個任務同時運行的錯覺。多任務系統中有3個功能單位:任務、進程和執行緒。

多任務作業系統,搶先式多任務工作方式,實時多任務作業系統,

多任務作業系統

Windows是當今流行的多任務作業系統,其多任務處理可分為兩類:協同式多任務和搶 先式多任務處理模式。使用協同式多任務處理模式,CPU的分配直接由應用程式決定,所以系統性能好壞取決於應用程式設計好壞。而運行搶先式多任務處理模式,各進程占用CPU的時間由系統調度程式決定,當調度程式檢測出有比當前任務優先權更高的程式事件後,暫停當前任務並將CPU時間分配給優先權更高的進程。所有的Win16應用程式都在同一台虛擬機上運行,各程式之間採用的是協同式多任務處理。每個Win32應用程式和MS-DOS應用程式都具有自己專用的虛擬機,其進程按搶先式多任務處理方式運行。
Windows多任務處理採用的是被稱為虛擬機(Virtual Machine)的技術。虛擬機實際上指的是由Windows在記憶體中創建的邏輯微機,由它來運行應用程式。當Windows接受到由滑鼠器、鍵盤、定時器信號或某些I/O操作產生的"事件"後,為該任務分配CPU時間。每個任務使用由Windows分配的短暫的時間片(Timeslice)輪流使用CPU,由於CPU對每個時間片的處理速度非常快,在用戶看來好像這些任務在同時執行。
Windows中的多任務調度策略 Windows中調度的任務有兩種狀態:運行狀態和等待狀態。正在運行的任務處於運行狀態,當該任務把CPU控制權交給其他任務後,就被置為等待狀態。為了便於任務調度和保存每個任務運行的參數,Windows在裝載應用程式時,由LoadModule()函式創建一任務資料庫(簡稱TDB),該任務資料庫在記憶體中是以鍊表的形式存在,TDB鍊表中的結點記下了每個任務切換時的堆疊指針、中斷處理程式地址及此任務對應的模組句柄和實例句柄等。Windows就是根據TDB鍊表中存放的各個任務的數據信息來完成任務調度的。 對Windows而言,CPU屬於臨界資源,在某一時刻只有一個任務獨占CPU。為了合理分配CPU,提高系統的性能,Windows根據任務是否存在等待事件來進行任務調度。如果當前任務沒有事件可供處理,那么就應該把控制權交給其他具有等待事件的任務。為了記錄每個任務的等待事件個數,在TDB鍊表中,為每個任務建立一個事件計數器(TDB偏移6處的值),系統調度程式就是根據該計數器來進行任務調度。我們可以通過Windows中未公開的核心函式PostEvent()把指定任務的事件計數器值增1,人為地偽造一個事件,引起相應的任務被喚醒。 當有多個任務都具有等待事件時,Windows採用的最高優先權(HPF)算法進行調度。為此Windows定義了任務的優先權值:範圍從-32到+15,任務的優先權值越小,它的優先權就越高,其任務結點在TDB鍊表中的位置也越靠前。而在實際套用中,絕大多數Windows應用程式的優先值都是0,若優先權值相同,則按先來先服務的原則進行。任務的優先權值只對具有等待事件的任務生效,如果一個任務沒有等待事件,即使優先權再高,也不會被調度。 若當前任務所分配的時間片用完或當前任務再無等待事件,任務調度程式就要釋放當前任務的控制權,把控制權交給已選中的可調度任務。但在WindowsAPI中並沒直接公開這樣一個函式,許多具有釋放控制權功能的函式都被隱藏在GetMessage()或PeekMessage()這樣的訊息函式中,當應用程式在訊息環中沒有訊息可供接收時,它就會把控制權交給別的任務,以防止當前任務進入死循環。當前任務釋放控制權以後,如果沒一個任務被調度程式選中,調度程式就會使Windows進入系統空閒狀態,相應的電源管理軟體就會使整個系統處於低能耗的睡眠狀態,直至有任務被喚醒而重新開始正常運轉。

搶先式多任務工作方式

使用搶先式多任務工作方式使得32位Windows應用程式和DOS應用程式能夠平等地共享C PU資源,消除了Windows 3.X單個任務執行時獨占系統資源的現象,提高了應用程式的執行效率和速度,也使用戶有可能擺脫前文所提到的困境。在Windows 95運行時,用戶可以根據滑鼠指針的變化了解各個任務所處的狀態。當滑鼠指針在某個視窗變成沙漏指針時,用戶不能對該視窗進行操作。但可以把滑鼠指針移到該視窗以外,這時滑鼠指針有可能變成箭頭或箭頭與沙漏的組合,表示用戶此時可以進行搶先操作而不必像在Windows 3.X中那樣處在無奈的等待中。當發現某個任務意外死鎖或終止時,我們可以利用Windows 95的這種搶先式多任務的特性,先將其它任務正常結束,再想辦法處理出了問題的程式,以減少工作損失。在Windows 95中,對出現意外錯誤的程式,可以使用Ctrl+Alt+Del組合鍵調出"關閉程式視窗,選中該程式後再用"結束任務"操作將它關閉。但要小心,不可輕易再次擊Ctrl+Alt+D el組合鍵,以避免重新啟動機器造成信息丟失。

實時多任務作業系統

實時多任務作業系統(RTOS)是嵌入式套用軟體的基礎和開發平台,它是根據作業系統的工作特性而言的。實時是指物理進程的真實時間。實時作業系統是指具有實時性,能支持實時控制系統工作的作業系統。首要任務是調度一切可利用的資源完成實時控制任務,其次才著眼於提高計算機系統的使用效率,重要特點是要滿足對時間的限制和要求。目前在中國大多數嵌入式軟體開發還是基於處理器直接編寫,沒有採用商品化的RTOS,不能將系統軟體和套用軟體分開處理。RTOS是一段嵌入在目標代碼中的軟體,用戶的其它應用程式都建立在RTOS之上。不但如此,RTOS還是一個可靠性和可信性很高的實時核心,將CPU時間、中斷、I/O、定時器等資源都包裝起來,留給用戶一個標準的API,並根據各個任務的優先權,合理地在不同任務之間分配CPU時間。
RTOS是針對不同處理器最佳化設計的高效率實時多任務核心,優秀商品化的RTOS可以面對幾十個系列的嵌入式處理器MPU、MCU、DSP、SOC等提供類同的API接口,這是RTOS基於設備獨立的應用程式開發基礎。因此基於RTOS上的C語言程式具有極大的可移植性。據專家測算,優秀RTOS上跨處理器平台的程式移植只需要修改1~5%的內容。在RTOS基礎上可以編寫出各種硬體驅動程式、專家庫函式、行業庫函式、產品庫函式,和通用性的應用程式一起,可以作為產品銷售,促進行業內的智慧財產權交流,因此RTOS又是一個軟體開發平台。
RTOS是嵌入式系統的軟體開發平台,RTOS最關鍵的部分是實時多任務核心,它的基本功能包括任務管理、定時器管理、存儲器管理、資源管理、事件管理、系統管理、訊息管理、佇列管理、旗語管理等,這些管理功能是通過核心服務函式形式交給用戶調用的,也就是RTOS的API。RTOS的引入,解決了嵌入式軟體開發標準化的難題。隨著嵌入式系統中軟體比重不斷上升、應用程式越來越大,對開發人員、應用程式接口、程式檔案的組織管理成為一個大的課題。引入RTOS相當於引入了一種新的管理模式,對於開發單位和開發人員都是一個提高。
基於RTOS開發出的程式,具有較高的可移植性,實現90%以上設備獨立,一些成熟的通用程式可以作為專家庫函式產品推向社會。嵌入式軟體的函式化、產品化能夠促進行業交流以及社會分工專業化,減少重複勞動,提高知識創新的效率。
嵌入式工業的基礎是以套用為中心的晶片設計和面向套用的軟體開發。實時多任務作業系統(RTOS)進入嵌入式工業的意義不亞於歷史上機械工業採用三視圖的貢獻,對嵌入式軟體的標準化和加速知識創新是一個里程碑。

相關詞條

熱門詞條

聯絡我們