日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是GDT,LDT,GDTR及LDTR?

發(fā)布時(shí)間:2025/1/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是GDT,LDT,GDTR及LDTR? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(1)全局描述符表GDT(Global Descriptor Table)在整個(gè)系統(tǒng)中,全局描述符表GDT只有一張(一個(gè)處理器對(duì)應(yīng)一個(gè)GDT),GDT可以被放在內(nèi)存的任何位置,但CPU必須知道GDT的入口,也就是基地址放在哪里,Intel的設(shè)計(jì)者門提供了一個(gè)寄存器GDTR用來存放GDT的入口地址,程序員將GDT設(shè)定在內(nèi)存中某個(gè)位置之后,可以通過LGDT指令將GDT的入口地址裝入此寄存器,從此以后,CPU就根據(jù)此寄存器中的內(nèi)容作為GDT的入口來訪問GDT了。GDTR中存放的是GDT在內(nèi)存中的基地址和其表長(zhǎng)界限。

基地址指定GDT表中字節(jié)0在線性地址空間中的地址,表長(zhǎng)度指明GDT表的字節(jié)長(zhǎng)度值。指令LGDT和SGDT分別用于加載和保存GDTR寄存器的內(nèi)容。在機(jī)器剛加電或處理器復(fù)位后,基地址被默認(rèn)地設(shè)置為0,而長(zhǎng)度值被設(shè)置成0xFFFF。在保護(hù)模式初始化過程中必須給GDTR加載一個(gè)新值。

GDTR

(2)段選擇子(Selector)由GDTR訪問全局描述符表是通過“段選擇子”(實(shí)模式下的段寄存器)來完成的。段選擇子是一個(gè)16位的寄存器(同實(shí)模式下的段寄存器相同)

段選擇子

段選擇子包括三部分描述符索引(index)、TI、請(qǐng)求特權(quán)級(jí)(RPL)。他的index(描述符索引)部分表示所需要的段的描述符在描述符表的位置,由這個(gè)位置再根據(jù)在GDTR中存儲(chǔ)的描述符表基址就可以找到相應(yīng)的描述符。然后用描述符表中的段基址加上邏輯地址(SEL:OFFSET)的OFFSET就可以轉(zhuǎn)換成線性地址,段選擇子中的TI值只有一位0或1,0代表選擇子是在GDT選擇,1代表選擇子是在LDT選擇。請(qǐng)求特權(quán)級(jí)(RPL)則代表選擇子的特權(quán)級(jí),共有4個(gè)特權(quán)級(jí)(0級(jí)、1級(jí)、2級(jí)、3級(jí))。

關(guān)于特權(quán)級(jí)的說明:任務(wù)中的每一個(gè)段都有一個(gè)特定的級(jí)別。每當(dāng)一個(gè)程序試圖訪問某一個(gè)段時(shí),就將該程序所擁有的特權(quán)級(jí)與要訪問的特權(quán)級(jí)進(jìn)行比較,以決定能否訪問該段。系統(tǒng)約定,CPU只能訪問同一特權(quán)級(jí)或級(jí)別較低特權(quán)級(jí)的段。

例如給出邏輯地址:21h:12345678h轉(zhuǎn)換為線性地址

a. 選擇子SEL=21h=0000000000100 0 01b 他代表的意思是:選擇子的index=4即100b選擇GDT中的第4個(gè)描述符;TI=0代表選擇子是在GDT選擇;左后的01b代表特權(quán)級(jí)RPL=1

b. OFFSET=12345678h若此時(shí)GDT第四個(gè)描述符中描述的段基址(Base)為11111111h,則線性地址=11111111h+12345678h=23456789h

(3)局部描述符表LDT(Local Descriptor Table)局部描述符表可以有若干張,每個(gè)任務(wù)可以有一張。我們可以這樣理解GDT和LDT:GDT為一級(jí)描述符表,LDT為二級(jí)描述符表。如圖

局部描述符表LDT

LDT和GDT從本質(zhì)上說是相同的,只是LDT嵌套在GDT之中。LDTR記錄局部描述符表的起始位置,與GDTR不同,LDTR的內(nèi)容是一個(gè)段選擇子。由于LDT本身同樣是一段內(nèi)存,也是一個(gè)段,所以它也有個(gè)描述符描述它,這個(gè)描述符就存儲(chǔ)在GDT中,對(duì)應(yīng)這個(gè)表述符也會(huì)有一個(gè)選擇子,LDTR裝載的就是這樣一個(gè)選擇子。LDTR可以在程序中隨時(shí)改變,通過使用lldt指令。如上圖,如果裝載的是Selector 2則LDTR指向的是表LDT2。舉個(gè)例子:如果我們想在表LDT2中選擇第三個(gè)描述符所描述的段的地址12345678h。

