一步步编写操作系统 56 门、调用门与RPL序 1
小弟多次想把調用門和RPL分開單獨說,但幾次嘗試都沒有成功,我發現它們之間是緊偶合、密不可分,RPL的產生主要是為解決系統調用時的“越權”問題,系統調用的實現方式中,以調用門和中斷門最為適合。由于以后我們將用中斷門實現自己的系統調用,故在此本著擴充知識面的目的給大伙兒介紹調用門,通過調用門的實例,讓大伙兒理解特權級那點事兒。
處理器只有通過“門結構”才能由低特權級轉移到高特權級,處理器就是這樣設計的,我們必須要遵循它的用法,對處理器來說,操作系統只是它的應用而已。
門結構是什么呢?就是記錄一段程序起始地址的描述符。
描述符有多種,剛才所說的一致性代碼段,雖然它里面全是代碼,但它本身是內存段,并不是指具體的一段例程,所以可以用“段描述符”來“描述”。還有一種稱為“門描述符”的結構,用來描述一段程序。進入這種神奇的“門”,處理器便能轉移到更高的特權級上。
門描述符同段描述符類似,都是8字節大小的數據結構,用來描述門中通向的代碼。一共有4種門結構,下面4張圖是4種門描述符的結構,咱們先看圖,然后咱們再簡要介紹
?
?
?
?
大家看圖中的4種門描述符,它們與段描述符最大的不同是,除了任務門外,其它三種門都是對應到一段例程,即對應一段函數,而不是像段描述符對應的是一片內存區域。任何程序都屬于某個內存段,所以程序確切的地址必須用“代碼段選擇子+段內偏移量”來描述,可見,門描述符是基于段描述符,例程是用段描述符來給出基址的,所以門描述符中要給出代碼段的選擇子,但光給出基址遠遠不夠,還必須給出例程的偏移量,這就是門描述符中記錄的是選擇子和偏移量的原因。
任務門描述符可以放在GDT、LDT和IDT(中斷描述符表,后面章節在介紹中斷時大伙兒就清楚了)中,調用門可以位于GDT、LDT中,中斷門和陷阱門僅位于IDT中。
任務門、調用門都可以用call和jmp指令直接調用,原因是這兩個門描述符都是位于描述符表中,要么是GDT,要么是LDT,訪問它們同普通的段描述符是一樣的,也必須要通過選擇子,因此只要在call或jmp指令后接任務門或調用門的選擇子便可調用它們了。陷阱門和中斷門只存在于IDT中,因此不能主動調用,只能由中斷信號來觸發調用。
任務門有點特殊,它是用任務TSS的描述符選擇子來描述一個任務,有關TSS的內容會在用戶進程部分介紹。除任務門之外,另外的三個門描述符都是用代碼段選擇子及偏移地址來描述一段程序例程。但是,無論是哪種門描述符,它們中所記錄的信息都已經可以確定所描述的對象(例程或任務)了,所以在被調用時,CPU都會忽略調用指令中的偏移量。如:假設某調用門描述符位于GDT中第1個位置,這樣的指令“call 0x0008:0x1234”,在調用此調用門時,偏移量0x1234會被CPU忽略。
總結
以上是生活随笔為你收集整理的一步步编写操作系统 56 门、调用门与RPL序 1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中信信金卡怎么申请 中信信金卡申请条件
- 下一篇: 中信信金卡要面签吗 中信信金卡怎么面签