物理地址有什么用
物理地址有什么用
有網(wǎng)友反饋說:我在閱讀一些電腦知識的讀本時,常常看到“物理地址”這個名詞,說實話,我只知道IP地址,從未聽說過物理地址。這個物理地址也象IP地址一樣重要嗎?相信很多用戶與這位網(wǎng)友是一樣不知道物理地址有什么用的,針對這個情況,學習啦小編特意分享了物理地址的一些知識,希望可以幫助到大家。
物理地址
在存儲器里以字節(jié)為單位存儲信息,為正確地存放或取得信息,每一個字節(jié)單元給以一個唯一的存儲器地址,稱為物理地址(Physical Address),又叫實際地址或絕對地址。
在x86 CPU中,采用了段頁式內(nèi)存管理機制,分段和分頁模型。
分頁(Paging)機制
邏輯地址由頁號和偏移量組成。
分段(Segment)機制
分段允許程序員把存儲器看成由多個地址空間或段組成。程序和相關(guān)的數(shù)據(jù)被劃分成一組段(segment),不要求所有程序的所有段都有相同長度。
和分頁一樣,分段情況下的邏輯地址由兩部分組成:段號和偏移量。
分段的優(yōu)點:
簡化不斷增長的數(shù)據(jù)結(jié)構(gòu)處理。
允許程序獨立地改變或重新編譯,而不要求整個程序集合重新鏈接和重新加載。
有助于進程間的共享。
有助于保護。由于一個段可以被構(gòu)造成包含一個明確定義的程序或數(shù)據(jù)集,程序員或系統(tǒng)管理員可以以一種方便的形式指定訪問權(quán)限。
虛擬內(nèi)存
內(nèi)存的基本思想是程序、數(shù)據(jù)、堆棧的總大小可以超過可用物理內(nèi)存的大小,操作系統(tǒng)把程序當前使用的那些部分保留在內(nèi)存中,而其他部分保存在磁盤上。
虛擬內(nèi)存的實現(xiàn)基于分頁技術(shù)。
虛擬內(nèi)存的優(yōu)點:
在內(nèi)存中可以同時運行多個進程
進程可以比內(nèi)存全部空間還大,不再局限于物理內(nèi)存大小
內(nèi)存更高效地被使用
2 邏輯地址到線性地址的映射過程
X86 CPU邏輯地址到線性地址映射過程如下圖:
邏輯地址到線性地址映射過程如下:
(1)根據(jù)指令的性質(zhì)來確定應該使用哪一個段寄存器(Segment Selector),例如轉(zhuǎn)移指令中的地址在代碼段,而取數(shù)據(jù)指令中的地址在數(shù)據(jù)段;
(2)根據(jù)段存器的內(nèi)容,找到相應的“地址段描述結(jié)構(gòu)“(Segment Descriptor),段描述結(jié)構(gòu)都放在一個表(Descriptor Table)中(GDT或LDT、TR、IDT),而表的起始地址保存在GDTR、LDTR、IDTR、TR寄存器中。這就是4個內(nèi)存管理寄存器GDTR、LDTR、IDTR和TR的用途;
(3)從地址段描述結(jié)構(gòu)中找到基地址(Base Address);
(4)將指令發(fā)出的地址作為位移(Effective Address),與段描述結(jié)構(gòu)中規(guī)定的段長度相比,看看是否越界;
(5)根據(jù)指令的性質(zhì)和段描述符中的訪問權(quán)限來確定是否越權(quán);
(6)將指令中發(fā)出的地址作為位移,與基地址相加而得出線性地址(Linear Address)。
問題: 1、邏輯地址就是CPU指令發(fā)出的地址,那么段選擇碼(Segment Selector)的值在哪里? 2、知道段選擇碼后,需要從描述符表(Descriptor Table)中找到相應的表項,那怎么知道描述符表在內(nèi)存中哪個位置?
3 線性地址到物理地址的映射過程
X86 CPU線性地址到物理地址映射過程:
線性地址到物理地址映射過程如下:
(1)從CR3寄存器中獲取頁面目錄表(Page Directory)的基地址;
(2)以線性地址的Directory位段為下標,在目錄(Page Directory)中取得相應頁面表(Page Table)的基地址;
(3)以線性地址中的Table位段為下標,在所得到的頁面表中獲得相應的頁面描述項;
(4)將頁面描述項中給出的頁面基地址與線性地址中的offset位段相加得到物理地址。
看過“ 物理地址有什么用 ”的人還看了: