之所以出現(xiàn)這個定義是因?yàn)橄到y(tǒng)要安全:內(nèi)核要和用戶程序分開..內(nèi)核一定要安全.不能被用戶程序干涉.
但是有時候用戶程序也需要讀取內(nèi)核的某些數(shù)據(jù),怎么辦呢?
于是os將內(nèi)核程序開辟一些可以供用用戶程序訪問的段.但是不允許用戶程序?qū)懭霐?shù)據(jù).
1.內(nèi)核不用知道用戶程序的數(shù)據(jù).內(nèi)核不用調(diào)用用戶程序的數(shù)據(jù).內(nèi)核不用轉(zhuǎn)移到用戶程序中來.
2.用戶程序只能訪問到內(nèi)核的某些共享的段.我們稱這些段為一致代碼段
3.用戶程序不能訪問內(nèi)核不共享的段.
1.在x86中的數(shù)據(jù)和代碼是按段來存放的:[section]
2.............程序是通過選擇子/門調(diào)用等等來在段之間來回走動的.
3.每一個選擇子/門調(diào)用選擇子是有分等級的:這個是在選擇符的結(jié)構(gòu)中:RPL(最后2位)
5:每一個代碼段/數(shù)據(jù)段也是有分等級的.:這個是在gdt描述符中.
6:調(diào)用的選擇符和被調(diào)用的段都分了等級.哪么這些等級在哪里使用呢?在一致代碼段.也就是共享段中使用
既然是共享所以就有規(guī)則了:
對于一致代碼段:也就是共享的段.
1.特權(quán)級高的程序不允許訪問特權(quán)級低的數(shù)據(jù):核心態(tài)不允許調(diào)用用戶態(tài)的數(shù)據(jù).
2.特權(quán)級低的程序可以訪問到特權(quán)級高的數(shù)據(jù).但是特權(quán)級不會改變:用戶態(tài)還是用戶態(tài).
對于普通代碼段.也就是非一致代碼段:
0.只允許同級間訪問.
1.絕對禁止不同級訪問:核心態(tài)不用用戶態(tài).用戶態(tài)也不使用核心態(tài).
總結(jié):似乎這些東西跟我們初學(xué)者預(yù)想的那樣不同.核心態(tài)是老大.想用訪問誰都可以.其實(shí)錯了.結(jié)果恰恰相反.
這是因?yàn)榉乐褂脩舸鄹暮诵膽B(tài)的數(shù)據(jù).導(dǎo)致核心態(tài)執(zhí)行用戶代碼.而造成內(nèi)核崩潰.
內(nèi)核壞了.什么事都可能發(fā)生.