個人對GDT GDTR LDT LDTR的理解

2021-06-02 10:27:14 字數 1659 閱讀 4918

gdt是全域性描述附表,主要存放作業系統和各任務公用的描述符,如公用的資料和**段描述符、各任務的tss描述符和ldt描述符。(tss是任務狀態段,存放各個任務私有執行狀態資訊描述符)

ldt是區域性描述符表,主要存放各個任務的私有描述符,如本任務的**段描述符和資料段描述符等。

gdtr是乙個長度為48bit的暫存器,內容為乙個32位的基位址和乙個16位的段限。其中32位的基址是指gdt在記憶體中的位址。

ldtr是區域性描述符暫存器,由乙個可見的16位暫存器(段選擇子)和乙個不可見的描述符暫存器組成(描述符暫存器實際上是乙個不可見的高速緩衝區)。

這裡加入我的理解:應為gdt中除了有段描述符之外還有ldt描述符,所以微處理器在gdt中定址ldt時,也需要使用選擇子,以保持與段描述符定址的統一。

在這裡還要引入乙個段選擇子的概念。段選擇子是乙個暫存器,高13位用來指示描述符在描述符表中的索引號,低兩位是表示使用描述符的特權級別;另外一位(t1)是gdt和ldt的訊號量,如果t1=0,則使用gdtr,如果t1=1,則使用ldtr。選擇子將被裝入段暫存器中。系統中的段暫存器共有六個:cs、ss、ds、es、fs和gs。當選擇子被裝入段暫存器時,微處理器會自動將其對應的描述符裝入描述符暫存器。

系統任務切換時,ldt切換,而gdt不切換(因為真個系統只有乙個gdt),這時新任務的ldt描述符的選擇子就被裝入到ldtr中。

任務切換過程中,各個相關暫存器的變化?

當任務切換時,如果使用的是ldt,首先變化的是ldtr。段選擇子被裝入ldtr,同時ldt描述符自動被裝入描述符暫存器。系統利用ldtr中的段選擇子來定位ldt描述符在gdt中的位置。這裡我不明白的是ldtr中的ldt描述符和gdt中的描述符是什麼關係?為什麼要這樣做呢?自動裝入到ldtr中的描述符到底是什麼?從哪來?請高手指點!

為什麼要有乙個gdtr,並且gdtr的結構和ldtr不一樣呢?

這主要是因為系統只有乙個gdt,而gdt的描述符有不能存放在gdt中(ldt的描述符都存放在gdt中),所以就需要乙個gdtr來指示gdt在記憶體中的位置。因為gdtr是直接指示記憶體位址,而ldtr主要指示ldt描述符在gdt中的位置和屬性,所以gdtr和ldtr的結構也不同。

為什麼在保護模式下的物理定址空間是4g而虛擬位址是64t?

實體地址是4g是因為位址匯流排是32位的。

虛擬位址的情況比較複雜。具體分析如下:

保護模式下,乙個任務的整個虛擬位址空間可以分為相等的兩半,一半空間的描述符在全域性描述符表gdt中,一半空的描述符在區域性描述符表ldt中。並且由上可知,段選擇子的位數是13位,即最多可以有8192個描述符,而每個ldt也最多可以包含8192個描述符。每個描述符描述的段的最大定址範圍都是32位的,即4g。所以所有任務的虛擬位址空間為:8192*4g*2=64t。

段描述符的資料結構:

b31-b24&b23-b16&b15-b0是指段的基位址,l19-l16&l15-l0是指段限位址。

g指示段的長度單位,g=0表示位元組,=1表示4k;d表示訪問方式,=0表示16位,=1表示32位。

a表示是否能為系統軟體使用;沒有使用的一位強制為0;p位表示該段是否在記憶體中,=0時表示不在;

dpl有兩位,是訪問本段需要的許可權;s位表示描述符的型別,=1表示系統,=0表示**段或者資料段;type表示描述符描述的段的型別,與s位結合起了使用。

本圖最下面一行位位元組的位數標定。

最後插入一張intel 關於相關概念的一張圖:

個人對GDT GDTR LDT LDTR的理解

gdt是全域性描述附表,主要存放作業系統和各任務公用的描述符,如公用的資料和 段描述符 各任務的tss描述符和ldt描述符。tss是任務狀態段,存放各個任務私有執行狀態資訊描述符 ldt是區域性描述符表,主要存放各個任務的私有描述符,如本任務的 段描述符和資料段描述符等。gdtr是乙個長度為48bi...

個人對GBDT的理解

廢話不多說,首先dt即決策樹,gbdt使用的樹是回歸樹,生成方法見cart回歸樹。gbdt是提公升 boosting 方法的一種,但他不是adaboost,我們常使用adaboost進行分類,建議不要將gbdt和adaboost聯絡起來看。看下提公升樹模型的原理,它是個加法模型 其推導過程如下,使用...

個人對框架的理解

jointpoint 連線點 在乙個類裡面那些方法可以做擴充套件功能,也就是被增強,這些方法都叫做連線點 切入點 在user類裡面可以喲路很多方法被增強,在實際操作中,我只是增強了update方法,實際增強的方法就叫做切入點 通知 增強 增強的邏輯或功能,比如說擴充套件的日誌管理功能,折耳根日誌管理...