Linux GDT全局描述符表-草圖示之

 

1. 段描述符表寄存器

系統設置的一個獨立寄存器,用於存儲段描述符表的內存地址和表的範圍,就是表有多大,訪問時不能超出表的範圍。

2. 段描述表

系統中的一個數組,存儲了很多段描述符,根據段寄存器存儲的索引(即書上說的段選擇子,忒太理解)確定內存段在段描述符表中的位置,進而取得段描述符信息,再根據段描述符信息的段基地址和段界限,得到內存段的內存地址。

段寄存器存儲的索引,是在保護模式情況下,如果在實模式下,段寄存器存儲的仍然是段基址。

這個內存段的內存地址是線性地址,在未啓用分頁管理時,線性地址即爲物理地址,在啓用了分頁管理時,則cpu根據分頁的頁表目錄,查找頁面項,即先查找一級頁表,再查找二級頁表,根據頁表中頁的基地址和頁內偏移地址轉換成物理地址。

 3. 段描述符

段描述符是系統中,用於表示各種內存段的數據結構,包含的信息:內存段基地址,段內偏移界限(不能超過一個段的最大內存範圍),段的屬性包括很多如:段類型,內存段?代碼段?堆棧段?系統的段類型什麼陷阱,門等,不細究。

4. 段寄存器存儲的索引(即書上說的段選擇子,忒太理解)

段選擇子就是段描述符在段描述符表中的索引值,段選擇子,難聽也不好理解。

最後總結:

cpu根據全局描述符表寄存器得到全局描述符表的內存地址,再根據段寄存器中的選擇子即索引定位到段描述符,進而獲取段描述符中的端基址和段界限,最後通過頁管理的規則,轉換到真實的物理地址。

cpu拿到的地址一般是虛擬地址或者說是偏移地址,比如程序裏的4G進程空間中的任意一個地址,即4G內存空間中的地址,0到4G,cpu拿着這個偏移地址去查找它的段描述符,根據上述規則進而轉換到物理地址。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章