必須確保進度必須由我們的同步機制提供。 在轉向變數機制中,由於不想進入臨界區的進程並沒有考慮其他感興趣的進程,所以沒有提供進展。
另一個進程也將不得不等待,而不管臨界區內部沒有進程。 如果作業系統可以利用額外的變數以及轉向變數,那麼這個問題就可以解決,而且我們的問題可以在大部分範圍內提供進展。
感興趣的變數機制利用額外的布林變數來確保提供進度。
對於進程Pi
Non CS
Int[i] = T ;
while ( Int[j] == T ) ;
Critical Section
Int[i] = F ;
對於進程Pj
Non CS
Int [1] = T ;
while ( Int[i] == T ) ;
Critical Section
Int[j]=F ;
在這個機制中,使用了一個額外的變數。 這是一個布林變數,用於儲存在臨界區中的興趣進程。
想要進入臨界區的進程首先在入口區檢查其他過程是否有興趣進入內部。 該進程將等待直到另一個進程感興趣的時間。
在退出部分,該進程使其感興趣變數的值為false
,以便其他進程可以進入臨界區。
該表格顯示了在場景中獲得機會的進程和進程的利益變數的可能值。
Interest [Pi] | Interest [Pj] | 獲得機會的過程 |
---|---|---|
True | True | 首先表現出興趣的進程。 |
True | False | Pi |
False | True | Pj |
False | False | X |
讓我們根據需求分析機制。
相互排斥
在感興趣的變數機制中,如果一個進程有興趣進入CPU,那麼另一個進程將等待,直到它變得不感興趣。 因此,臨界區不能同時存在多個進程,因此該機制保證互斥。
進展
在這種機制中,如果一個進程不想進入臨界區,那麼它不會阻止另一進程進入臨界區。 因此,這種方法肯定會提供進展。
有界等待
為了分析有界等待,讓我們考慮兩個過程Pi和Pj,合作過程是否希望在關鍵部分執行。 下面以相對方式顯示過程執行的指令。
最初,這兩個過程的利益變數是錯誤的。 進程Pi顯示了進入臨界區的興趣。
它將其Interest變數設定為true,並檢查Pj是否也有興趣。 由於其他進程的興趣變數是錯誤的,因此Pi將進入臨界區。
同時,過程Pi被搶占並且Pj被排程。 Pj是一個合作過程,因此它也想進入關鍵部分。 它通過將興趣變數設定為true來顯示其興趣。
它還檢查其他流程是否也有興趣。 我們應該注意到Pi被搶佔了,但其感興趣的變數是真實的,這意味著它需要在臨界區進一步執行。 因此Pj不會有機會陷入while迴圈。
同時,CPU將Pi的狀態從阻塞狀態變為執行狀態。 Pi尚未完成臨界區,因此它完成臨界區並通過將interest變數設定為False而退出。
現在,當Pi再次想要進入臨界區並將其感興趣的變數設定為true並且檢查Pj的感興趣變數是否為真時,情況是可能的。 在這裡,Pj的興趣變數是True,因此Pi將陷入while迴圈並等待Pj變得不感興趣。
因為,Pj仍然停留在while迴圈中,等待Pi感興趣的變數變為false。 因此,這兩個進程都在等待對方,他們都沒有進入臨界區。
這是死鎖的情況,在死鎖的情況下永遠不能提供有界的等待。
因此,我們可以說感興趣的變數機制並不能保證死鎖。
架構中立
該機制是在使用者模式下執行的完整軟體機制,因此它保證了可移植性或架構中立性。