程序(在很多作業系統中也稱為任務)是作業系統中的一個十分重要的概念。什麼是程序呢?所謂程序是指程式的一次執行過程,在Windows95中,就是一個EXE檔案的執行過程。但是應該注意,程序和程式是兩個不同的概念,不能等同。程式是一組指令的有序集合,是靜態的;程序則是指一組指令序列在處理機上的一次執行過程,是動態的。嚴格地說,程序是程式在一個數據集合上的執行過程,它具有動態、並行、獨立、非同步等特性;一個程序由“建立”而產生、由排程而進入執行、在資源不能滿足時被“掛起”、由“撤銷”而消亡,因此,程序是有生命的。當然,一個程序將唯一地對應於一個EXE檔案。程式和程序的關係還可以打個比方,如果把程式看作一支曲譜,程序可以理解為對這支曲譜的演奏過程。當然,這個比方並不準確,但可以幫助理解程式和程序之間的關係。
在Windows95中還採用了執行緒的概念,所謂執行緒是指由程序進一步派生出來的一組程式碼(指令組)的執行過程。一個程序可以產生多個執行緒,這些執行緒都共享該程序的地址空間,它們可以並行、非同步地執行。採用執行緒最主要的好處是:使同一個程式能有幾個並行執行的路徑,提高了執行速度;執行緒需要的系統開銷比程序要小。應該說明的是,在Windows95中,“多工”是基於執行緒而不是基於程序。
多工執行是指在同一臺計算機系統的同一時刻執行多個程式。由於允許活動任務和後臺任務同時執行,所以可以做到有一個任務在後臺執行時,前臺又能幹另一件事。比如說,我們可以一邊用圖文處理程式編輯一個檔案,一邊讓列印程式完成列印工作。這就極大地提高了工作效率,因為大多數使用者都確實需要同時對幾個不同的應用程式進行工作。
在Windows3.X中,多個應用程式同時執行是採取一種所謂的“協作式”方式,稱為“協作式多工”。“協作”這個用語意味著多個應用程式之間必須相互協調,依次實現對作業系統的控制。它們並不是真正的多工執行,因為其中還有多工共享系統資源的問題。為了讓作業系統把控制權從一個程式轉換到另一個程式,當前活動的程式就必須週期地檢查一個訊息佇列。如果某個程式不能經常檢查訊息佇列,作業系統就不能實現控制權的轉移。
在Windows95中採用了一種所謂帶優先權的多工方式來執行基於Win32(Windows的32位)應用程式,稱為“搶先式多工”。在這種方式下,作業系統可以在需要時中斷當前的任務,再按照任務佇列中各個任務的優先級別來進行任務的排程。為相容起見,基於Win16(Windows的16位)應用程式仍採用協作式方式完成多工執行。在Windows3.X的協作式多工環境中,必須在Windows3.X“控制面板”中386增強模式實用程式的一個對話方塊中才能設定任務的優先順序。而Windows95則在預設情況下就是完全帶優先順序的,所以不需要手工對優先順序加以設定,這個任務由Windows95在後臺透明地加以完成。
Windows95搶先式多工執行實際上就是搶先式多執行緒執行。為了搶先式多執行緒執行實現,每個執行緒有一個優先順序值,範圍是從0到31。優先順序0最低,保留給系統使用。優先順序1到31分成四類:空閒(1-6),正常(5-11),高(11-15)和實時(16-31)。正常分類又進一步分成二級:後臺(5-9)和前臺(6-11)。注意這些範圍是有重疊的。這樣做可使排程更靈活,例如,允許某些後臺任務比某些前臺任務更重要,儘管在通常情況下,前臺任務的優先順序應該更高。使用實時優先順序時要非常當心。如果你把一個任務的優先順序設得太高,也可能無法實現多工執行功能。這是因為一個任務的優先順序太高了,它就完全不允許系統中有其他任務執行。
VMM(虛擬機器管理程式)負責在分時搶先的環境裡排程各個程序和執行緒,具體包括以下服務:生成執行緒、管理執行緒、撤消執行緒和執行緒排程。
VMM中有兩個排程程式:主排程程式和時間片排程程式。主排程程式負責確定最高優先順序的執行緒。只有最高優先順序的執行緒才會執行,其他優先順序較低的都被封鎖;時間片排程程式負責為所有具有最高優先順序的可執行任務分配時間片。
系統執行過程中,執行緒的優先順序可由系統或裝置驅動程式(或兩者)改變。例如,一旦中斷產生,則處理這個中斷的執行緒優先順序臨時提高,以便它立即得到時間來處理該中斷。完成後,優先順序可以再降低。
在搶先式多工中,基於Win32的應用程式不必讓位給其它程式就能以友好的方式實現多工。作業系統會根據系統的需要把控制權交給某個執行中的任務,或從某個執行中的任務移走控制權。這才是真正的多工作業系統。
殭屍程序消耗執行緒
程序(在很多作業系統中也稱為任務)是作業系統中的一個十分重要的概念。什麼是程序呢?所謂程序是指程式的一次執行過程,在Windows95中,就是一個EXE檔案的執行過程。但是應該注意,程序和程式是兩個不同的概念,不能等同。程式是一組指令的有序集合,是靜態的;程序則是指一組指令序列在處理機上的一次執行過程,是動態的。嚴格地說,程序是程式在一個數據集合上的執行過程,它具有動態、並行、獨立、非同步等特性;一個程序由“建立”而產生、由排程而進入執行、在資源不能滿足時被“掛起”、由“撤銷”而消亡,因此,程序是有生命的。當然,一個程序將唯一地對應於一個EXE檔案。程式和程序的關係還可以打個比方,如果把程式看作一支曲譜,程序可以理解為對這支曲譜的演奏過程。當然,這個比方並不準確,但可以幫助理解程式和程序之間的關係。
在Windows95中還採用了執行緒的概念,所謂執行緒是指由程序進一步派生出來的一組程式碼(指令組)的執行過程。一個程序可以產生多個執行緒,這些執行緒都共享該程序的地址空間,它們可以並行、非同步地執行。採用執行緒最主要的好處是:使同一個程式能有幾個並行執行的路徑,提高了執行速度;執行緒需要的系統開銷比程序要小。應該說明的是,在Windows95中,“多工”是基於執行緒而不是基於程序。
多工執行是指在同一臺計算機系統的同一時刻執行多個程式。由於允許活動任務和後臺任務同時執行,所以可以做到有一個任務在後臺執行時,前臺又能幹另一件事。比如說,我們可以一邊用圖文處理程式編輯一個檔案,一邊讓列印程式完成列印工作。這就極大地提高了工作效率,因為大多數使用者都確實需要同時對幾個不同的應用程式進行工作。
在Windows3.X中,多個應用程式同時執行是採取一種所謂的“協作式”方式,稱為“協作式多工”。“協作”這個用語意味著多個應用程式之間必須相互協調,依次實現對作業系統的控制。它們並不是真正的多工執行,因為其中還有多工共享系統資源的問題。為了讓作業系統把控制權從一個程式轉換到另一個程式,當前活動的程式就必須週期地檢查一個訊息佇列。如果某個程式不能經常檢查訊息佇列,作業系統就不能實現控制權的轉移。
在Windows95中採用了一種所謂帶優先權的多工方式來執行基於Win32(Windows的32位)應用程式,稱為“搶先式多工”。在這種方式下,作業系統可以在需要時中斷當前的任務,再按照任務佇列中各個任務的優先級別來進行任務的排程。為相容起見,基於Win16(Windows的16位)應用程式仍採用協作式方式完成多工執行。在Windows3.X的協作式多工環境中,必須在Windows3.X“控制面板”中386增強模式實用程式的一個對話方塊中才能設定任務的優先順序。而Windows95則在預設情況下就是完全帶優先順序的,所以不需要手工對優先順序加以設定,這個任務由Windows95在後臺透明地加以完成。
Windows95搶先式多工執行實際上就是搶先式多執行緒執行。為了搶先式多執行緒執行實現,每個執行緒有一個優先順序值,範圍是從0到31。優先順序0最低,保留給系統使用。優先順序1到31分成四類:空閒(1-6),正常(5-11),高(11-15)和實時(16-31)。正常分類又進一步分成二級:後臺(5-9)和前臺(6-11)。注意這些範圍是有重疊的。這樣做可使排程更靈活,例如,允許某些後臺任務比某些前臺任務更重要,儘管在通常情況下,前臺任務的優先順序應該更高。使用實時優先順序時要非常當心。如果你把一個任務的優先順序設得太高,也可能無法實現多工執行功能。這是因為一個任務的優先順序太高了,它就完全不允許系統中有其他任務執行。
VMM(虛擬機器管理程式)負責在分時搶先的環境裡排程各個程序和執行緒,具體包括以下服務:生成執行緒、管理執行緒、撤消執行緒和執行緒排程。
VMM中有兩個排程程式:主排程程式和時間片排程程式。主排程程式負責確定最高優先順序的執行緒。只有最高優先順序的執行緒才會執行,其他優先順序較低的都被封鎖;時間片排程程式負責為所有具有最高優先順序的可執行任務分配時間片。
系統執行過程中,執行緒的優先順序可由系統或裝置驅動程式(或兩者)改變。例如,一旦中斷產生,則處理這個中斷的執行緒優先順序臨時提高,以便它立即得到時間來處理該中斷。完成後,優先順序可以再降低。
在搶先式多工中,基於Win32的應用程式不必讓位給其它程式就能以友好的方式實現多工。作業系統會根據系統的需要把控制權交給某個執行中的任務,或從某個執行中的任務移走控制權。這才是真正的多工作業系統。
殭屍程序消耗執行緒