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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OS学习笔记】十四 保护模式二:段描述符

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OS学习笔记】十四 保护模式二:段描述符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章初步進入保護模式的學習。首先學習了全局描述符表GDT。點擊鏈接查看上一篇文章:全局描述符表

本篇文章繼續學習,GDT中存放的條目:描述符,確切的說是段描述符。學習段描述符的作用以及段描述符的格式。

1、段描述符的格式

實模式和保護模式,在內存訪問上是由區別的,在保護模式下,你不能說訪問哪個段就訪問哪個段,在訪問之前,必須在GDT內定義要訪問的內存段。這個定義就是段的描述符。

描述符不是用戶自己建立的,而是用戶程序被操作系統加載時,有操作系統根據用戶程序的結構而建立的。用戶程序是無法自己修改和建立GDT的。用戶程序只能老老實實的在自己的地盤上工作。這個時候操作系統為用戶程序建立了幾個段(定義了幾個段描述符),用戶程序就只能在這些段內工作,超出這個范圍,或者未按預定的方法訪問這些段,都將被處理器阻止。

一旦確定了GDT在內存中的位置,下一步就是確定要訪問的段,并在GDT中為這些段定義各自的段描述符。

如下圖,每個段描述符都是8字節大小。圖中下面是低32位,上面是高32位。

很明顯,描述符制定了32位的段起始地址(段基地址),以及20位的段邊界。

在32位模式下,段地址與實模式下的段地址不一樣。在實模式先段地址不是真正的物理地址,它還需要左移4位。而保護模式下,段地址是32位的線性地址,它就是真實的物理地址(未開啟分頁功能,分頁功能后面學習)。

描述符中段基址和段界限不是連續的。這是歷史的問題與兼容的問題。

20位的段界限是用來限制段的擴展范圍。

下面來介紹段描述符各個字段的意思。

2、段描述符各個字段的意義

下面的表格列出了上述段描述符的各個位的意思,如果現在不理解這些位也無所謂,后面的學習會慢慢深入理解。

G: 粒度位用于解釋段界限的含義。當G位是0時,段界限以字節為單位。此時段的擴展范圍是從1字節到1M字節,因為描述符中的界限值是20位的。相反,如果該位是1,那么段界限是以4KB位單位。這樣段的擴展范圍是4KB到4GB
S: 類 型 位當該位是0時,表示是一個系統;為1時,表示是一個代碼段或者數據段(棧段也是特殊的數據段)。系統段將在后面的文章中學習
DPL 特權級這兩位用于指定描述符的特權級。共有4中處理器支持的特權級別,分別是0、1、2、3 ,其中0是最高的特權級,3是最低的特權級別。剛進入保護模式時執行的代碼具有最高特權級0(可以看成是從處理器那里繼承來的)這些代碼通常是操作系統代碼,因此它的特權級最高。每當操作系統加載一個用戶程序,它通常都會制定一個低的特權級,比如3特權級。不同特權級的程序是互相隔離的,其訪問是嚴格限制的,而且有些處理器指令只能由0特權級的程序來執行,為的就是安全。在這里,描述符的特權級是用于指定訪問該段所必須具有的最低特權級。
P: 段存在位P位用于指示描述符所對應的段是否存在。一般來說,描述符所對應的段是在內存中。但是當內存空間緊張時,有可能指示建立了描述符,對應的內存空間并不存在,這時就應當把描述符的P位清零,表示段并不存在。另外,同樣是在內存空間緊張的情況下,會把很少用到的段換出到硬盤中,騰出空間給當前急需內存的進程使用,這時同樣要把P位清零,當再次輪到它執行時,再將其裝入內存,然后P位置1。 **P是由處理器負責檢查的。**每當通過描述符訪問內存段時,如果P位是0,處理器就會產生一個異常中斷。通常,該中斷處理過程是由操作系統提供的,該處理過程的任務是將該段從硬盤換回內存,并將P位置1。在多用戶、多任務的系統中,這是一種常用的虛擬內存調度策略。
D/B: 默認的操作數大小設置該標志位,主要是為了能夠在32位處理器上兼容運行16位保護模式的程序。 該標志位對不同的段有不同的效果。對于代碼段,此位稱為D位,用于指定指令中默認的的偏移地址和操作數尺寸。D=0時表示指令中的偏移地址或者操作數是16位的。D=1時,表示32位的偏移地址和操作數。對于棧段來說,該位是B位,用于在進行隱式的棧操作中(push,pop,call等),是使用SP寄存器還是使用ESP寄存器。當B=0時,在訪問哪個段時,使用SP寄存器,否則就使用ESP寄存器。同時,B位的值,也決定了棧段的上邊界。如果B=0,那么棧的上邊界是0xFFFF;如果B=1,那么棧段的上邊界是0xFFFFFFFF。
L:64位代碼段標志保留此位給64位處理器使用。目前我們將它置0即可
TYPE:描述符子類型對于數據段來說,這4位分別是X,E,W,A,對于代碼段來說這4位分別是X,C,R,A。他們具體的含義見下面的表格。
AVL:軟件可以使用的位通常由操作系統來用,處理器并不使用它。

下面表格是代碼段和數據段的TYPE字段

XEWA描述符類別含義
000X數據段只讀
001X數據段讀、寫
010X數據段只讀,向下擴展
011X數據段讀、寫,向下擴展
  • X 表示是否可執行。對于數據段,總是不可執行。所以為0
  • E 表示段的擴展方向。E=0是向上擴展的。E=1是向下擴展的
  • W 指示段的讀寫屬性,W=0是不允許寫入的,W=1是可以正常寫入的
  • A 是已訪問位,用于指示它所指向的段最近是否被訪問過。
XCRA描述符類別含義
100X代碼段只執行
101X代碼段執行、讀
110X代碼段只執行、依從的代碼段
111X代碼段執行、讀、依從的代碼段
  • X 表示是否可執行。代碼段總是可執行,所以為1
  • C 指示段是否為特權級依從的。C=0時,表示非依從的代碼段,這樣的代碼段是可以從與它特權級相同的代碼段調用,或者通過門調用;C=1時表示允許從低特權級的代碼轉移到該段執行。
  • R 指示代碼段是否允許讀出。代碼段總是可以執行的,但是為了防止程序破壞,它是不允許寫入的。至于是否有讀出的可能,由R位決定。R=0時表示不能讀出。R=1時,則代碼段是可以讀出的。
  • A 是已訪問位,用于指示它所指向的段最近是否被訪問過。

3、總結

今天學習段描述符的格式,以及段描述符各個字段的含義。

筆記記得不是很全,如果有不懂的可以加我聯系方式一起交流。

學習探討加個人:
qq:1126137994
微信:liu1126137994

總結

以上是生活随笔為你收集整理的【OS学习笔记】十四 保护模式二:段描述符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。