1. 程式人生 > >保護模式下的邏輯地址,線性地址,實體地址

保護模式下的邏輯地址,線性地址,實體地址

IA32保護模式中,邏輯地址=16位段選擇子:32位偏移地址,具體的值應該是指令經過編譯/彙編產生的,如果是應用程式設計的話,編譯/彙編只產生偏移地址,段選擇子的值由系統分配。在定址時,16位段選擇子位於CS/SS/DS/ES/FS/GS暫存器中,32位偏移地址位於指令程式碼中。

邏輯地址如何轉換成線性地址,線性地址又如何轉換成實體地址?

(1)如果要確定某程式碼段中某變數的實際實體地址,首先要知道CS/SS/DS/ES/FS/GS的值(包含該程式碼段的段描述符在GDT中的偏移地址)和GDTR/LDTR暫存器值(包含GDT/LDT的基地址),可以從GDT中找出該程式碼段的段描述符,此段描述符中包含程式碼段的基地址。

該程式碼段的基地址(32位)+變數的偏移地址(32位)=該變數的線性地址(32位);

(2)如果該線性地址是4KB頁的,根據線性地址查詢某變數的實體地址可以理解為在圖書館找書:

某本書位置=第x個書架  +第y層     +第z本

某線性地址=第x頁表     +第y個頁  +偏移z處

結合CR3(包含頁目錄的基地址)及線性地址高10位(頁表在頁目錄中的偏移)可以找出第x頁表的基地址,再結合中間10位(頁在頁表中的偏移)找出第y個頁的基地址,再加上線性地址的低16位(頁內偏移地址,即偏移z處),也就是實際實體地址。

===============================

PS:

CR0的第0位-PE:保護模式使能位,0時CPU工作於真實模式,定址方式為16位段基址*16+16位偏移地址,定址1M空間,段基址取決於段暫存器CS/SS/DS/ES/FS/GS的

內容,但與上面的描述無關。

CR0的第31位-PG:分頁使能位,1時定址如上描述,0時線性地址即實體地址,即不需要第(2)步的地址轉換。

相關暫存器及相關概念

CS/SS/DS/ES/FS/GS-----Seg. Selector(段選擇子)

GDTR/LDTR---------Seg. Descriptors(段描述符)、GDT/LDT(全域性描述符表/區域性描述符表)

CR3-------------頁目錄

                                             頁表

                                             頁

===============================

主要參考資料:

www.oldlinux.org下載的“IA32卷3:系統程式設計指南”中譯版,在此謝過譯者。

相關推薦

保護模式邏輯地址線性地址實體地址

IA32保護模式中,邏輯地址=16位段選擇子:32位偏移地址,具體的值應該是指令經過編譯/彙編產生的,如果是應用程式設計的話,編譯/彙編只產生偏移地址,段選擇子的值由系統分配。在定址時,16位段選擇子位於CS/SS/DS/ES/FS/GS暫存器中,32位偏移地址位於指令程式碼

保護模式的段暫存器值轉化為線性地址過程

關鍵字: 段暫存器、段選擇子、全域性描述符表、區域性描述符表、段描述符、線性地址;     保護模式下使用段機制的CS,SS,DS,ESt,FS,GS儲存的並不是真實模式下的段地址,而是一個包含了段選擇子和偏移地址的組合值。CPU在讀取記憶體的時候,需要將段暫存器的值解析

組合語言of保護模式的描述符型別

保護模式下的描述符可以分為三種類型,就是儲存段描述符,系統段描述符,控制描述符。不同型別的描述符長度都是相同的,都是8個位元組。 儲存段描述符描述程式碼和資料區域,包括程式碼段和資料段的起始地址和範圍。 系統段描述符描述一些特定的資料區域,主要是區域性描述符表和任務狀態段

作業系統實踐之第二章(保護模式的分段定址)

理論準備: 真實模式下的定址相信大家已經很清楚了,它分為兩個部分,一部分是段基址,另一部分是段內偏移。段基址由段暫存器值左移4位表示,段內偏移則記錄了相對於某個段起始位置的偏移量,將這兩個值相加就得到了所需的實體地址。 在保護模式下,相對來說其定址方式就比較複雜了。嗯,本次

Dig是一個在類Unix命令列模式查詢DNS包括NS記錄A記錄MX記錄等相關資訊的工具

Dig是一個在類Unix命令列模式下查詢DNS包括NS記錄,A記錄,MX記錄等相關資訊的工具查詢yahoo.com的A記錄:(此處一定是域而不是主機,如我公司為xinpindao.com)dig yahoo.com A +noall +answer 查詢yahoo.com MX記錄的列表:dig yahoo

OkHttp實現多執行緒斷點續傳下載單例模式多工下載管理器一起拋掉sp,sqlite的輔助吧

        最近專案需要使用到斷點下載功能,筆者比較喜歡折騰,想方設法拋棄SharedPreferences,尤其是sqlite作記錄輔助,改用臨時記錄檔案的形式記錄下載進度,本文以斷點下載為例。先看看demo執行效果圖:               斷點續傳:記

理解在保護模式Internet Explorer的工作方式

