當多個程式同時執行時,如何讓多個應用程式共同使用物理記憶體資源?有兩種簡單的方法:
使某乙個應用程式獨佔所有的記憶體資源。乙個程式要執行就將另乙個程式的記憶體資料轉存到硬碟中,使要執行的程式獨佔所有記憶體資源。
讓每乙個應用程式獨佔一部分記憶體資源。多個應用程式的資料,可以一直儲存在記憶體中,避免了硬碟讀寫的時間開銷。
為了使不同的應用程式高效,安全的使用記憶體,虛擬記憶體應運而生。顧名思義,虛擬記憶體是對物理記憶體的一種抽象,它介於應用程式與物理記憶體之間。應用程式是面向虛擬記憶體編寫的,而不再是面向物理記憶體編寫的。應用程式在執行時只能使用虛擬位址cpu負責將虛擬位址翻譯成實體地址,作業系統負責設定虛擬位址到實體地址的對映。
優點:應用程式只能看到自己的虛擬位址空間,從而保證了應用程式之間記憶體的隔離性,使應用程式執行更安全。
每個應用程式的虛擬記憶體空間是連續的、統一的,從而降低了程式設計的複雜性。
位址翻譯:cpu中的記憶體管理單元(mmu)負責將虛擬記憶體翻譯成物理記憶體。為了加速位址翻譯過程,mmu中還加入了轉址旁路快取(tlb),tlb可以快取一部分虛擬位址到實體地址的對映,從而加速翻譯。
虛擬記憶體是硬體提供的一種功能,而不是作業系統提供的。分段和分頁是mmu將虛擬位址翻譯為實體地址的兩種機制。
每一段都是乙個虛擬位址空間,虛擬位址由兩部分組成:段號和段內位址。mmu通過段表找到對應的物理段,再通過虛擬位址中的段內位址(偏移量)找到對應的實體地址。
缺點:造成物理出現外部碎片。虛擬位址中相鄰的段對應到物理記憶體中可能就不相鄰了,這樣雖然實現了物理記憶體的離散分配,但是可能造成物理記憶體中相鄰的段之間出現記憶體碎片(不足以對映給虛擬記憶體中的段)。
將應用程式的虛擬位址空間劃分成連續的,等長的虛擬頁,同時物理記憶體也被劃分為等長的,連續的虛擬頁。作業系統為每乙個應用程式構造頁表(虛擬頁到物理頁的對映關係表)。分頁機制下的虛擬位址由兩部分構成:虛擬頁號和頁內偏移量。
mmu通過應用程式的頁表找到虛擬頁號對應的實體地址,再通過頁內偏移量找到對應的實體地址。
上面的簡單分頁機制在32位作業系統中,還能用,但是在64位作業系統中就不行了。64位作業系統,虛擬位址長64位,也就是8個位元組,64位定址範圍是0~2^64,如果乙個虛擬頁大小4kb,那麼就會有2^64/4kb
個虛擬頁,如果用一張頁表來記錄,乙個頁表項8位元組,那麼頁表大小就為2^64/4kb*8
,這是乙個無法接受的數字。為了壓縮頁表的大小,多級頁表應運而生。下面是乙個4級頁表的示意圖:
在多級分頁機制下,0級頁表只有乙個頁表頁,而其餘每一級頁表都可以擁有多個離散的頁表頁。虛擬位址可以分為兩部分:虛擬頁號和頁內偏移。只不過虛擬頁號可以進一步分為四個部分,依次對應其在對應級數頁表中的索引。當任意一級頁表中的條目為空時,就意味著該條目對應的下一級頁表不需要存在,因此節省了大量空間(不過增加了翻譯時間,時間換空間)。
換頁是一種當物理記憶體不足時的一種機制。物理記憶體緊張時,作業系統會將一些物理頁寫入到磁碟中來騰出空間,這叫換出,當物理記憶體不緊張時,再將換出的物理頁讀回記憶體,這叫換入。換頁機制能夠工作的前提是缺頁異常,物理頁被換出,但是頁表中與之對應的虛擬頁仍然處於已分配狀態,但是當應用程式訪問該虛擬頁時卻發現該虛擬頁沒有對映到物理頁,於是就會觸發缺頁異常。
利用換頁機制,作業系統可以把物理記憶體放不下的資料臨時儲存在磁碟上,等到需要的時候再放回到物理記憶體中,從而能夠為應用程式提供超過物理記憶體容量的虛擬記憶體空間,不過換頁耗時較高會使程式執行變慢,常見的頁替換策略:min策略/opt策略、fifo策略、lru策略。
作業系統 物理記憶體與虛擬記憶體
概念解析 物理記憶體,在應用中,自然是顧名思義,物理上,真實的插在板子上的記憶體是多大就是多大了。而在cpu中的概念,物理記憶體就是cpu的位址線可以直接進行定址的記憶體空間大小。比如8086只有20根位址線,那麼它的定址空間就是1mb,我們就說8086能支援1mb的物理記憶體,及時我們安裝了128...
作業系統 物理記憶體和虛擬記憶體
正在執行的乙個程序,他所需的記憶體是有可能大於記憶體條容量之和的,比如你的記憶體條是256m,你的程式卻要建立乙個2g的資料區,那麼不是所有資料都能一起載入到記憶體 物理記憶體 中,勢必有一部分資料要放到其他介質中 比如硬碟 待程序需要訪問那部分資料時,在通過排程進入物理記憶體。所以,虛擬記憶體是程...
作業系統 虛擬記憶體
1.虛擬記憶體術語 虛擬記憶體 程式引用記憶體使用位址與記憶體系統用於識別物理儲存站點的位址是不同的,程式生成的位址會自動轉換成機器指令。虛擬記憶體的大小收到定址機制和可用的備用記憶體量的限制,而不受記憶體儲存位置實際數量的限制。虛擬位址 在虛擬記憶體中分配給某一位置的位址使該位置可以被訪問,彷彿它...