內(nèi)核地址空間
邏輯地址->線性地址->物理地址
8086
物理地址 = 段地址左移4位 + 段內(nèi)偏移量
這種方式的尋址最大地址為0xFFFF; 0xFFFF = 0x10FFEF, 這段內(nèi)存大于1M空間,該如何尋址鞋真,8086的做法就是自動從物理內(nèi)存0地址尋址茧跋,按0xFFFF取模尋址。
80386:
80386cpu當需要訪問內(nèi)存時,首先給出的邏輯地址筷畦,然后通過MMU內(nèi)存單元分段機制继效,轉換為線性地址, 然后再通過MMU管理單元分頁機制轉換為物理地址训措。
當處理器需要訪問內(nèi)存時伪节,給出的邏輯地址是:選擇符+偏移量,然后通過MMU的分段機制,即可獲取這個段的描述符绩鸣,然后存入描述符寄存器怀大,取出段基地址 + 偏移量,即可獲得這個邏輯地址對應的線性地址呀闻。
線性地址 = 目錄項(dir)+ 頁表項(page)+ 頁面偏移(offset)
一個線性地址由10位目錄表+10位頁表+12位偏移量組成化借,當給定一個線性地址時,
- 首先從控制寄存器CR3獲取頁目錄基地址捡多,然后加上線性地址的前10位頁目錄偏移量即可得到頁表的基地址蓖康;
- 接著頁表基地址+線性地址第二個10位的頁表偏移铐炫,即可得到內(nèi)存頁的首地址;
- 最后內(nèi)存頁的首地址+線性地址的最后12位偏移量蒜焊,即可得到最后的物理地址倒信;
以32位的操作系統(tǒng)為例,內(nèi)核地址空間占1G泳梆, 用戶地址空間占3G鳖悠。內(nèi)核代碼訪問或線程訪問內(nèi)存時,訪問的都是邏輯地址鸭丛。從邏輯地址映射到物理地址竞穷,則是頁表負責的事。內(nèi)核邏輯地址空間訪問為0xc0000000-0xffffffff鳞溉,這一限制導致只能訪問前1g的物理內(nèi)存瘾带。
簡單的映射是行不通的。
段選擇符->全局段描述符->段基址-》線性地址-》多級頁表-》物理地址