Scheduling

為什麼系統會變得無響應?

  • May 26, 2012

我剛剛dot使用一個輸入文件執行(用於繪製有向圖的程序),該文件太大以至於無法在合理的時間內呈現。

我的整個系統都凍結了。我幾乎無法使用 ++ to kill 進入文本控制台Ctrl,但Alt花了幾分鐘。F1``dot

為什麼系統允許這樣的事情?為什麼它提供了一個非關鍵程序,例如dot99% 的系統,而使用剩餘的 1% 來保持響應?

這就是 GNU/Linux 和其他多任務系統的工作方式,它們在執行的程序之間共享處理器,dot不會有 99%,但在 99% 的時間內是 100%。每個程序支配處理器一段時間。

這是由調度程序處理的(linux 有幾個調度程序,有些只是採用通常的策略,有些嘗試給使用者界面更多的時間,等等)。

現在,在你的情況下,問題是——可能——這dot並沒有佔用大量的處理器時間,而是佔用了大量的記憶體。而當一個程序使用過多的記憶體時,就會出現thrashing,這正是使系統當機的過程,不是因為dot它做了很多,而是因為核心必須在磁碟之間來回移動記憶體頁面(交換分區)和系統記憶體。

即使dot只佔用了 99% 的 CPU 時間,也有可能會立即更改為文本終端,發生的情況是核心必須將dot內容移出記憶體,以便它可以X放回記憶體中以便X可以看到密鑰您只需點擊並移動到文本終端,然後核心必須移出仍在執行X的記憶體dot,然後還要dot移出以將文本終端程序(也許只是login?)移回記憶體中。(如果這看起來很混亂,這不僅僅是因為範例很混亂——現實就是這樣混亂。)

舉個例子,如果你登錄文本終端,你可能只需按一下鍵,按一下退格鍵,它就會很高興地實時發生,但如果你做一些簡單的事情,比如執行一個小工具ps,它會“凍結" 一段時間,因為它必須釋放記憶體來載入ps(它還必須在磁碟 I/O 隊列中等待,該隊列被大量用於將數據移入和移出記憶體,直到它能夠ps從文件系統請求) .

引用自:https://unix.stackexchange.com/questions/39221