【OS学习笔记】二十六 保护模式八:任务门---任务切换
上一篇文章學習了:保護模式七:調用門與依從的代碼段----特權級保護
主要學習了以下內容:
描述符特權級(目標對象的特權級)DPL
-
描述符特權級(目標對象的特權級)DPL
-
當前特權級CPL
-
低特權級的應用調用高特權級的操作系統代碼的兩種方法
- 第一種方法是將高特權級的代碼段定義為依從的
- 第二種方法是使用調用門
-
請求特權級RPL
今天接著上一篇文章學習:
- 任務切換的方法
1、回顧
從80286開始,處理器是面向多任務系統而設計的。在一個多任務的環境中,可以同時存在多個任務,每個任務都有自己的局部描述符(LDT)和任務狀態段(TSS)。可以在多個任務之間切換,使它們輪流執行,從一個任務切換到另一個任務時,具體的切換過程是處理器固件負責進行。
但是什么時候切換到另一個任務,以及切換到哪一個任務,這是操作系統的責任,處理器只負責具體的切換過程,包括保護前一個任務的現場。
有兩個基本的任務切換方法,一種是協同式的,從一個任務切換到另一個任務時,需要當前任務主動的請求暫時放棄執行權,或者在通過調用門請求操作系統服務時(系統會調用),由操作系統‘趁機’將控制轉移到另一個任務。
另一種方式是搶占式的。在這種情況下,可以安裝一個定時器,并在中斷服務程序中實施任務切換。硬件中斷信號總會出現,不管處理器當時在做什么,中斷總會按時到來,而任務切換就能準時進行。在這種情況下,每個任務都能獲得平等的執行機會。搶占式多任務將放在后面:保護模式八進行學習。這里我們只學習多任務切換的一般工作原理。
2、任務切與特權級控制轉移的區別
在上一篇文章點擊查看。我們學習了特權級相關的概念。知道了特權級實際上是針對同一個任務的局部空間與全局空間之間的控制轉移保護而存在的。注意,我們說特權級是針對同一個任務的,這一點需要理解,因為不同的任務之間就算特權級不一樣,也是可以進行人去切換的。比如用戶線程與內核線程,這肯定是可以進行切換的。
上面的怎么理解呢?
實際上,操作系統出了為每一個任務提供服務外,也會有一個作為任務而獨立存在的部分,而且是0特權級的任務。當計算機啟動進入保護模式,直接創建和執行操作系統的0特權級任務,然后可以從該任務切換到其他任務,不管它們是哪個特權級的。
如下圖是一個任務切換和在任務內進行特權級間的控制轉移示意圖:
很明顯,任務切換與特權級控制轉移不是一回事!!!
3、任務切換的方法
3.1 借助于中斷—任務門
這是現代搶占式多任務的基礎。原因很簡單,只要中斷沒有被屏蔽,它就能隨時發生。特別是定時器中斷,能夠以準確的時間間隔發生,可以用來強制實施任務切換。
我們知道在實模式下,內存最低地址端的1KB是中斷向量表,保存著256個中斷處理過程的段地址和偏移地址。當中斷發生時,處理器把中斷號乘以4,作為索引號訪問中斷向量表,從相應的位置取出中斷處理過程的段地址和偏移地址,并轉移到那里執行,
而在保護模式下,中斷向量表不再使用,取而代之的是中斷描述符表。它和GDT,LDT是一樣的,用于保存描述符。它保存的是門描述符。 包括中斷門,陷阱門和任務門。這些門和我們之前學過的調用門非常類似。當中斷發生時,處理器用中斷向量表乘以8(因為每個描述符占8字節),作為索引訪問中斷描述符表,取出門描述符。門描述符中有中斷處理過程的代碼段選擇子和段內偏移量,這和調用門是一樣的。接著,轉移到相應位置去執行。
一般的中斷處理可以使用中斷門和陷阱門。它們兩的本質與調用門類似,都是任務內的控制轉移。從任務的局部空間轉移大全局空間。
但是當中斷發生時,中斷號對應的是任務門,那就不一樣了。此時就是進行任務切換-----即終止當前任務的執行,切換到另一個任務執行。
如下圖是一個任務門描述符的格式:
其中:
- TSS選擇子: 執行任務切換時,必須找到新任務的選擇子。
- P位:任務門的P位指示該門是否有效,p=0時,不允許使用此門實施任務切換;
- DPL:任務門描述符的特權級,但是對因中斷而發起的任務切換不起作用,處理器不按特權級施加任何保護。當以非中斷的方式使用任務門進行任務切換,就需要用到DPL
下面總體概述一下如何使用任務門來進行任務切換:
4 總結
以上只是大概學習了任務切換的一般過程以及任務門描述符的基本概念。我們需要注意任務切換與特權級的控制轉移之間的區別。后序還會有詳細的內容。
詳細的內容還是要參考原書籍,這里只是做一個簡單的總結。
學習探討加個人:
qq:1126137994
微信:liu1126137994
總結
以上是生活随笔為你收集整理的【OS学习笔记】二十六 保护模式八:任务门---任务切换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot默认数据源如何设置连
- 下一篇: 小米一键上锁工具_小米首款高端全自动智能