<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦 > 學習電腦 > 電腦入門 > 虛擬地址與物理地址的轉換

        虛擬地址與物理地址的轉換

        時間: 春健736 分享

        虛擬地址與物理地址的轉換

          虛擬地址轉換為物理地址的第一步是將從處理器得到的虛擬地址和TLB中的虛擬地址進行比較。,今天學習啦小編與大家分享下虛擬地址與物理地址的轉換,有需要的朋友不妨了解下。

          虛擬地址與物理地址的轉換

          已知一個虛擬地址0x01AF5518, 則轉換的過程如下:

          注意: *這里討論的以Windows下普通模式分頁的情況, 也就是2級頁表的情況*

          1.首先把虛擬地址拆分成3個部分(低12位, 中10位, 高10位), 換成2進制如下:

          -> 0000 0001 1010 1111 0101 0101 0001 1000

          按照10, 10, 12的位數重新排列后

          -> (頁目錄索引)00 000 00110, (頁表項索引)10 1111 0101, (偏移)0101 0001 1000

          換算成十六進制后可以得到如下結果

          頁目錄索引 = 6, 頁表項索引 = 0x2f5 , 偏移 = 0x518

          2. 根據當前的CR3寄存器中的物理地址定位頁目錄表基址

          Cr3中存放的是物理地址, 這個物理地址指向進程的頁目錄表基址, 由此可以得到

          頁目錄表基址(PDE) = Cr3 = 0xAA0E5000

          3. 計算頁表項的地址

          頁表地址存放在頁目錄表(PDE)中的第6個項目中, 也就是

          [0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867為該頁表屬性值, PTE = 0x3D955000

          3. 計算頁面物理地址

          我們要找的頁面在這個頁表中的第0x2f5項, 所以虛擬地址所在的頁的物理地址為

          [0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =

          假設[0x3D955BD4] = 0x7095e847, 頁面的物理地址 x0x7095e000, 0x00000847表示的是頁面屬性

          4. 計算最終的物理地址

          由虛擬地址分離的偏移可以計算出最終的物理地址為

          0x7095E000 + 0x00000518 = 0x7095E518.

          虛擬地址和物理地址的概念

          CPU通過地址來訪問內存中的單元,地址有虛擬地址和物理地址之分,如果CPU沒有MMU(Memory Management Unit,內存管理單元),或者有MMU但沒有啟用,CPU核在取指令或訪問內存時發出的地址將直接傳到CPU芯片的外部地址引腳上,直接被內存芯片(以下稱為物理內存,以便與虛擬內存區分)接收,這稱為物理地址(Physical Address,以下簡稱PA),如下圖所示。

          物理地址示意圖

          如果CPU啟用了MMU,CPU核發出的地址將被MMU截獲,從CPU到MMU的地址稱為虛擬地址(Virtual Address,以下簡稱VA),而MMU將這個地址翻譯成另一個地址發到CPU芯片的外部地址引腳上,也就是將虛擬地址映射成物理地址,如下圖所示[1]。

          虛擬地址示意圖

          MMU將虛擬地址映射到物理地址是以頁(Page)為單位的,對于32位CPU通常一頁為4K。例如,虛擬地址0xb700 1000~0xb700 1fff是一個頁,可能被MMU映射到物理地址0x2000~0x2fff,物理內存中的一個物理頁面也稱為一個頁框(Page Frame)。

          內核也不能直接訪問物理地址.但因為內核的虛擬地址和物理地址之間只是一個差值0xc0000000的區別,所以從物理地址求虛擬地址或從虛擬地址求物理地址很容易,+-這個差就行了

          物理地址(physical address)

          用于內存芯片級的單元尋址,與處理器和CPU連接的地址總線相對應。

          ——這個概念應該是這幾個概念中最好理解的一個,但是值得一提的是,雖然可以直接把物理地址理解成插在機器上那根內存本身,把內存看成一個從0字節一直到最大空量逐字節的編號的大數組,然后把這個數組叫做物理地址,但是事實上,這只是一個硬件提供給軟件的抽像,內存的尋址方式并不是這樣。所以,說它是“與地址總線相對應”,是更貼切一些,不過拋開對物理內存尋址方式的考慮,直接把物理地址與物理的內存一一對應,也是可以接受的。也許錯誤的理解更利于形而上的抽像。

          虛擬內存(virtual memory)

          這是對整個內存(不要與機器上插那條對上號)的抽像描述。它是相對于物理內存來講的,可以直接理解成“不直實的”,“假的”內存,例如,一個0x08000000內存地址,它并不對就物理地址上那個大數組中0x08000000 - 1那個地址元素;

          之所以是這樣,是因為現代操作系統都提供了一種內存管理的抽像,即虛擬內存(virtual memory)。進程使用虛擬內存中的地址,由操作系統協助相關硬件,把它“轉換”成真正的物理地址。這個“轉換”,是所有問題討論的關鍵。

          有了這樣的抽像,一個程序,就可以使用比真實物理地址大得多的地址空間。(拆東墻,補西墻,銀行也是這樣子做的),甚至多個進程可以使用相同的地址。不奇怪,因為轉換后的物理地址并非相同的。

          ——可以把連接后的程序反編譯看一下,發現連接器已經為程序分配了一個地址,例如,要調用某個函數A,代碼不是call A,而是call 0x0811111111 ,也就是說,函數A的地址已經被定下來了。沒有這樣的“轉換”,沒有虛擬地址的概念,這樣做是根本行不通的。

          打住了,這個問題再說下去,就收不住了。

          邏輯地址(logical address)

          Intel為了兼容,將遠古時代的段式內存管理方式保留了下來。邏輯地址指的是機器語言指令中,用來指定一個操作數或者是一條指令的地址。以上例,我們說的連接器為A分配的0x08111111這個地址就是邏輯地址。

          ——不過不好意思,這樣說,好像又違背了Intel中段式管理中,對邏輯地址要求,“一個邏輯地址,是由一個段標識符加上一個指定段內相對地址的偏移量,表示為 [段標識符:段內偏移量],也就是說,上例中那個0x08111111,應該表示為[A的代碼段標識符: 0x08111111],這樣,才完整一些”

          線性地址(linear address)或也叫虛擬地址(virtual address)

          跟邏輯地址類似,它也是一個不真實的地址,如果邏輯地址是對應的硬件平臺段式管理轉換前地址的話,那么線性地址則對應了硬件頁式內存的轉換前地址。

          -------------------------------------------------------------

          CPU將一個虛擬內存空間中的地址轉換為物理地址,需要進行兩步:首先將給定一個邏輯地址(其實是段內偏移量,這個一定要理解!!!),CPU要利用其段式內存管理單元,先將為個邏輯地址轉換成一個線程地址,再利用其頁式內存管理單元,轉換為最終物理地址。

          這樣做兩次轉換,的確是非常麻煩而且沒有必要的,因為直接可以把線性地址抽像給進程。之所以這樣冗余,Intel完全是為了兼容而已。

          物理地址就是,機器內主存的地址,包括RAM和ROM

          邏輯地址就是,程序運行在內存中,使用的地址。

          虛擬地址就是,cpu支持的內存空間遠遠大于機器主存的大小,這些多出來的空間對于程序來說是可以用的,這個時候的所有地址都稱為虛擬地址

          物理地址:最小系統下的存儲器的實際地址,一般只是由CPU內存控制器(地址線)可以管理的容量為最大地址,而實際上這個容量(由地址產生的)遠大于實際存在的容量;實際的存儲器容量所需要的地址(內存)控制器管理的容量;它的大小一般由芯片決定

          邏輯地址:相對程序員而言使用的地址,或說程序無需知道具體的實際地址管理數,而只要在系統(操作)允許范圍內使用就行了(這時使用的是一種算法控制下的地址,實際上它只是借用地址概念產生的程序運行模式),它所要說明的是方便,也就是一個線性的(最好)的程序(指令)排列方式。它的大小一般由操作系統決定

          虛擬地址:將具有存儲功能的所有存儲器(不僅僅是最小系統概念下的),進行“統一”編址,而不考慮存儲器之間的差異(快慢等),這時的地址是一個比邏輯地址理會數學化的編號(地址),它的大小等往往由應用程序決定

          

        看過“虛擬地址與物理地址的轉換”的人還看了:

        1.虛擬地址和物理地址轉換

        2.物理地址與虛擬地址映射

        3.物理地址與虛擬地址怎么轉換

        4.虛擬地址空間映射到物理地址空間

        5.虛擬地址到物理地址的轉換

        6.虛擬地址物理地址

        909550 主站蜘蛛池模板: 亚洲日韩一区二区| 天堂视频一区二区免费在线观看| 性夜黄a爽影免费看| 人妻中文字幕av资源站| 日韩高清免费一码二码三码| 日韩av片无码一区二区不卡| 少妇愉情理伦片丰满丰满午夜| 2021国产精品视频网站| 免费激情网址| 米奇亚洲国产精品思久久| 久久精品国产亚洲av热九九热 | 最新亚洲国产手机在线| 97精品久久久久中文字幕| 四虎永久精品在线视频| 国产三级精品三级在线专区1| 国产在线无码精品无码| 宅男午夜网站在线观看| 亚洲精品一区二区三区蜜臀| 久久综合色一综合色88| 成全高清mv电影免费观看| 麻豆成人精品国产免费| 最近的最新的中文字幕视频 | 国内精品久久久久电影院| 国产精品亚洲二区在线看| 亚洲成人资源在线观看| 国产蜜臀av在线一区二区| 欧美在线一区二区三区精品| 成人精品日韩专区在线观看| 久久亚洲精品中文字幕波多野结衣 | 少妇夜夜春夜夜爽试看视频| 最近中文字幕日韩有码| 久久亚洲国产成人亚| 国产情侣激情在线对白| 亚洲欧洲日韩精品在线| 中文国产成人精品久久不卡| 国产免费人成网站在线播放| 国产精品三级爽片免费看| 成在线人永久免费视频播放| 日韩有码中文字幕国产| 中国明星xxxx性裸交| 天天干天天射天天操|