• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦>學習電腦>電腦入門>

    邏輯地址線性地址物理地址三個地址有什么聯系

    時間: 春健736 分享

      在計算機科學中,邏輯地址是什么?線性地址是什么?物理地址優勢什么?邏輯地址線性地址物理地址三個地址有什么聯系?學習啦小編整理了邏輯地址,線性地址以及物理地址的相關資料,下面大家跟著學習啦小編一起去了解一下吧。

      邏輯地址線性地址物理地址

      一、邏輯地址轉線性地址

      機器語言指令中出現的內存地址,都是邏輯地址,需要轉換成線性地址,再經過MMU(CPU中的內存管理單元)轉換成物理地址才能夠被訪問到。

      我們寫個最簡單的hello world程序,用gcc編譯,再反匯編后會看到以下指令:

      mov 0x80495b0, %eax

      這里的內存地址0x80495b0 就是一個邏輯地址,必須加上隱含的DS 數據段的基地址,才能構成線性地址。也就是說 0x80495b0 是當前任務的DS數據段內的偏移。

      在x86保護模式下,段的信息(段基線性地址、長度、權限等)即段描述符占8個字節,段信息無法直接存放在段寄存器中(段寄存器只有2字節)。Intel的設計是段描述符集中存放在GDT或LDT中,而段寄存器存放的是段描述符在GDT或LDT內的索引值(index)。

      Linux中邏輯地址等于線性地址。為什么這么說呢?因為Linux所有的段(用戶代碼段、用戶數據段、內核代碼段、內核數據段)的線性地址都是從 0x00000000 開始,長度4G,這樣 線性地址=邏輯地址+ 0x00000000,也就是說邏輯地址等于線性地址了。

      這樣的情況下Linux只用到了GDT,不論是用戶任務還是內核任務,都沒有用到LDT。GDT的第12和13項段描述符是 __KERNEL_CS 和__KERNEL_DS,第14和15項段描述符是 __USER_CS 和__USER_DS。內核任務使用__KERNEL_CS 和__KERNEL_DS,所有的用戶任務共用__USER_CS 和__USER_DS,也就是說不需要給每個任務再單獨分配段描述符。內核段描述符和用戶段描述符雖然起始線性地址和長度都一樣,但DPL(描述符特權級)是不一樣的。__KERNEL_CS 和__KERNEL_DS 的DPL值為0(最高特權),__USER_CS 和__USER_DS的DPL值為3。

      用gdb調試程序的時候,用info reg 顯示當前寄存器的值:

      cs 0x73 115

      ss 0x7b 123

      ds 0x7b 123

      es 0x7b 123

      可以看到ds值為0x7b, 轉換成二進制為 00000000 01111011,TI字段值為0,表示使用GDT,GDT索引值為 01111,即十進制15,對應的就是GDT內的__USER_DS用戶數據段描述符。

      從上面可以看到,Linux在x86的分段機制上運行,卻通過一個巧妙的方式繞開了分段。

      Linux主要以分頁的方式實現內存管理。

      二、線性地址轉物理地址

      前面說了Linux中邏輯地址等于線性地址,那么線性地址怎么對應到物理地址呢?這個大家都知道,那就是通過分頁機制,具體的說,就是通過頁表查找來對應物理地址。

      準確的說分頁是CPU提供的一種機制,Linux只是根據這種機制的規則,利用它實現了內存管理。

      在保護模式下,控制寄存器CR0的最高位PG位控制著分頁管理機制是否生效,如果PG=1,分頁機制生效,需通過頁表查找才能把線性地址轉換物理地址。如果PG=0,則分頁機制無效,線性地址就直接做為物理地址。

      分頁的基本原理是把內存劃分成大小固定的若干單元,每個單元稱為一頁(page),每頁包含4k字節的地址空間(為簡化分析,我們不考慮擴展分頁的情況)。這樣每一頁的起始地址都是4k字節對齊的。為了能轉換成物理地址,我們需要給CPU提供當前任務的線性地址轉物理地址的查找表,即頁表(page table)。注意,為了實現每個任務的平坦的虛擬內存,每個任務都有自己的頁目錄表和頁表。

      為了節約頁表占用的內存空間,x86將線性地址通過頁目錄表和頁表兩級查找轉換成物理地址。

      32位的線性地址被分成3個部分:

      最高10位 Directory 頁目錄表偏移量,中間10位 Table是頁表偏移量,最低12位Offset是物理頁內的字節偏移量。

      頁目錄表的大小為4k(剛好是一個頁的大小),包含1024項,每個項4字節(32位),項目里存儲的內容就是頁表的物理地址。如果頁目錄表中的頁表尚未分配,則物理地址填0。

      頁表的大小也是4k,同樣包含1024項,每個項4字節,內容為最終物理頁的物理內存起始地址。

      每個活動的任務,必須要先分配給它一個頁目錄表,并把頁目錄表的物理地址存入cr3寄存器。頁表可以提前分配好,也可以在用到的時候再分配。

      還是以 mov 0x80495b0, %eax 中的地址為例分析一下線性地址轉物理地址的過程。

      前面說到Linux中邏輯地址等于線性地址,那么我們要轉換的線性地址就是0x80495b0。轉換的過程是由CPU自動完成的,Linux所要做的就是準備好轉換所需的頁目錄表和頁表(假設已經準備好,給頁目錄表和頁表分配物理內存的過程很復雜,后面再分析)。

      內核先將當前任務的頁目錄表的物理地址填入cr3寄存器。

      線性地址 0x80495b0 轉換成二進制后是 0000 1000 0000 0100 1001 0101 1011 0000,最高10位0000 1000 00的十進制是32,CPU查看頁目錄表第32項,里面存放的是頁表的物理地址。線性地址中間10位00 0100 1001 的十進制是73,頁表的第73項存儲的是最終物理頁的物理起始地址。物理頁基地址加上線性地址中最低12位的偏移量,CPU就找到了線性地址最終對應的物理內存單元。

      我們知道Linux中用戶進程線性地址能尋址的范圍是0 - 3G,那么是不是需要提前先把這3G虛擬內存的頁表都建立好呢?一般情況下,物理內存是遠遠小于3G的,加上同時有很多進程都在運行,根本無法給每個進程提前建立3G的線性地址頁表。Linux利用CPU的一個機制解決了這個問題。進程創建后我們可以給頁目錄表的表項值都填0,CPU在查找頁表時,如果表項的內容為0,則會引發一個缺頁異常,進程暫停執行,Linux內核這時候可以通過一系列復雜的算法給分配一個物理頁,并把物理頁的地址填入表項中,進程再恢復執行。當然進程在這個過程中是被蒙蔽的,它自己的感覺還是正常訪問到了物理內存。

      看過“ 邏輯地址線性地址物理地址三個地址有什么聯系”的人還看了:

    1.物理地址和邏輯地址的區別

    2.物理地址和虛擬地址

    3.修改硬盤物理地址

    4.什么是8086邏輯地址和物理地址

    5.物理首地址是什么

    邏輯地址線性地址物理地址三個地址有什么聯系

    在計算機科學中,邏輯地址是什么?線性地址是什么?物理地址優勢什么?邏輯地址線性地址物理地址三個地址有什么聯系?學習啦小編整理了邏輯地址,線性地址以及物理地址的相關資料,下面大家跟著學習啦小編一起去了解一下吧。 邏輯地址線
    推薦度:
    點擊下載文檔文檔為doc格式

    精選文章

    • 物理地址擴展
      物理地址擴展

      在計算機科學中,物理地址擴展是指x86和x86-64處理器的一個特色,即如果操作系統提供適當支持,則可以在32位的系統中使用超過4GiB字節的實體內存,那么

    • 物理地址可以修改嗎
      物理地址可以修改嗎

      最近不少朋友問到關于物理地址這樣的問題,那么物理地址可以修改嗎?學習啦小編整理了物理地址到邏輯地址的相關資料,下面大家跟著學習啦小編一起去

    • 初中語文邏輯病句解題技巧及成分殘缺
      初中語文邏輯病句解題技巧及成分殘缺

      語文閱讀是語文學習的一大板塊。無論在考試還是在平日的積累中都非常重要,在升學考試中也占據著相當大的比例。為快速提高同學們的閱讀能力,學習

    • 初中語文病句解題技巧之結構混亂與邏輯分析法
      初中語文病句解題技巧之結構混亂與邏輯分析法

      語文閱讀是語文學習的一大板塊。無論在考試還是在平日的積累中都非常重要,在升學考試中也占據著相當大的比例。為快速提高同學們的閱讀能力,學習

    605935 主站蜘蛛池模板: 丁香婷婷六月天| 亚洲成aⅴ人片在线观| a级毛片免费高清毛片视频| 波多野结衣同性系列698| 国产黄色片在线播放| 亚洲中久无码永久在线观看同 | 亚洲av专区无码观看精品天堂| 黄色免费网址在线观看| 无码人妻丰满熟妇区毛片| 午夜在线社区视频| 91视频国产91久久久| 最新国产精品拍自在线播放| 国产三级中文字幕| √天堂中文官网8在线| 永久免费AV无码网站在线观看| 国产猛男猛女超爽免费视频| 久久99精品久久久久子伦小说| 秋霞免费一级毛片| 国产精品爽爽影院在线| 久久亚洲精品11p| 痴汉电车中文字幕| 国产破处在线视频| 中文字幕在线视频免费观看| 波多野结衣大片| 国产成人免费高清激情明星| 一级特黄aaa大片| 欧美性黑人极品hd| 国产三级在线播放线| 99国产精品99久久久久久| 日韩精品福利在线| 再深点灬舒服灬太大了ship| 24小时免费看片| 无翼日本全彩漫画大全全彩| 亚洲美女一区二区三区| 黄色成人免费网站| 女的被触手到爽羞羞漫画| 亚洲人成77777在线播放网站 | a级毛片在线观看| 最新国产你懂的在线网址| 免费观看一级成人毛片| 欧美日韩一道本|