全域性描述符表

2022-04-23 05:10:51 字數 1091 閱讀 7085

處理器將記憶體劃分成邏輯上的段,並在指令中使用段內位址偏移,

在保護模式下,對記憶體的訪問,仍然使用段位址和偏移位址,但是每個段在訪問之前,必須先登記。

登記的資訊包括段的起始位址,段的界限和段的各種訪問屬性等。

這樣每次你的程式和你要訪問的段不符時,就要被阻止,並產生乙個叫做內部異常的中斷。

和乙個段有關的資訊需要用8個位元組來描述,稱為段描述符(segment descriptor)。

每個段都需要乙個描述符,為了存放這些描述符,在記憶體中需要開闢處一段空間,

這段空間裡,所有段描述符都時挨在一起的,集中存放,稱為描述符表。

最終要的描述符表是全域性描述符表(global descriptor table)gdt。

所謂全域性,意思是該表是為整個軟硬體系統服務的。

在進入保護模式前,必須先定義全域性描述符表。

為了跟蹤全域性描述符表,處理器內部有乙個48位的暫存器,稱為全域性描述符表暫存器(gdtr)。

該暫存器分為兩部分,分別是32位的線性位址和16位的邊界。

32位位址部分儲存的是全域性描述符表在記憶體中的起始線性位址,

16位的邊界部分儲存的是全域性描述符表的界限,其在數值上等於表的大小(總位元組數)減一。

換句話說,全域性描述符表的界限值就是表內最後乙個位元組(也是表內最後乙個描述符的第8個位元組)的偏移量,第乙個位元組的偏移量是0,

因為gdtr的界限是16位,所以該錶最大是2的16次方個位元組,也就是65536(64k)個位元組,又因為乙個描述符佔8個位元組,故最多可定義8192個描述符。

理論上,全域性描述符表可以定義在記憶體的任何地方,

但是,由於在進入保護模式後,處理器需要立即按新的訪問模式工作,所以必須在進入保護模式前定義gdt。

但是,由於在實模式下只能訪問1m的記憶體,故gdt通常都定義在1m以下的範圍內,當然,允許進入保護模式後,重新定義gdt。

描述符不是由使用者程式自己建立的,而是在載入時,作業系統跟據你的程式結構而建立的,使用者程式通常是無法建立和修改gdt的。

作業系統為你的程式建立了幾個段,你的程式就只能在這幾個段內工作,超出這個範圍,或未按照預定的方法訪問這些段,都將被處理器阻止。

書11.2 全域性描述符表

書11.3 儲存器的段描述符

全域性描述符表

局描述符表 gdt global descriptor table 在protected mode下,乙個重要的必不可少的資料結構就是gdt global descriptor table 中文名全域性描述符表 外文名global descriptor table 類 型 資料結構 領 域 科學技術...

全域性描述符表

全域性描述符表 gdt global descriptor table 在protected mode下,乙個重要的必不可少的資料結構就是gdt global descriptor table 為什麼要有gdt?我們首先考慮一下在real mode下的程式設計模型 在real mode下,我們對乙個...

全域性描述符表

全域性描述符表 gdt global descriptor table 在protected mode下,乙個重要的必不可少的資料結構就是gdt global descriptor table 為什麼要有gdt?我們首先考慮一下在real mode下的程式設計模型 在real mode下,我們對乙個...