x86彙編之任務切換

前言

  • 任務切換可以分爲協同和搶佔
  • 協同就是任務自己主動交出控制權,搶佔就是利用中斷,強制從任務手中獲得控制權

N位

  • 任務門和調用門類似,任務門描述符可以放置在GDT,LDT中
    在這裏插入圖片描述
  • 當發生中斷的時候,中斷號x8+中斷描述符表基地址,當CPU辨別這是一個任務門的時候就執行任務切換
  • 除此之外,還可以通過 call 任務門或者call TSS選擇子進行任務切換
  • 矛盾在於用iret返回的時候,怎麼鑑別是從中斷返回還是從任務返回
  • 在EFLAGS裏面有一個N位,當該位是1時,表明當前任務屬於嵌套在其他任務之中,那麼就屬於從任務返回
  • 當中斷或者Call 發生執行任務切換會發生任務嵌套,將當前任務的所有狀態進行保存,不改變N位和B位,將下一個任務TSS的任務鏈接域指向上一個任務,並且將B位和N位置爲1
  • 當用Jump的時候並不會,將當前B位置0,不改變N位。然後加載下一個任務的TSS進TR,並將其B位置1,不改變N位
  • 任務切換不允許重入
  • A切換到A無法進行狀態保存
  • ABC任務嵌套,C再去嵌套A,就會導致死循環
  • 通過中斷髮生的任務切換,不檢驗特權級
  • 數據訪問的特權級檢查規則適用於jmp和call指令,當前任務的cpl和新任務段選擇子的RPL必須在數值上小於或者等於目標TSS或者任務門的DPL。異常,中斷和iret指令引起的任務切換忽略目標任務門或者TSS描述符DPL。對於以int n 指令產生的中斷,要檢查DPL
  • 通過B位來檢驗。

IOPL

  • 在處理器的標誌寄存器EFLAGS中,位13,位12是IOPL,也就是輸入/輸出特權級,它代表着當前任務的I/O特權級別
  • 如果當前特權級CPL高於,或者和任務的I/O特權級IOPL相同時,所有I/O操作都是允許的
  • 處理器不限制0特權級程序的I/O訪問,總是允許的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章