複製鏈接
請複製以下鏈接發送給好友

多任務

鎖定
多任務處理是指用户可以在同一時間內運行多個應用程序,每個應用程序被稱作一個任務.Linux、windows就是支持多任務的操作系統,比起單任務系統它的功能增強了許多。
當多任務操作系統使用某種任務調度策略允許兩個或更多進程併發共享一個處理器時,事實上處理器在某一時刻只會給一件任務提供服務。因為任務調度機制保證不同任務之間的切換速度十分迅速,因此給人多個任務同時運行的錯覺。多任務系統中有3個功能單位:任務、進程和線程。

多任務多任務操作系統

Windows是當今流行的多任務操作系統,其多任務處理可分為兩類:協同式多任務和搶 先式多任務處理模式。使用協同式多任 [1]  務處理模式,CPU的分配直接由應用程序決定,所以系統性能好壞取決於應用程序設計好壞。而運行搶先式多任務處理模式,各進程佔用CPU的時間由系統調度程序決定,當調度程序檢測出有比當前任務優先級更高的程序事件後,暫停當前任務並將CPU時間分配給優先級更高的進程。所有的Win16應用程序都在同一台虛擬機上運行,各程序之間採用的是協同式多任務處理。每個Win32應用程序和MS-DOS應用程序都具有自己專用的虛擬機,其進程按搶先式多任務處理方式運行。
Windows多任務處理採用的是被稱為虛擬機(Virtual Machine)的技術。虛擬機實際上指的是由Windows在內存中創建的邏輯微機,由它來運行應用程序。當Windows接受到由鼠標器、鍵盤、定時器信號或某些I/O操作產生的"事件"後,為該任務分配CPU時間。每個任務使用由Windows分配的短暫的時間片(Timeslice)輪流使用CPU,由於CPU對每個時間片的處理速度非常快,在用户看來好像這些任務在同時執行。
Windows中的多任務調度策略 Windows中調度的任務有兩種狀態:運行狀態和等待狀態。正在運行的任務處於運行狀態,當該任務把CPU控制權交給其他任務後,就被置為等待狀態。為了便於任務調度和保存每個任務運行的參數,Windows在裝載應用程序時,由LoadModule()函數創建一任務數據庫 [1]  (簡稱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)進入嵌入式工業的意義不亞於歷史上機械工業採用三視圖的貢獻,對嵌入式軟件的標準化和加速知識創新是一個里程碑。
參考資料
  • 1.    Windows多任務管理機制 《成都大學學報》(自然科學版) 2000年 12月