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

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

为什么引入TSS

發布時間:2023/12/3 28 豆豆
默认站点 收集整理的這篇文章主要介紹了 为什么引入TSS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【0】README

text description from orange’s implemention of a os and for complete code ,please visit https://github.com/pacosonTang/Orange-s-OS/blob/master/p62.asm.


【1】 回憶——關于堆棧

通過調用門進行有特權級變換的轉移——理論篇

  • (1)出現的問題: call 指令 執行前后的堆棧已經不再是同一個堆棧 了,那么我們在堆棧A中壓入參數和返回地址, 需要出棧(ret or retf)時,堆棧卻變成了堆棧B, 這該怎么辦呢?
  • (2)解決方法: Intel提供一種機制, 將堆棧A的內容復制到 堆棧B中, 如下圖;

  • (3)TSS閃亮登場(task-state segment -任務狀態段)
    (不同特權級的代碼段間的轉移,會發生堆棧切換,使得調用者的入棧的堆棧是針對調用者本身的堆棧, 而出棧操作是針對被調用者的堆棧,即入棧和出棧的堆棧不一致,使得特權級間跳轉出錯,故引入了 TSS)

  • 出現的問題: 由于每個任務可能在4個特權級間轉移,故每個任務實際上需要4個堆棧;問題是:我們只有一個ss 和 esp, 那么當發生堆棧切換,我們該從哪里獲取其他堆棧的ss 和 esp 呢?

  • 解決方法: 我們引入TSS, 它可以解決這個問題, TSS 數據結構 和 TSS段描述符的數據結構 如下;


【2】舉個荔枝:

如,我們當前在ring3 , 當轉移只ring1 時, 堆棧將被自動切換到由 ss1 和 esp1 指定的位置。由于只是在外層到內層(低特權級到高特權級)切換時,新堆棧才會從TSS中取得,所以TSS 并沒有位于最外層 ring3 的堆棧信息;

(2.1)轉移的過程中,CPU所做的工作:

  • 1) 根據目標代碼段的DPL,從TSS中選擇應該切換到哪個ss 和 esp;
  • 2) 從TSS 中讀取新的ss 和 esp。在這個過程中,若發現ss、esp 或者 TSS 界限錯誤都會導致無效 TSS異常;
  • 3) 對ss 描述符進行檢驗,若發生錯誤,同樣產生#TS異常;
  • 4) 暫時性保存當前ss 和 esp 的值;
  • 5) 加載新的 ss 和 esp;
  • 6) 將剛剛保存起來的ss 和 esp 的值壓棧;
  • 7) 從調用者堆棧中將參數 復制到被調用者堆棧中(新堆棧中), 復制參數的數目由調用門中 Param Count一項來決定;
  • 8) 將當前的 cs 和 eip 壓棧;
  • 9) 加載調用門中指定的新的cs 和 eip, 開始執行被調用者過程;

(2.2)從被調用者到調用者的返回過程中, 處理器的工作:
(實際上,ret這個指令不僅可以實現短返回和長返回, 而且可以實現帶有特權級變換的長返回)

  • 1)檢查保存的cs 中的RPL 以判斷返回時是否要變換特權級;
  • 2)加載被調用者堆棧上的cs 和eip;
  • 3)如果ret 指令含有參數,則增加esp 跳過參數,然后esp 將指向被保存過的調用者ss 和 esp ;ret的參數個數對應 調用門中的 Param Count的值;
  • 4)加載ss 和 esp , 切換到調用者堆棧,被調用者的ss 和 esp 被丟棄;
  • 5)如果ret 指令含有參數, 增加esp 的值以跳過參數;
  • 6)檢查ds、es、fs、gs的值,如果其中哪一個寄存器指向的段的DPL 小于CPL(此規則不適用于一致代碼段),那么一個空描述符會被加載到該寄存器;

【3】總結:(使用調用門的過程實際上分為兩部分)

  • (1)從低特權級到高特權級,通過調用門和call 指令來實現;
  • (2)從高特權級到低特權級, 通過ret 指令來實現;(即,ret 指令可以實現從高特權級到低特權級的轉移)

(Attention):

  • A1)從調用者堆棧中將參數復制到被調用者堆棧(新堆棧)中, 復制參數的數目由 調用門中 Param Count 一項來決定,(調用門中 Param Count的作用);
  • A2) ret(retf)是call 的反過程, 只是帶參數的ret 指令會同時釋放事先被壓棧的參數;
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是默认站点為你收集整理的为什么引入TSS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。