“從一個(gè)業(yè)內(nèi)人士的視角來欣賞和理解Linux內(nèi)核的設(shè)計(jì)和實(shí)現(xiàn)之美脱吱〗裳郑”
進(jìn)程:是處于執(zhí)行期的程序以及相關(guān)的資源的總稱只磷。完全可能存在兩個(gè)或多個(gè)不同的進(jìn)程執(zhí)行的是同一個(gè)程序蝙斜。并且兩個(gè)域兩個(gè)以上并存的進(jìn)程還可以共享許多諸如打開的文件揍瑟、地址空間之類的資源。父進(jìn)程調(diào)用fork()系統(tǒng)產(chǎn)生子進(jìn)程乍炉。
在現(xiàn)代操作系統(tǒng)中,進(jìn)程提供兩種虛擬機(jī)制:虛擬處理器和虛擬內(nèi)存
虛擬處理器:雖然實(shí)際上可能是許多進(jìn)程正在分享一個(gè)處理器運(yùn)算資源,但虛擬處理器給進(jìn)程一種假象,讓這些進(jìn)程覺得自己在獨(dú)享處理器绢片。
虛擬內(nèi)存:讓進(jìn)程在分配和管理內(nèi)在時(shí)覺自己擁有整個(gè)系統(tǒng)的所有內(nèi)存資源滤馍。
任務(wù)隊(duì)列(task list):內(nèi)核把進(jìn)程的列表存放在任務(wù)隊(duì)列的雙向循環(huán)鏈表中。鏈表中的每一項(xiàng)都是為task_struct(在32位機(jī)器上它大約有1.7KB)底循、稱為進(jìn)程描述符的結(jié)構(gòu)巢株,該結(jié)構(gòu)定義在<linux/sched.h>文件中。進(jìn)程描述符中包含一個(gè)具體進(jìn)程的所有信息熙涤。
進(jìn)程的狀態(tài):進(jìn)程描述符中的state域描述了進(jìn)程的當(dāng)前狀態(tài)阁苞。系統(tǒng)中的每個(gè)進(jìn)程都必然處于五種進(jìn)程狀態(tài)中的一種。
TASK_RUNNING(運(yùn)行)----進(jìn)程是可執(zhí)行的祠挫,或者它正在執(zhí)行那槽,或者在運(yùn)行隊(duì)列中等待執(zhí)行。
TASK_INTERRUPTIBLE(可中斷)----進(jìn)程正在睡眠(阻塞)等舔,等待某些條件的達(dá)成骚灸。
TASK_UNINTERRUPTIBLE(不可中斷)----就算是接收到信號(hào)也不會(huì)被喚醒或準(zhǔn)備投入運(yùn)行。
__TASK_TRACED----被其他進(jìn)程跟蹤的進(jìn)程慌植。
__TASK_STOPPED(停止)----進(jìn)程停止執(zhí)行