1.內存地址分類: 邏輯地址、線性地址、物理地址
邏輯地址:段選擇符+偏移量
線性地址:C語言中取地址符&打印出來的地址就是這個地址,也叫虛擬地址。
物理地址:內存總線尋址的具體地址,是真實存在的。
邏輯地址通過分段單元轉換成線性地址,線性地址通過分頁單元轉換成具體的物理地址。
邏輯地址---->分段單元---->線性地址------>分頁單元------>物理地址
2.硬件分段
6個段寄存器:存放段選擇符,cs,ss,ds,es,fs,gs
cs:代碼段寄存器?
ds:數據段寄存器
ss:棧段寄存器
段描述符:GDT(全局描述符表). LDT(局部描述符表)
快速訪問段描述符。
分段單元:先檢查TI字段找到段描述符所在的描述符表寄存器(GDTR or LDTR),將段選擇符中的index字段乘8再加上TI指向的寄存器的值得到段描述符的具體地址,
把邏輯地址的偏移量加上之前找到的段描述符中Base字段的值則得到了對應的線性地址。
Linux中的分段:Linux下邏輯地址和線性地址總是相同的。
3.硬件分頁: 4KB的頁 32位:頁目錄(最高10位)? 頁表(中間10位) 偏移量(最低12位)?
物理地址擴展分頁機制(PAE)
Linux分頁:2.6內核版本采用4級分頁模型:?
頁全局目錄、頁上級目錄、頁中間目錄、頁表
?