2011-10-07 286 views
1

在閱讀上的優先級隊列的話題Data Structures And Algorithms我碰到下面的段落來了......優先級隊列

一種可能的方式有利於短流程尚未鎖定長的人 是給進程Pi優先100 t(used)-t(init)其中t(used) 是過程所用的時間,t(init)是 過程啓動的時間,從某個time 0開始測量。請注意,100是 神奇的數字,因爲它是選擇比最大 數的過程,我們期待一次激活稍大。讀者可能會注意到,如果我們總是選擇具有最小優先級 號碼的流程,並且混合中沒有太多的短流程,那麼在 長期運行的流程不會很快完成,將會收到1%的 處理器的時間。

任何人都可以解釋的過程是怎樣佔用1%?如果你能以數學方式推導出結果,那將是一件好事。

回答

1

當然,所以最初曾經進程有一個負的優先級值。不管它是什麼,只是它是負面的,並且基於當前時間,但是這是表示的。爲了簡單起見,我們假設它只是一個整數值。

過程A開始爲0的優先級(假設我們在t = 0)。它執行的,說10個時間單位,但還沒有完成,因此它需要排隊在未來的某個時刻,繼續處理。因此,優先級將基於公式

priority = priority + 100*(endtime - starttime) 

priorityA = 0 + 100*(10-0) 
priorityA = 1000 

過程B的初始優先級在t = 5時初始化,因此它是-5。這是隊列中兩個優先級中最低的,所以它也會佔用一些時間。假設它也運行10個時間單位。完成後,B的優先級爲:

priorityB = -5 + 100*(20-10) 
priorityB = 995 

所以它會重新排隊。我們假設它再次運行10個單位。在它的時間片之後,它的新優先級將是:

priorityB = 995 + 100*(30-20) 
priorityB = 1995 

這樣就會在優先級隊列中A之後重新定位B. A然後運行,但這次只能運行5個時間單位。這是新的優先事項是:

priorityA = 1000 + 100*(35-30) 
priorityA = 1500 

和處理將再次在隊列的頂部,並得到重視。假設現在再次運行5個時間單位,它的新任務是:

priorityA = 1500 + 100(40-35) 
priorityA = 2000 

進程B後,將它定位並因此B會得到一些處理器時間。假設這次使用5個時間單位。

priorityB = 1995 + 100(45-40) 
priorityB = 2495 

現在它又輪到了。看看這兩個過程如何有效地獲得每個處理器50%的關注度?如果我們添加第三個長時間運行的過程(像A和B這樣的「長時間運行」是「長時間運行」,因爲它們沒有運行10個單位,然後完成,而是重新排序),這些過程由於每次運行並且沒有完成時,每個處理器的時間可能會分別佔處理器時間的大約33%,因此根據運行時間調整其優先級。在這種情況下,新進程始終首先運行,因爲它們的優先級值爲負,並且實際上最終會以較高的(較低的數值)優先級 一段時間。但是,這不會永遠持續下去 - 新流程將開始獲得越來越大的優先價值。

但是,由於我們已經基於本書示例的假設,在任何時候都有大約100個進程在等待一些處理時間,並且假設沒有太多短時間運行的進程,那裏通常會有大約100個進程爭奪處理器注意力,所以每個進程都會得到相同的時間量,並且很快它們的相對數值優先級值將全部聚集在一起(這意味着與具有最高優先級的進程在數值上沒有太大差別和優先級最低的那個),所以在「頂級」進程運行之後,它將獲得足夠的優先級以將其推到底部(或接近底部)。沖洗和重複,你基本上會得到一個循環的事情,假設他們都使用大約相同的時間每個周圍。在任何時候都有大約100個,所以再次假設存在少量短時間運行的進程,每個進程都會獲得處理器注意力的1/100。