處理器將記憶體劃分成邏輯上的段,並在指令中使用段內位址偏移,
在保護模式下,對記憶體的訪問,仍然使用段位址和偏移位址,但是每個段在訪問之前,必須先登記。
登記的資訊包括段的起始位址,段的界限和段的各種訪問屬性等。
這樣每次你的程式和你要訪問的段不符時,就要被阻止,並產生乙個叫做內部異常的中斷。
和乙個段有關的資訊需要用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下,我們對乙個...