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