如果低優先順序進程所分配的幀數低於電腦架構所需的最小數量,那麼必須暫停該進程執行。然後,應調出它的所有剩餘頁面,以便釋放所有分配的幀。這個規定引入了中級 CPU 排程的換進換出層。
事實上,需要研究一下沒有“足夠”幀的進程。如果進程沒有需要支援活動使用頁面的幀數,那麼它會很快產生缺頁錯誤。此時,必須置換某個頁面。然而,由於它的所有頁面都在使用中,所以必須立即置換需要再次使用的頁面。因此,它會再次快速產生缺頁錯誤,再一次置換必須立即返回的頁面,如此快速進行。
這種高度的頁面排程活動稱為
抖動。
如果一個進程的調頁時間多於它的執行時間,那麼這個進程就在抖動。
系統抖動的原因
抖動導致嚴重的效能問題。考慮以下場景,這是基於早期調頁系統的實際行為。
作業系統監視 CPU 利用率。如果 CPU 利用率太低,那麼通過向系統引入新的進程來增加多道程度。採用全域性置換演算法會置換任何頁面,而不管這些頁面屬於哪個進程。
現在假設進程在執行中進入一個新階段,並且需要更多的幀。它開始出現缺頁錯誤,並從其他進程那裡獲取幀。然而,這些進程也需要這些頁面,因此它們也會出現缺頁錯誤,並且從其他進程中獲取幀。這些缺頁錯誤進程必須使用調頁裝置以將頁面換進和換出。當它們為調頁裝置排隊時,就緒佇列清空。隨著進程等待調頁裝置,CPU 利用率會降低。
CPU 排程程式看到 CPU 利用率的降低,進而會增加多道程度。新進程試圖從其他執行進程中獲取幀來啟動,從而導致更多的缺頁錯誤和更長的調頁裝置佇列。因此,CPU 利用率進一步下降,並且 CPU 排程程式試圖再次增加多道程度。這樣就出現了抖動,系統吞吐量陡降,缺頁錯誤率顯著增加。結果,有效記憶體存取時間增加,沒有工作可以完成,因為進程總在忙於調頁。
圖 1 系統抖動