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