1. 程式人生 > >linux下的虛擬記憶體和分頁分段機制

linux下的虛擬記憶體和分頁分段機制

前言:由於計算機的記憶體是有限的,比0到2的32次方就是對應4G,這時候作業系統就引入了虛擬記憶體這一個概念,
1,首先可以從程式的編譯下手,對於java或者c++而言,程式在編譯的時候需要記憶體,但是此時程式並沒有在真的物理機上執行著,所以就引入虛擬記憶體這一概念。
2,(分段)當程式在真機上面跑的時候,程式就會被用到分段(識別符號+偏移量),分段是對於整個程式而言的,把程式的虛擬內訓的起始和重點看作一段,是把邏輯地址劃對映到線性地址,可以理解為虛擬內訓裡面的分段機制,在沒有這一機制的時候,程式訪問的直接實體地址,沒有經過CPU的判斷,就會容易造成地址衝突。在分段的機制下,程式訪問的是虛擬記憶體,而虛擬記憶體就想當與CPU控制的一箇中間媒介,比如程式A訪問的虛擬記憶體地址是0*00000000~0*00010110,如果不在這一範圍內,就會拒絕訪問。程式關心的都是虛擬地址,因而也不會有地址重新定位的這一說法。
(分頁)分頁是線性地址對映到實體地址,分頁是比分段粒度更小的操作,避免了記憶體碎片。同時分頁是提供給系統的,不是提供給使用者的,作業系統給分頁的大小一般是4kb。

而在分頁當中共同指向一個實體地址的情況,就想當與共享記憶體
這裡寫圖片描述

由上面說到先分段再分頁,可以看出,分頁的地址是一維的,分段的地址是二維的,既要給出段名又要給出記憶體地址。
關於暫存器地址左移的傳送門

學習傳送門