進程
進程由程序遗锣、數(shù)據(jù)嗤形、進程控制塊(PCB)組成赋兵。而進程控制塊其實本質(zhì)就是個數(shù)據(jù)結(jié)構(gòu)笔咽,用來記錄進程信息的。
進程的特性:動態(tài)性霹期、并發(fā)性叶组、獨立性、異步性历造;
進程基本狀態(tài):就緒態(tài)甩十、運行態(tài)、等待態(tài)吭产;
Linux的進程的狀態(tài):可執(zhí)行態(tài)(包含就緒和運行兩種狀態(tài))侣监、睡眠態(tài)(等待態(tài))、暫停態(tài)臣淤、僵死態(tài)(會釋放除PCB以外其他資源)
狀態(tài)轉(zhuǎn)化:
運行態(tài)-->等待態(tài):出現(xiàn)這種情況一般都是其他資源被爭搶了橄霉。
等待態(tài)-->就緒態(tài):資源準(zhǔn)備好了,等待CPU邑蒋;
就緒態(tài)-->運行態(tài):CPU時間片輪轉(zhuǎn)到這個進程了姓蜂;
運行態(tài)-->就緒態(tài):時間片到期了,轉(zhuǎn)為就緒態(tài)等著;
新創(chuàng)建的進程是處于就緒態(tài)的
進程運行模式
一個運行的進程麦箍,正常只執(zhí)行一些普通的非特權(quán)指令,就會只在用戶態(tài)運行诀蓉,但是如果你需要一些硬件操作添吗,或者權(quán)限更高的操作妓美,比如需要與某個設(shè)備進行IO,或者要改些什么寄存器的數(shù)據(jù)贵试,就需要切換到核心態(tài)漆际,如果說是進程主動進行系統(tǒng)調(diào)用施符,就是進程用了內(nèi)核提供的函數(shù),對底層硬件做了操作听哭,那么這個過程是就是通過陷入實現(xiàn)的,如果說是硬件在做其他事情,需要CPU過來幫這個設(shè)備執(zhí)行一下其他操作蜒车,那么這個過程我們稱為中斷,一個進程執(zhí)行可能就是在中斷返回嬉挡,陷入返回實現(xiàn)用戶態(tài)與核心態(tài)的反復(fù)橫跳。
核心態(tài)焊夸、用戶態(tài)?
CPU基本功能就是執(zhí)行指令,這個指令可以劃分為特權(quán)指令和非特權(quán)指令,特權(quán)指令是指指令本身擁有特殊權(quán)限冰沙,比如對訪問系統(tǒng)中的所有寄存器袋励,內(nèi)存單元和IO端口盖灸,修改系統(tǒng)關(guān)鍵設(shè)置等,這些對直接操作修改底層硬件的指令;非特權(quán)指令就是普通的計算指令之類的,不涉及資源的操作。核心態(tài)下能執(zhí)行所有權(quán)限的指令邮府,用戶態(tài)下只能執(zhí)行非特權(quán)指令加勤。
進程與操作系統(tǒng)的內(nèi)核是什么關(guān)系?
一個完整的操作系統(tǒng)由一個內(nèi)核和一些系統(tǒng)服務(wù)程序構(gòu)成,負責(zé)最基本的資源管理和硬件控制工作项棠,運行在內(nèi)核態(tài)翅阵,可以執(zhí)行所有指令滥崩。內(nèi)核向下對硬件進行控制,向上提供接口為用戶進程提供系統(tǒng)調(diào)用接口。
中斷是什么茸时?
正常情況下可都,CPU需要與設(shè)備傳輸數(shù)據(jù)的時候,會執(zhí)行打開設(shè)備IO指令,然后繼續(xù)執(zhí)行其他進程,當(dāng)設(shè)備的IO完成之后,會向CPU發(fā)送一個中斷信號秕噪,CPU此時會響應(yīng)中斷信號,暫停正在執(zhí)行的進程,去執(zhí)行中斷操作,然后再回來繼續(xù)執(zhí)行之前暫停進程挚躯。
中斷一般指CPU外部事件引發(fā)的,CPU內(nèi)部的系統(tǒng)調(diào)用我們稱為陷入,陷入和中斷霉祸,本質(zhì)就是用戶態(tài)轉(zhuǎn)為核心態(tài)的一個過程奔穿。
進程經(jīng)常需要在用戶態(tài)和核心態(tài)切換蔬墩,切換就是通過中斷實現(xiàn)的
未完待續(xù)