有些作業系統(如UNIX和增強模式下的Windows)使用虛擬記憶體,這是一種使機器的作業地址空間大於實際記憶體的技術,它是透過用磁碟空間模擬RAM(random—access memory)來實現的。
在80386和更高階的Intel CPU晶片中,在現有的大多數其它微處理器(如Motorola 68030,sparc和Power PC)中,都有一個被稱為記憶體管理單元(Memory Management Unit,縮寫為MMU)的器件。MMU把記憶體看作是由一系列“頁(page)”組成的來處理。一頁記憶體是指一個具有一定大小的連續的記憶體塊,通常為4096或8192位元組。作業系統為每個正在執行的程式建立並維護一張被稱為程序記憶體對映(Process Memory Map,縮與為PMM)的表,表中記錄了程式可以存取的所有記憶體頁以及它們的實際位置。
每當程式存取一塊記憶體時,它會把相應的地址(虛擬地址,virtualaddress)傳送給MMU,MMU會在PMM中查詢這塊記憶體的實際位置(物理地址,physical address),物理地址可以是由作業系統指定的在記憶體中或磁碟上的任何位置。如果程式要存取的位置在磁碟上,就必須把包含該地址的頁從磁碟上讀到記憶體中,並且必須更新PMM以反映這個變化(這被稱為pagefault,即頁錯)。
希望你繼續讀下去,因為下面就要介紹其中的難點了。存取磁碟比存取RAM要慢得多,所以作業系統會試圖在RAM中保持儘量多的虛擬記憶體。如果你在執行一個非常大的程式(或者同時執行幾個小程式),那麼可能沒有足夠的RAM來承擔程式要使用的全部記憶體,因此必須把一些頁從RAM中移到磁碟上(這被為pagingout,即頁出)。
作業系統會試圖去判斷哪些頁可能暫時不會被使用(通常基於過去使用記憶體的情況),如果它判斷錯了,或者程式正在很多地方存取很多記憶體,那麼為了讀入已調出的頁,就會產生大量頁錯動作。因為RAM已被全部使用,所以為了調入要存取的一頁,必須調出另一頁,而這將導致更多的頁錯動作,因為此時不同的一頁已被移到磁碟上。在短時間內出現大量頁錯動作的情形被稱為頁抖動,它將大大降低系統的執行效率。
頻繁存取記憶體中大量散佈的位置的程式更容易在系統中造成頁抖動。如果同時執行許多小程式,而實際上已經不再使用這些程式,也很容易造成頁抖動。為了減少頁抖動,你應該減少同時執行的程式的數目。對於大的程式,你應該改變它的工作方式,以儘量使作業系統能準確地判斷出哪些頁不再需要。為此,你可以使用高速緩衝儲存技術,或者改變用於大型資料結構的查詢演算法,或者使用效率更高的malloc()函式。當然,你也可以考慮增加系統的RAM,以減少頁出動作。
有些作業系統(如UNIX和增強模式下的Windows)使用虛擬記憶體,這是一種使機器的作業地址空間大於實際記憶體的技術,它是透過用磁碟空間模擬RAM(random—access memory)來實現的。
在80386和更高階的Intel CPU晶片中,在現有的大多數其它微處理器(如Motorola 68030,sparc和Power PC)中,都有一個被稱為記憶體管理單元(Memory Management Unit,縮寫為MMU)的器件。MMU把記憶體看作是由一系列“頁(page)”組成的來處理。一頁記憶體是指一個具有一定大小的連續的記憶體塊,通常為4096或8192位元組。作業系統為每個正在執行的程式建立並維護一張被稱為程序記憶體對映(Process Memory Map,縮與為PMM)的表,表中記錄了程式可以存取的所有記憶體頁以及它們的實際位置。
每當程式存取一塊記憶體時,它會把相應的地址(虛擬地址,virtualaddress)傳送給MMU,MMU會在PMM中查詢這塊記憶體的實際位置(物理地址,physical address),物理地址可以是由作業系統指定的在記憶體中或磁碟上的任何位置。如果程式要存取的位置在磁碟上,就必須把包含該地址的頁從磁碟上讀到記憶體中,並且必須更新PMM以反映這個變化(這被稱為pagefault,即頁錯)。
希望你繼續讀下去,因為下面就要介紹其中的難點了。存取磁碟比存取RAM要慢得多,所以作業系統會試圖在RAM中保持儘量多的虛擬記憶體。如果你在執行一個非常大的程式(或者同時執行幾個小程式),那麼可能沒有足夠的RAM來承擔程式要使用的全部記憶體,因此必須把一些頁從RAM中移到磁碟上(這被為pagingout,即頁出)。
作業系統會試圖去判斷哪些頁可能暫時不會被使用(通常基於過去使用記憶體的情況),如果它判斷錯了,或者程式正在很多地方存取很多記憶體,那麼為了讀入已調出的頁,就會產生大量頁錯動作。因為RAM已被全部使用,所以為了調入要存取的一頁,必須調出另一頁,而這將導致更多的頁錯動作,因為此時不同的一頁已被移到磁碟上。在短時間內出現大量頁錯動作的情形被稱為頁抖動,它將大大降低系統的執行效率。
頻繁存取記憶體中大量散佈的位置的程式更容易在系統中造成頁抖動。如果同時執行許多小程式,而實際上已經不再使用這些程式,也很容易造成頁抖動。為了減少頁抖動,你應該減少同時執行的程式的數目。對於大的程式,你應該改變它的工作方式,以儘量使作業系統能準確地判斷出哪些頁不再需要。為此,你可以使用高速緩衝儲存技術,或者改變用於大型資料結構的查詢演算法,或者使用效率更高的malloc()函式。當然,你也可以考慮增加系統的RAM,以減少頁出動作。