為保護模式開發 Internet Explorer 安全擴充套件元件跟為開發 Windows Vista 安全程式沒有太大不同。另外這個知道方針在開發者在許可權受限環境中的最佳方法和指導方針(Developer Best Practices and Guidelines for Applications in

x86彙編--保護模式的氣泡排序

        其實這個程式碼本身(氣泡排序)沒有什麼意思,而有用的是怎麼從真實模式下進入保護模式,以及怎麼 使用段選擇子和段描述符。 ;保護模式下的冒泡測試 ;設定堆疊 mov eax , cs mov ss , eax mov esp , 0x7c00

80x86保護模式特權級轉移

80386搞的這個保護模式,最大的特點就是加入了安全檢查,不再像真實模式下那樣,程式程式碼可以隨意jmp,隨意call了,受到了特權級的約束,關於特權級的概念我看無數的資料,各種大牛的解釋,反覆理解了好多次,這回我要再次整理一下。CPL:當前CPU正在處理的程式碼段的特權級

深入詳解保護模式的記憶體分頁機制

以下是Intel文件中關於分頁機制的詳細描述:IA-32 Memory Models When employing the processor’s memory management facilities, programs do not       — 使用處理器記憶體管理設施時程式不會 directly

保護模式的分段記憶體定址

段選擇符(段暫存器中的值) 32位彙編中16位段暫存器(CS、DS、ES、SS、FS、GS)中不再存放段基址,而是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是請求特權級(RPL)用於特權檢查,D2位是描述符表引用指示位TI,TI=0指 示從全域性描

尤拉篩線性洛谷P2158儀仗隊

題目 首先我們先把題目分析一下。 emmmm,這應該是一個找規律,應該可以打表,然後我們再分析一下圖片,發現如果這個點可以被看到,那它的橫座標和縱座標應該互質,而互質的條件就是它的橫座標和縱座標的最大公約數為一,那這題的意思就變成了,在一個n * n的方格內尋找所有點的橫座標和縱座標互質的點的個數。 但

線性模型線性迴歸對數機率迴歸(Logistic regression)的理解與推導(深度學習前戲( ╯□╰ ))

對數機率迴歸(logistic regression),有時候會譯為邏輯迴歸(音譯),其實是我們把迴歸模型應用到分類問題時,線性迴歸的一種變形,主要是針對二分類提出的。既然是線性迴歸的一種變形,那麼在理解對數機率迴歸時,我們先來了解一下什麼是線性迴歸。 1.線性迴歸 1. 1線性方程

bzoj3105(高斯消元貪心線性擬陣)

Description 傳統的Nim遊戲是這樣的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴數量可以不同)。兩個遊戲者輪流操作,每次可以選一個火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同時從超過一堆火柴中拿。拿走最後一根火柴的遊戲者勝利。

PS圖層混合演算法之四(亮光 點光 線性 實色混合)

亮光模式: 根據繪圖色通過增加或降低“對比度”,加深或減淡顏色。如果繪圖色比50%的灰亮,影象通過降低對比度被照亮,如果繪圖色比50%的灰暗,影象通過增加對比度變暗。   線性光模式:根據繪圖色通過增

保護模式邏輯地址,線性地址轉換

ldtr可見長度為16位 不可見長度為32位基址+32限長+16位段屬性. DGTR長度為32位基址+16位段限長. xxxx:yyyyyyyy  當選擇子TI=0時 (GDTR基址+選擇子右移3位)(其實也就是段暫存器中的不可見部分的基址)+yyyyyyyy為線性地址;  

vmware橋接模式配置centos的ip地址閘道器等搭建區域網伺服器

1.安裝vmware軟體,以及centos 2.設定網路介面卡模式為:“橋接模式” 3.進入虛擬網路編輯器,配置橋接模式的相關配置, 、 4.進入虛擬機器所在的電腦主機的dos命令列頁面,輸入ipconfig/all命令 獲取主機的網路詳情資訊,虛擬機器配置需要依據主

Linux邏輯地址-線性地址-實體地址圖解

轉載:http://blog.csdn.net/wxzking/article/details/5905214 一、邏輯地址轉線性地址 機器語言指令中出現的記憶體地址,都是邏輯地址,需要轉換成線性地址,再經過MMU(CPU中的記憶體管理單元)轉換成實體地址才能夠被訪問

段頁式記憶體管理中邏輯地址線性地址實體地址的區別

虛擬記憶體(Virtual Memory) 是指計算機呈現出要比實際擁有的記憶體大得多的記憶體量。因此它允許程式設計師編制並執行比實際系統擁有的記憶體大得多的程式。這使得許多大型專案也能夠在具有有限記憶體資源的系統上實現。一個很恰當的比喻是:你不需要很長的軌道就可以讓一列火車從上海開到北京。你只需要足夠長的鐵

Linux邏輯地址線性地址實體地址詳細總結

一、邏輯地址轉線性地址      機器語言指令中出現的記憶體地址,都是邏輯地址,需要轉換成線性地址,再經過MMU(CPU中的記憶體管理單元)轉換成實體地址才能夠被訪問到。 我們寫個最簡單的hello world程式,用gcc編譯,再反編譯後會看到以下指令: mov    0x80495b0, %eax