【OS学习笔记】二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念
上一篇文章學(xué)習(xí)了保護(hù)模式下操作系統(tǒng)內(nèi)核如何加載程序并運(yùn)行:點(diǎn)擊鏈接查看上一篇文章
本篇文章接著上一篇文章學(xué)習(xí)保護(hù)模式下任務(wù)的隔離。
包括以下學(xué)習(xí)內(nèi)容:
- 任務(wù)的全局空間和局部空間
- 任務(wù)的TSS
- 任務(wù)的LDT
- 任務(wù)的特權(quán)級(jí)概念等
1、回顧
在保護(hù)模式下,通過將內(nèi)存分成大小不等的段,并用描述符對(duì)每個(gè)段的用途、類型、長(zhǎng)度進(jìn)行指定,就可以在程序運(yùn)行時(shí)由處理器硬件施加訪問保護(hù)。比如,當(dāng)程序試圖去寫一個(gè)可執(zhí)行程序的代碼段時(shí),處理器就會(huì)阻止這種企圖;再比如當(dāng)程序試圖讓處理器反問超過段的界限內(nèi)存區(qū)域,處理器會(huì)引發(fā)異常中斷。
首先一個(gè)程序老老實(shí)實(shí)地訪問只屬于它自己的段時(shí),基本的段保護(hù)機(jī)制是有效的。但是一個(gè)失控的程序,或者一個(gè)惡意的程序,依然可以通過追蹤和修改描述符表來達(dá)到它訪問任何內(nèi)存段的目的。比如用戶程序知道GDT的位置,它可以通過向段寄存器加載操作系統(tǒng)的段描述符,或者在GDT中添加一個(gè)指向操作系統(tǒng)的數(shù)據(jù)段的描述符,來修改只屬于操作系統(tǒng)的私有數(shù)據(jù)。
我們肯定是不能允許有以上的事情發(fā)生。
現(xiàn)在都是多任務(wù)系統(tǒng)。對(duì)于多任務(wù)系統(tǒng),首先就必須保證任務(wù)的隔離和保護(hù)以及任務(wù)與操作系統(tǒng)之間的隔離。這是我們首要的任務(wù)(此任務(wù)非彼任務(wù))。其次,由于操作系統(tǒng)主要是為各個(gè)任務(wù)服務(wù),負(fù)責(zé)加載、創(chuàng)建和執(zhí)行環(huán)境的管理,并執(zhí)行各個(gè)任務(wù)的調(diào)度,最操作系統(tǒng)的保護(hù)顯得尤為重要。我們之前學(xué)習(xí)過的基本的段保護(hù)機(jī)制已經(jīng)無法滿足以上那些要求。
所以新的機(jī)制就要出現(xiàn)。比如任務(wù)的隔離,特權(quán)級(jí)與特權(quán)級(jí)訪問規(guī)則等,這些都是在以上新的保護(hù)要求下被創(chuàng)造出來的規(guī)則。
當(dāng)然本文不是一下子就將這些機(jī)制學(xué)習(xí)完。本文先學(xué)習(xí)任務(wù)的隔離,以及特權(quán)級(jí)的基本概念。
2、任務(wù)描述符的隔離
所謂任務(wù)。程序是記錄在載體(比如硬盤)上的指令和數(shù)據(jù),總是為了完成某個(gè)特定的工作,其正在執(zhí)行的一個(gè)副本,叫做任務(wù)(Task)。當(dāng)然,一個(gè)程序,它可以有多個(gè)在運(yùn)行的副本,那么就會(huì)有多個(gè)任務(wù)在同時(shí)執(zhí)行。不同的程序也可以同在在內(nèi)存中運(yùn)行,這也是多個(gè)任務(wù)。
在以前的學(xué)習(xí)中,我們只接觸到了GDT,我們把所有的任務(wù)的描述符以及操作系統(tǒng)的描述符都放在這個(gè)全局描述符表里面。這樣顯得不是很好。為了讓任務(wù)與任務(wù),任務(wù)與操作系統(tǒng)之間能夠更好的隔離,便有了局部描述符表(LDT)。每一個(gè)任務(wù)都有自己的獨(dú)立的描述符表,叫做LDT,LDT里面存放的是各個(gè)任務(wù)自己的描述符。各個(gè)任務(wù)自己的描述符不再放在GDT中,而是放在自己的獨(dú)立的LDT中,這樣更加有利于任務(wù)的隔離。
類似于GDTR是指向GDT的寄存器,對(duì)于LDT來說,也有一個(gè)寄存器叫做LDTR指向LDT。這個(gè)LDTR指向的是當(dāng)前正在執(zhí)行的任務(wù)的LDT。當(dāng)任務(wù)切換時(shí),對(duì)應(yīng)的LDT肯定會(huì)變,那么LDTR也會(huì)更新指向新的任務(wù)的LDT。
具體的LDT的大小以及各個(gè)如何從LDT中加載描述符,與GDT類似,只不過在段選擇子的TI位為1的時(shí)候表示從LDT中加載描述符,TI位為0的時(shí)候表示從GDT中加載描述符。具體的步驟參考書籍。
3、 保護(hù)任務(wù)現(xiàn)場(chǎng)的任務(wù)狀態(tài)段(TSS段)
我們知道,任務(wù)切換的時(shí)候,肯定是涉及到任務(wù)上下文信息的保存。任務(wù)的上下文信息包括通用寄存器、段寄存器、棧指針寄存器ESP、指令指針寄存器EIP、狀態(tài)寄存器EFLAGS,等等。
為了保存任務(wù)的狀態(tài),并在下次重新恢復(fù)執(zhí)行的時(shí)候恢復(fù)他們,每個(gè)任務(wù)都應(yīng)該有一個(gè)額外的內(nèi)存段區(qū)域用于保存相關(guān)信息,這叫做任務(wù)狀態(tài)段(TSS)
如下圖是一個(gè)TSS的具有的固定格式:
處理器固件能夠識(shí)別TSS中每個(gè)元素,并在任務(wù)切換的時(shí)候讀取其中的信息。
和LDT一樣,處理器用TR寄存器來指向當(dāng)前任務(wù)的TSS。
下面我們來綜合看一下多任務(wù)系統(tǒng)的組合示意圖,包括了GDT,LDT,TSS大致的關(guān)系。
4、任務(wù)的全局空間和局部空間
我們大多數(shù)人都學(xué)過C語言,知道在C語言中會(huì)調(diào)用一些庫函數(shù)例如printf,實(shí)際上這些函數(shù)最終都會(huì)去調(diào)用對(duì)應(yīng)的系統(tǒng)函數(shù)。這些系統(tǒng)函數(shù)正是操作系統(tǒng)為用戶程序提供的例程。
這樣的話,我們程序中就包括了調(diào)用自己寫的函數(shù),以及調(diào)用操作系統(tǒng)的函數(shù)。這就導(dǎo)致我們用戶程序的執(zhí)行會(huì)在操作系統(tǒng)內(nèi)核用戶程序之間來回切換。我們把在用戶程序空間執(zhí)行的空間叫做局部空間,在內(nèi)核中執(zhí)行的空間叫做全局空間。
如下a圖為每個(gè)任務(wù)的全局空間個(gè)局部空間,b圖為多任務(wù)系統(tǒng)的全局空間和局部空間。
所謂全局空間和局部空間,也就是地址劃分為題,即段的劃分問題。全局空間有全局描述符表GDT指定。局部空間由局部描述符表LDT指定。
5、特權(quán)級(jí)基本概念
引入LDT和TSS ,只是任務(wù)層面進(jìn)一步強(qiáng)化了分段機(jī)制,從安全保障的角度來看,只是相當(dāng)于構(gòu)建了可靠的硬件設(shè)施。
僅有設(shè)施是不行的,還需要有規(guī)章制度,還要有人來執(zhí)行,處理器也一樣。為此在分段機(jī)制的基礎(chǔ)上,處理器引入了特權(quán)級(jí),并由固件負(fù)責(zé)實(shí)施特權(quán)級(jí)保護(hù)。
特權(quán)級(jí)是存在于描述符及其選擇子中的一個(gè)數(shù)值。當(dāng)這些描述符或者選擇子所指向的對(duì)象要進(jìn)行某種操作,或者被別的對(duì)象進(jìn)行訪問的時(shí)候,該數(shù)值用于控制它們所能進(jìn)行的操作?;蛘呦拗扑鼈兊目稍L問性。
Intel處理器共有4個(gè)訪問級(jí)別:0,1,2,3. 較大的特權(quán)級(jí)意味著較低的特權(quán)級(jí)。較小的數(shù)值一位置較高的特權(quán)級(jí)。如下圖是Intel提供的4級(jí)換裝保護(hù):
由上圖可以看出,操作系統(tǒng)的內(nèi)核特權(quán)級(jí)最高,系統(tǒng)服務(wù)程序(例如設(shè)備驅(qū)動(dòng)程序等)的特權(quán)級(jí)其次,用戶程序的特權(quán)級(jí)最低。
其實(shí)這很容易理解,操作系統(tǒng)的特權(quán)最高,它想干什么就干什么,肯定需要最高的特權(quán)級(jí)。普通的用戶程序是被操作系統(tǒng)管理的,而且用戶程序也不能隨便的訪問硬件操作硬件,所以用戶程序的特權(quán)級(jí)最低。
剩下的關(guān)于特權(quán)級(jí)的保護(hù)方面的內(nèi)容,就放到下一篇文章去學(xué)習(xí)。
6、總結(jié)
今天學(xué)習(xí)了以下基本內(nèi)容:
- 任務(wù)的全局空間和局部空間
- 任務(wù)的TSS
- 任務(wù)的LDT
- 任務(wù)的特權(quán)級(jí)概念等
最后我們?cè)俳o出一個(gè)與任務(wù)相關(guān)的各部分邏輯示意圖:
詳細(xì)的內(nèi)容還是要參考原書籍,這里只是做一個(gè)簡(jiǎn)單的總結(jié)。
學(xué)習(xí)探討加個(gè)人:
qq:1126137994
微信:liu1126137994
總結(jié)
以上是生活随笔為你收集整理的【OS学习笔记】二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python音乐推荐系统_音乐推荐系统
- 下一篇: halcon/c++接口基础 之 构造函