我們在第四天的時候有提到記憶體架構,那其實你知道程式在執行時並不會將所有的資料放進記憶體嗎 ?
每台電腦的記憶體空間其實都不一樣,甚至有些人的記憶體很小,若當所有程式的資料都放進記憶體的話會塞不完,也會導致不同程序間對記憶體存取產生衝突,所以出現了虛擬記憶體這個技術。每個程式有自己的虛擬記憶體,虛擬記憶體又會依照固定大小拆成一個一個的分頁,然後會有一個表將這些分頁一一對應到物理記憶體,在 CPU 執行時才將需要的部分從物理記憶體載入進記憶體中,而物理記憶體會先以 RAM 為主,在 RAM 不夠的話會延伸到硬碟,所以若程式需要一直去硬碟請求資料時會需要一直等待硬碟的 I/O 響應,造成程式執行效率不佳。
而對記憶體進行分頁的原因是,如果每次都將一隻程式的所有東西連續的放入記憶體,當有程式關掉並釋出記憶體後會空出這段空間,等到有另一隻程式需要時再將其載入到空出來的空間中,在許多程式開開關關之後,會造成記憶體碎片化。
參考資料
作業系統 Operating System 筆記 by Chang-Chia-Chi
Red Hat Enterprise Linux 4: 系統管理導論
Linux 讀書會-Virtual Memory by yoyo178134