非優先權式多工

Windows環境下允許多個程式在相同熒幕上一起執行,前後切換非常容易,並且還可以快速地將資料從一個程式移動到另一個程式中。早期Windows的多工實作還不是多使用者作業系統中傳統的優先權式的分時多工。這些作業系統使用系統時鐘周期性地中斷一個工作並開始另一個工作,稱為“非優先權式的多工”,由於Windows訊息驅動的架構而使這種型態的多工成為可能。一個Windows程式將在記憶體中睡眠,直到它收到一個訊息為止。這些訊息通常是使用者的鍵盤或滑鼠輸入的直接或間接結果。當處理完訊息之後,程式將控制權返回給Windows。

基本介紹

  • 中文名:非優先權式多工
  • 外文名:Non priority preemptive multitasking
概述,特點,原理,

概述

當Microsoft在1985年發表Windows 1.0時,它是最成熟的解決方案,目的是突破DOS的局限。Windows在實際模式下執行。但是即使這樣,它已可以在實體記憶體中移動記憶體塊。這是多工的前提,雖然移動的方法尚未完全透明於套用程式,但是幾乎可以忍受了。在圖形視窗環境中,多工比在一種命令列單使用者作業系統中顯得更有意義。例如,在傳統的命令列UNIX中,可以在命令列之外執行程式,讓它們在背景執行。然而,程式的所有顯示輸出必須被重新轉向到一個檔案中,否則輸出將和使用者正在做的事情混在一起。

特點

視窗環境允許多個程式在相同熒幕上一起執行,前後切換非常容易,並且還可以快速地將資料從一個程式移動到另一個程式中。例如,將繪圖程式中建立的圖片嵌入由文書處理程式編輯的文字檔案中。在Windows中,以多種方式支援資料轉移,首先是使用剪貼簿,後來又使用動態資料交換(DDE),而現在則是透過物件連結和嵌入(OLE)。
不過,早期Windows的多工實作還不是多使用者作業系統中傳統的優先權式的分時多工。這些作業系統使用系統時鐘周期性地中斷一個工作並開始另一個工作。Windows的這些16位元版本支援一種被稱為“非優先權式的多工”,由於Windows訊息驅動的架構而使這種型態的多工成為可能。通常情況下,一個Windows程式將在記憶體中睡眠,直到它收到一個訊息為止。這些訊息通常是使用者的鍵盤或滑鼠輸入的直接或間接結果。當處理完訊息之後,程式將控制權返回給Windows。

原理

Windows的16位元版本不會絕對地依據一個timer tick將控制權從一個Windows程式切換到另一個,任何的工作切換都發生在當程式完成對訊息的處理後將控制權返回給Windows時。這種非優先權式的多工也被稱為“合作式的多工”,因為它要求來自套用程式方面的一些合作。一個Windows程式可以占用整個系統,如果它要花很長一段時間來處理訊息的話。
雖然非優先權式的多工是16位元Windows的一般規則,但仍然出現了某些形式的優先權式多工。Windows使用優先權式多工來執行DOS程式,而且,為了實作多媒體,還允許動態連結程式庫接收硬體時鐘中斷
16位元Windows包括幾個功能特性來幫助程式寫作者解決(或者,至少可以說是對付)非優先權式多工中的局限,最顯著的當然是時鐘式滑鼠游標。當然,這並非一種解決方案,而僅僅是讓使用者知道一個程式正在忙於處理一件冗長作業,因而讓使用者在一段時間內無法使用系統。另一種解決方案是Windows計時器,它允許程式周期性地接收訊息並完成一些工作。計時器通常用於時鐘套用和動畫。
針對非優先權式多工的另一種解決方案是PeekMessage函式呼叫,我們曾在第五章中的RANDRECT程式里看到過。一個程式通常使用GetMessage呼叫從它的訊息佇列中找尋下一個訊息,不過,如果在訊息佇列中沒有訊息,那么GetMessage不會傳回,一直到出現一個訊息為止。而另一方面,PeekMessage將控制權傳回程式,即使沒有等待的訊息。這樣,一個程式可以執行一個冗長作業,並在程式碼中混入PeekMessage呼叫。只要沒有這個程式或其他任何程式的訊息要處理,那么這個冗長作業將繼續執行。

相關詞條

熱門詞條

聯絡我們