GDT,LDT,GDTR,LDTR 详解
1 基本概念
??所謂工作模式,是指CPU的尋址方式、寄存器大小、指令用法和內存布局等。
-
實模式
??段基址:段內偏移地址”產生的邏輯地址就是物理地址,即程序員可見的地址完全是真實的內存地址。 -
保護模式
??在保護模式中,內存的管理模式分為兩種——段模式和頁模式。其中頁模式也是基于段模式的。也就是說,保護模式的內存管理模式事實上是:純段模式和段頁式。進一步說,段模式是必不可少的,而頁模式則是可選的——如果使用頁模式,則是段頁式,否則這是純段模式。
-
GDT
??全局描述符表GDT(Global Descriptor Table)在整個系統中,全局描述符表GDT只有一張(一個處理器對應一個GDT),GDT可以被放在內存的任何位置,但CPU必須知道GDT的入口,也就是基地址放在哪里,Intel的設計者門提供了一個寄存器GDTR用來存放GDT的入口地址,程序員將GDT設定在內存中某個位置之后,可以通過LGDT指令將GDT的入口地址裝入此寄存器,從此以后,CPU就根據此寄存器中的內容作為GDT的入口來訪問GDT了。GDTR中存放的是GDT在內存中的基地址和其表長界限。
-
GDTR
??存放GDT的入口地址。
- 段選擇子
??GDTR訪問全局描述符表是通過“段選擇子”(實模式下的段寄存器)來完成的。段選擇子是一個16位的寄存器(同實模式下的段寄存器相同)里面有描述符索引(index)、TI、請求特權級(RPL)。
- 局部描述符表LDT(Local Descriptor Table)
??局部描述符表可以有若干張,每個任務可以有一張。我們可以這樣理解GDT和LDT:GDT為一級描述符表,LDT為二級描述符表。如圖
??LDT和GDT從本質上說是相同的,只是LDT嵌套在GDT之中。LDTR記錄局部描述符表的起始位置,與GDTR不同,LDTR的內容是一個段選擇子。由于LDT本身同樣是一段內存,也是一個段,所以它也有個描述符描述它,這個描述符就存儲在GDT中,對應這個表述符也會有一個選擇子,LDTR裝載的就是這樣一個選擇子。
2 實例
2.1 訪問GDT
當TI=0時表示段描述符在GDT中,如上圖所示:
①先從GDTR寄存器中獲得GDT基址。
②然后再GDT中以段選擇器高13位位置索引值得到段描述符。
③段描述符符包含段的基址、限長、優先級等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。
2.2 訪問LDT
當TI=1時表示段描述符在LDT中,如上圖所示:
①還是先從GDTR寄存器中獲得GDT基址。
②從LDTR寄存器中獲取LDT所在段的位置索引(LDTR高13位)。
③以這個位置索引在GDT中得到LDT段描述符從而得到LDT段基址。
④用段選擇器高13位位置索引值從LDT段中得到段描述符。
⑤段描述符符包含段的基址、限長、優先級等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。
參考資料:
GDT,LDT,GDTR,LDTR 詳解,包你理解透徹
實模式與保護模式
總結
以上是生活随笔為你收集整理的GDT,LDT,GDTR,LDTR 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sin函数对照表_三角函数数值对照表.p
- 下一篇: APtana