2023年11月3日 星期五

why thrashing occurs in virtual memory systems

依據現代電腦的馮紐曼運算架構,CPU始終只能從記憶體讀取資料執行,不能直接從硬碟讀取資料。因此,程式常受限於記憶體的容量限制而無法載入執行。可是明明電腦系統的硬碟容量常是記憶體的上千倍,難道不能克服困難,將硬碟當成記憶體使用嗎?

虛擬記憶體 (Virtual Memory)就是這樣一個應急措施,可將硬碟分一塊置換空間 (Swap Space),當成記憶體用。其明顯好處是從此電腦不再受記憶體的容量限制,再大、再多的程式也可執行。只要硬碟夠大,頂多暫時存放在硬碟的置換空間,要用時再搬進記憶體執行即可。

但記住虛擬記憶體始終只是一個應急措施,不能當成常態使用。理由是資料在記憶體和硬碟之間搬移 (swapping) 時,要花費很久的等候時間,互動式用戶將等的不耐煩,故只適合非不得已偶一為之。例如,記憶體的批次用戶較多,可暫時挪到硬碟休息,先讓互動用戶使用記憶體。

採用虛擬記憶體有一個副作用是如果管理不好,分配給程式的實體記憶體不夠,須要先將暫時不用的程式從記憶體搬出到硬碟 (page out),才能騰出空間,讓須要的程式碼從硬碟搬回到記憶體 (page in) 執行。萬一記憶體極端不足情況下,很可能剛搬出的程式,等下又要再搬入,造成所謂的掙扎 (thrashing) 現象。出現此反常現象時,系統效能將變極差,只見硬碟不斷亮燈,苦苦忙著將資料從記憶體搬出搬進,I/O使用率陡升,而CPU卻坐等資料搬好,閒閒沒事幹,CPU使用率陡降。

註: 上述 掙扎現象的英文 thrashing 查字典有如下諸多意思:
           掙扎,輾轉,擺盪,振盪,顛簸,抖動,猛移,往復移動,頻繁置換;
           徒勞,作虛功,無進展,白費力氣,原地踏步;打敗,痛打,窮忙,窮打,窮追猛打
       常見直譯有 輾轉,擺盪,甚至意譯 窮忙,作虛功,也都很傳神。
       選擇 掙扎 則兼有直譯及意譯,猶如泳者奮力浮水,離水之魚奮拍入水之勢。

沒有留言: