linux下的虛擬內存和分頁分段機制

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


而在分頁當中共同指向一個物理地址的情況,就想當與共享內存
這裏寫圖片描述

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

學習傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章