1. 首先需要裝載LDTR使它指向LDT2 使用指令lldt將Select2裝載到LDTR

2. 通過邏輯地址(SEL:OFFSET)訪問時(shí)SEL的index=3代表選擇第三個(gè)描述符;TI=1代表選擇子是在LDT選擇,此時(shí)LDTR指向的是LDT2,所以是在LDT2中選擇,此時(shí)的SEL值為1Ch(二進(jìn)制為11 1 00b)。OFFSET=12345678h。邏輯地址為1C:12345678h

3. 由SEL選擇出描述符,由描述符中的基址(Base)加上OFFSET可得到線性地址,例如基址是11111111h,則線性地址=11111111h+12345678h=23456789h

4. 此時(shí)若再想訪問LDT1中的第三個(gè)描述符,只要使用lldt指令將選擇子Selector 1裝入再執(zhí)行2、3兩步就可以了(因?yàn)榇藭r(shí)LDTR又指向了LDT1)

由于每個(gè)進(jìn)程都有自己的一套程序段、數(shù)據(jù)段、堆棧段,有了局部描述符表則可以將每個(gè)進(jìn)程的程序段、數(shù)據(jù)段、堆棧段封裝在一起,只要改變LDTR就可以實(shí)現(xiàn)對(duì)不同進(jìn)程的段進(jìn)行訪問。

當(dāng)進(jìn)行任務(wù)切換時(shí),處理器會(huì)把新任務(wù)LDT的段選擇符和段描述符自動(dòng)地加載進(jìn)LDTR中。在機(jī)器加電或處理器復(fù)位后,段選擇符和基地址被默認(rèn)地設(shè)置為0,而段長(zhǎng)度被設(shè)置成0xFFFF。

三、實(shí)例(對(duì)理解非常有用)

1:訪問GDT

段描述符在GDT中

當(dāng)TI=0時(shí)表示段描述符在GDT中,如上圖所示:

①先從GDTR寄存器中獲得GDT基址。

②然后再GDT中以段選擇器高13位位置索引值得到段描述符。

③段描述符符包含段的基址、限長(zhǎng)、優(yōu)先級(jí)等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。

2:訪問LDT

段描述符在LDT中

當(dāng)TI=1時(shí)表示段描述符在LDT中,如上圖所示:

①還是先從GDTR寄存器中獲得GDT基址。

②從LDTR寄存器中獲取LDT所在段的位置索引(LDTR高13位)。

③以這個(gè)位置索引在GDT中得到LDT段描述符從而得到LDT段基址。

④用段選擇器高13位位置索引值從LDT段中得到段描述符。

⑤段描述符符包含段的基址、限長(zhǎng)、優(yōu)先級(jí)等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。

擴(kuò)展

除了GDTR、LDTR外還有IDTR和TR

(1)中斷描述符表寄存器IDTR?

與GDTR的作用類似,IDTR寄存器用于存放中斷描述符表IDT的32位線性基地址和16位表長(zhǎng)度值。指令LIDT和SIDT分別用于加載和保存IDTR寄存器的內(nèi)容。在機(jī)器剛加電或處理器復(fù)位后,基地址被默認(rèn)地設(shè)置為0,而長(zhǎng)度值被設(shè)置成0xFFFF。

(2)任務(wù)寄存器TR

TR用于尋址一個(gè)特殊的任務(wù)狀態(tài)段(Task?State?Segment,TSS)。TSS中包含著當(dāng)前執(zhí)行任務(wù)的重要信息。

TR寄存器用于存放當(dāng)前任務(wù)TSS段的16位段選擇符、32位基地址、16位段長(zhǎng)度和描述符屬性值。它引用GDT表中的一個(gè)TSS類型的描述符。指令LTR和STR分別用于加載和保存TR寄存器的段選擇符部分。當(dāng)使用LTR指令把選擇符加載進(jìn)任務(wù)寄存器時(shí),TSS描述符中的段基地址、段限長(zhǎng)度以及描述符屬性會(huì)被自動(dòng)加載到任務(wù)寄存器中。當(dāng)執(zhí)行任務(wù)切換時(shí),處理器會(huì)把新任務(wù)的TSS的段選擇符和段描述符自動(dòng)加載進(jìn)任務(wù)寄存器TR中。

總結(jié)

以上是生活随笔為你收集整理的什么是GDT,LDT,GDTR及LDTR?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。