1.操作系統(tǒng)的核心——內(nèi)核
管理和分配計(jì)算機(jī)資源(即CPU催首、RAM和設(shè)備)的核心層軟件操漠。
Linux內(nèi)核可執(zhí)行文件采用/boot/vmlinuz或與之類似的路徑名洒疚。
內(nèi)核的職責(zé)
- 進(jìn)程調(diào)度
- 搶占式多任務(wù)操作系統(tǒng)
- 內(nèi)存管理
- Linux采用虛擬內(nèi)存管理機(jī)制
- 進(jìn)程與進(jìn)程之間鸠姨,進(jìn)程與內(nèi)核之間彼此隔離
- 只需將進(jìn)程的一部分保持在內(nèi)存中
- 文件系統(tǒng)
- 內(nèi)核在磁盤(pán)之上提供了文件系統(tǒng)寂拆,允許對(duì)文件執(zhí)行創(chuàng)建奢米、獲取抓韩、更新以及刪除等操作
- 創(chuàng)建和終止進(jìn)程
- 對(duì)設(shè)備的訪問(wèn)
- 與外設(shè)的通信機(jī)制包括輸入、輸出或兩者兼而有之
- 內(nèi)核既為程序訪問(wèn)設(shè)備提供了簡(jiǎn)化版的標(biāo)準(zhǔn)接口鬓长,同時(shí)還要仲裁多個(gè)進(jìn)程對(duì)一個(gè)設(shè)備的訪問(wèn)
- 聯(lián)網(wǎng)
- 內(nèi)核以用戶進(jìn)程的名義收發(fā)網(wǎng)絡(luò)消息(數(shù)據(jù)包)
- 提供系統(tǒng)調(diào)用應(yīng)用編程接口
- 進(jìn)程可利用內(nèi)核入口點(diǎn)(也稱為系統(tǒng)調(diào)用)請(qǐng)求內(nèi)核去執(zhí)行各種任務(wù)
- 虛擬私有計(jì)算機(jī)
- 每個(gè)用戶可以登錄進(jìn)入系統(tǒng)內(nèi)谒拴,獨(dú)立操作,運(yùn)行程序于自有的虛擬地址空間
內(nèi)核態(tài)和用戶態(tài)
現(xiàn)代處理器架構(gòu)一般允許CPU至少在兩種不同狀態(tài)下運(yùn)行:
- 用戶態(tài)
- 和心態(tài)
執(zhí)行硬件指令可使CPU在兩種狀態(tài)間來(lái)回切換涉波。與之對(duì)應(yīng)的虛擬內(nèi)存區(qū)域劃分(標(biāo)記)為用戶空間部分或內(nèi)核空間部分英上。在用戶態(tài)下運(yùn)行時(shí),CPU只能訪問(wèn)被標(biāo)記為用戶空間的內(nèi)存啤覆,試圖訪問(wèn)內(nèi)核空間的內(nèi)存會(huì)引發(fā)硬件異常苍日。當(dāng)運(yùn)行于核心態(tài)時(shí),CPU既能訪問(wèn)用戶空間內(nèi)存窗声,也能訪問(wèn)內(nèi)核空間內(nèi)存相恃。
僅當(dāng)處理器在核心態(tài)才能執(zhí)行的操作:
- 執(zhí)行宕機(jī)(halt)
- 訪問(wèn)內(nèi)存管理硬件
- 設(shè)計(jì)IO操作
以進(jìn)程及內(nèi)核視角檢視系統(tǒng)
內(nèi)核維護(hù)的數(shù)據(jù)結(jié)構(gòu)中,包含了所有正在運(yùn)行的進(jìn)程有關(guān)信息笨觅。隨著進(jìn)程的創(chuàng)建拦耐、狀態(tài)發(fā)生變化、終結(jié)见剩,內(nèi)核會(huì)及時(shí)更新這些數(shù)據(jù)結(jié)構(gòu)杀糯。
內(nèi)核所維護(hù)的底層數(shù)據(jù)結(jié)構(gòu)可將程序使用的文件名轉(zhuǎn)換為磁盤(pán)的物理位置。
每個(gè)進(jìn)程的虛擬內(nèi)存與計(jì)算機(jī)物理內(nèi)存及磁盤(pán)交換區(qū)(磁盤(pán)空間中的保留區(qū)域炮温,作為計(jì)算機(jī)RAM的補(bǔ)充)之間的映射關(guān)系火脉,也在內(nèi)核維護(hù)的數(shù)據(jù)結(jié)構(gòu)之列。
2.shell
shell是一種具有特殊用途的程序柒啤,主要用戶讀取喲京滬輸入命令,并執(zhí)行相應(yīng)的程序以響應(yīng)命令畸颅。有時(shí)担巩,也稱之為命令解釋器。
盡管某些操作系統(tǒng)將命令解釋器集成于內(nèi)核中没炒,而對(duì)UNIX系統(tǒng)而言涛癌,shell只是一個(gè)用戶進(jìn)程。
幾種shell:
- Bourne shell(sh)
- C shell(csh)
- Korn shell(ksh)
- Bourne again shell(bash)
3.用戶和組
系統(tǒng)會(huì)對(duì)每個(gè)用戶的身份做唯一標(biāo)識(shí)送火,用戶可隸屬于多個(gè)組拳话。
用戶
系統(tǒng)的每個(gè)用戶都擁有唯一的登錄名(用戶名)和與之對(duì)應(yīng)的整數(shù)型用戶ID(UID)。
系統(tǒng)密碼文件**/etc/passwd **中記錄的信息:
- UID
- 組ID
- 主目錄:用戶登陸后所居于的初始目錄
- 登陸shell
用戶密碼往往存儲(chǔ)于單獨(dú)的shadow密碼文件中
組
一個(gè)用戶可以同時(shí)屬于組种吸。
每個(gè)用戶對(duì)應(yīng)著系統(tǒng)組文件/etc/group中的一行記錄弃衍。含有如下記錄:
- 組名
- 組ID(GID)
- 用戶列表
超級(jí)用戶
超級(jí)用戶賬號(hào)ID為0,通常登陸名為root坚俗。超級(jí)用戶凌駕于系統(tǒng)的權(quán)限檢查之上镜盯。無(wú)論文件何種訪問(wèn)權(quán)限岸裙,超級(jí)用戶都可以訪問(wèn)系統(tǒng)中的任何文件,也能發(fā)送信號(hào)干預(yù)系統(tǒng)運(yùn)行的所有用戶進(jìn)程速缆。
4.單根目錄層級(jí)降允、目錄、鏈接及文件
內(nèi)核維護(hù)著一套單根目錄結(jié)構(gòu)艺糜,以放置系統(tǒng)的所有文件剧董。"/" 根目錄。
文件類型
文件系統(tǒng)中破停,會(huì)對(duì)文件類型進(jìn)行標(biāo)記送滞,以表明其種類,含有如下種類:
- 普通文件
- 設(shè)備
- 管道
- 套接字
- 目錄
- 符號(hào)鏈接
路徑和鏈接
目錄是一種特殊類型的文件辱挥,內(nèi)容采用表格形式犁嗅,數(shù)據(jù)項(xiàng)包括文件名以及對(duì)相應(yīng)文件的引用。“文件名+引用”的組合被稱為鏈接晤碘,每個(gè)文件都可以有多條鏈接褂微,因而也可以有多個(gè)名稱,在相同或不同的目錄中出現(xiàn)园爷。
目錄可包含指向文件或其他目錄的鏈接宠蚂。
每個(gè)目錄至少包含兩條記錄:.和..,前者指向目錄自身的鏈接,后者指向其上級(jí)目錄的鏈接童社。
符號(hào)鏈接
類似普通鏈接求厕,符號(hào)鏈接給文件起了一個(gè)“別名”。
普通鏈接是文件名+指針的一條記錄扰楼,符號(hào)鏈接是經(jīng)過(guò)特殊標(biāo)記的文件呀癣。一般會(huì)說(shuō)符號(hào)鏈接“指向”或“引用”目標(biāo)文件,在多數(shù)情況下弦赖,只要系統(tǒng)調(diào)用用到了路徑名项栏,內(nèi)存會(huì)自動(dòng)解除該路徑中符號(hào)鏈接的引用,以符號(hào)鏈接所指向的文件名來(lái)替換符號(hào)鏈接蹬竖。
- 硬鏈接:普通鏈接
- 軟鏈接:符號(hào)鏈接
文件名
文件名最長(zhǎng)達(dá)255個(gè)字符
路徑名
- 絕對(duì)路徑:以"/"開(kāi)始
- 相對(duì)路徑
當(dāng)前工作目錄
每個(gè)進(jìn)程都有一個(gè)當(dāng)前工作目錄沼沈。
文件的所有權(quán)和權(quán)限
每個(gè)文件都有一個(gè)與之相關(guān)的用戶ID和組ID,分別定義文件的屬主和屬組币厕。
為了訪問(wèn)文件列另,系統(tǒng)把用戶分為3類:
- 文件的屬主(文件的用戶)
- 文件組ID相匹配的屬組成員用戶
- 其他用戶
文件的3中權(quán)限:
- 讀
- 寫(xiě)
- 執(zhí)行
也可針對(duì)目錄進(jìn)行上述權(quán)限設(shè)置,但意義稍有不同旦装。讀權(quán)限允許列出目錄內(nèi)容(即該目錄下的文件名)页衙,寫(xiě)權(quán)限允許對(duì)目錄內(nèi)容進(jìn)行更改(添加、修改同辣、刪除文件名)拷姿,執(zhí)行(搜索)權(quán)限允許對(duì)目錄中的文件進(jìn)行訪問(wèn)(但需受文件自身訪問(wèn)權(quán)限約束)
5.文件I/O模型
I/O通用性
同一套系統(tǒng)調(diào)用(open() read() write() close())所執(zhí)行的I/O操作惭载,可施之與所有文件類型,包括設(shè)備文件在內(nèi)响巢。
文件描述符
I/O系統(tǒng)調(diào)用使用文件描述符來(lái)指代打開(kāi)的文件描滔。獲取文件描述符常用手法就是調(diào)用open(),在參數(shù)中指定I/O操作目標(biāo)文件的路徑名踪古。
shell啟動(dòng)的進(jìn)程會(huì)繼承3個(gè)已打開(kāi)的文件描述符:
- 描述符0為標(biāo)準(zhǔn)輸入含长,指代為進(jìn)程提供輸入的文件
- 描述符1為標(biāo)準(zhǔn)輸出,指代進(jìn)程寫(xiě)入輸出的文件
- 描述符2為標(biāo)準(zhǔn)錯(cuò)誤伏穆,指代供進(jìn)程寫(xiě)入錯(cuò)誤消息或異常通告的文件拘泞。
在stdio函數(shù)庫(kù)中,這幾種描述符分別與文件流stdin枕扫、stdout和stderr相對(duì)應(yīng)陪腌。
stdio函數(shù)庫(kù)
C語(yǔ)言的標(biāo)準(zhǔn)I/O函數(shù)
6.程序
過(guò)濾器
從stdin讀取輸入,加以轉(zhuǎn)換烟瞧,在輸出到stdout诗鸭,這種行為的程序稱為過(guò)濾器。
- cat
- grep
- tr
- sort
- wc
- sed
- awk
命令行參數(shù)
C語(yǔ)言程序可以訪問(wèn)命令行參數(shù)参滴,即程序運(yùn)行時(shí)在命令行中輸入的內(nèi)容强岸,在程序main函數(shù)中訪問(wèn):
int main(int argc, char *argv[]])
argc變量包含命令行參數(shù)的總個(gè)數(shù),argv指針數(shù)組的成員逐一指向命令行參數(shù)字符串砾赔,首個(gè)字符串a(chǎn)rgv[0],標(biāo)識(shí)程序名本身蝌箍。
7.進(jìn)程
進(jìn)程就是正在執(zhí)行的程序?qū)嵗?zhí)行程序時(shí)暴心,內(nèi)核會(huì)將程序代碼載入虛擬內(nèi)存妓盲,為程序變量分配空間,簡(jiǎn)歷內(nèi)核記賬(bookkeepingn)數(shù)據(jù)結(jié)構(gòu)酷勺,以記錄與進(jìn)程有關(guān)的各種信息(進(jìn)程ID本橙、用戶ID、組ID以及終止?fàn)顟B(tài))脆诉。
進(jìn)程的內(nèi)存布局
邏輯上將一個(gè)進(jìn)程劃分為以下幾個(gè)部分(也稱為段):
- 文本:程序的指令
- 數(shù)據(jù):程序使用的靜態(tài)變量。
- 堆:程序可以從該區(qū)域動(dòng)態(tài)分配額外內(nèi)存贷币。
- 棧:隨函數(shù)調(diào)用击胜、返回而增減的一片內(nèi)存,用于為局部變量和函數(shù)調(diào)用鏈接信息分配存儲(chǔ)空間役纹。
創(chuàng)建進(jìn)程和執(zhí)行程序
進(jìn)程可以使用系統(tǒng)調(diào)用fork()來(lái)創(chuàng)建一個(gè)新進(jìn)程偶摔。調(diào)用fork()的進(jìn)程稱為父進(jìn)程,新創(chuàng)建的是子進(jìn)程促脉。內(nèi)核通過(guò)對(duì)父進(jìn)程的復(fù)制來(lái)創(chuàng)建子進(jìn)程辰斋。子進(jìn)程從父進(jìn)程處繼承數(shù)據(jù)段策州、棧段以及堆段的副本后,可以修改這些內(nèi)容宫仗,不糊影響父進(jìn)程的原版內(nèi)容够挂。在內(nèi)存中被標(biāo)記為只讀的程序文本段則由父子進(jìn)程共享。
使用execve()系統(tǒng)調(diào)用去加載并執(zhí)行一個(gè)全新程序藕夫。
進(jìn)程ID和父進(jìn)程ID
每一個(gè)進(jìn)程都有一個(gè)唯一的整數(shù)型進(jìn)程標(biāo)識(shí)符PID孽糖,一個(gè)父進(jìn)程標(biāo)識(shí)符PPID
進(jìn)程終止和終止?fàn)顟B(tài)
兩種方式:
- 使用_exit()系統(tǒng)調(diào)用
- 向進(jìn)程傳遞信號(hào),將其"殺死"
進(jìn)程終止毅贮,都會(huì)產(chǎn)生一個(gè)“終止?fàn)顟B(tài)”办悟,一個(gè)非負(fù)小整數(shù),可供父進(jìn)程的wait()系統(tǒng)調(diào)用檢測(cè)滩褥。終止?fàn)顟B(tài)為0表示進(jìn)程“正常退出”病蛉,非0則表示有錯(cuò)誤發(fā)生,大多數(shù)shell會(huì)將前一執(zhí)行程序的終止?fàn)顟B(tài)保存于shell變量$?中
進(jìn)程的用戶和組標(biāo)識(shí)符(憑證)
每個(gè)進(jìn)程都有一組與之相關(guān)的UID和GID瑰煎。
- 真實(shí)UID和GID:用來(lái)表示進(jìn)程所屬的用戶和組铺然。新進(jìn)程從父進(jìn)程繼承這些ID。
- 有效UID和GID:進(jìn)程在訪問(wèn)受保護(hù)資源時(shí)丢间,會(huì)使用這兩個(gè)ID來(lái)確定訪問(wèn)權(quán)限探熔。一般情況,進(jìn)程的有效ID和相應(yīng)的真實(shí)ID值相同烘挫,改變進(jìn)程的有效ID實(shí)際上是一種機(jī)制诀艰,可使進(jìn)程具有其他用戶或組的權(quán)限。
- 補(bǔ)充GID:用來(lái)標(biāo)識(shí)進(jìn)程所屬的額外組饮六。新進(jìn)程從父進(jìn)程繼承補(bǔ)充組ID其垄。登錄shell則從系統(tǒng)組文件中獲取其補(bǔ)充組ID
特權(quán)進(jìn)程
特權(quán)進(jìn)程是指有效用戶ID為0的進(jìn)程。通常由內(nèi)核所施加的權(quán)限限制對(duì)此類進(jìn)程無(wú)效卤橄。由某一特權(quán)進(jìn)程創(chuàng)建的進(jìn)程绿满,也可以是特權(quán)進(jìn)程。另一種方法是set-user-ID機(jī)制窟扑,該機(jī)制允許某進(jìn)程的有效用戶ID等同于該進(jìn)程所執(zhí)行程序文件的用戶ID
能力
Linux把傳統(tǒng)上賦予超級(jí)用戶的權(quán)限劃分為一組相互獨(dú)立的單元喇颁,稱為“能力”。傳統(tǒng)意義上的超級(jí)用戶進(jìn)程則相應(yīng)開(kāi)啟了所有能力嚎货。
賦予某進(jìn)程部分能力橘霎,使得其既能夠執(zhí)行某些特權(quán)級(jí)操作,又防止其執(zhí)行特權(quán)級(jí)操作殖属。
能力的命名以CAP_前綴姐叁,例如,CAP_KILL
init進(jìn)程
系統(tǒng)引導(dǎo)時(shí),內(nèi)核會(huì)創(chuàng)建一個(gè)名為init的特殊進(jìn)程外潜,所有進(jìn)程之父原环,該進(jìn)程的響應(yīng)程序文件為/sbin/init。系統(tǒng)的所有進(jìn)程不是由init(使用fork())創(chuàng)建处窥,就是由其后代創(chuàng)建嘱吗。init的進(jìn)程號(hào)總為1苗踪,且總是以超級(jí)用戶權(quán)限運(yùn)行檀何。
守護(hù)進(jìn)程
守護(hù)進(jìn)程值具有特殊用途的進(jìn)程,系統(tǒng)創(chuàng)建和處理此類進(jìn)程的方式與其他進(jìn)程相同悄蕾,但有一下獨(dú)有特征:
- “長(zhǎng)生不老”嵌灰。守護(hù)進(jìn)程在系統(tǒng)引導(dǎo)時(shí)啟動(dòng)弄匕,直至系統(tǒng)關(guān)閉前,會(huì)一直健在沽瞭。
- 守護(hù)進(jìn)程在后臺(tái)運(yùn)行迁匠,且無(wú)控制終端供其讀取或?qū)懭霐?shù)據(jù)。
例子驹溃,syslogd(在系統(tǒng)日志中記錄消息)和httpd(利用HTTP分發(fā)Web頁(yè)面)
環(huán)境列表
每個(gè)進(jìn)程都有一份環(huán)境列表城丧,即在進(jìn)程用戶空間內(nèi)存中維護(hù)的一組環(huán)境變量。
使用export命令創(chuàng)建環(huán)境變量:
$ export MYVAR = 'Hello world'
C語(yǔ)言可使用外部變量(char environ)來(lái)訪問(wèn)環(huán)境豌鹤,而庫(kù)函數(shù)也允許進(jìn)程去獲取或修改自己環(huán)境中的值亡哄。
資源限制
系統(tǒng)調(diào)用setrlimit()進(jìn)程可以自己消耗的各類資源限制一個(gè)上限。
ulimit()可調(diào)整shell的資源限制布疙。shell為執(zhí)行命令所創(chuàng)建的子進(jìn)程會(huì)繼承上述資源設(shè)置蚊惯。
8.內(nèi)存映射
調(diào)用系統(tǒng)函數(shù)mmap()進(jìn)程,會(huì)在其虛擬地址空間中創(chuàng)建一個(gè)新的內(nèi)存映射灵临。
9.靜態(tài)庫(kù)和共享庫(kù)
目標(biāo)庫(kù):將(通常是邏輯相關(guān)的)一組函數(shù)代碼加以編譯截型,并置于一個(gè)文件中,供其他應(yīng)用程序調(diào)用儒溉。
- 靜態(tài)庫(kù)
- 要使用靜態(tài)庫(kù)中的函數(shù)宦焦,需要在創(chuàng)建程序的鏈接命令中指定相應(yīng)的庫(kù)。鏈接器在解析了引用情況后顿涣,會(huì)從庫(kù)中抽取需目標(biāo)模塊的副本波闹,將其賦值到最終可執(zhí)行的文件中,這就是所謂的靜態(tài)鏈接涛碑。
- 共享庫(kù)
- 運(yùn)行時(shí)將可執(zhí)行文件載入內(nèi)存舔痪,一款名為“動(dòng)態(tài)鏈接器”的程序會(huì)確保將可執(zhí)行文件所需的動(dòng)態(tài)庫(kù)找到,并載入內(nèi)存锌唾,隨后實(shí)施運(yùn)行時(shí)鏈接,解析可執(zhí)行文件中的函數(shù)調(diào)用,將其與共享庫(kù)中相應(yīng)的函數(shù)定義關(guān)聯(lián)起來(lái)晌涕。運(yùn)行時(shí)滋捶,共享代碼在內(nèi)存中只需保留一份。
10.進(jìn)程間通信及同步
進(jìn)程間通信機(jī)制(IPC):
- 信號(hào)(signal)余黎,用來(lái)表示事件的發(fā)生重窟。
- 管道(亦即shell操作"|")和FIFO,用于在進(jìn)程間傳遞數(shù)據(jù)惧财。
- 套接字
- 文件鎖定巡扇,為防止其他進(jìn)程讀取或更新文件內(nèi)容,允許某進(jìn)程對(duì)文件的部分區(qū)域加以鎖定垮衷。
- 消息隊(duì)列厅翔,用于在進(jìn)程間交互消息(數(shù)據(jù)包)
- 信號(hào)量(semaphore),用來(lái)同步進(jìn)程動(dòng)作
- 共享內(nèi)存
11.信號(hào)
進(jìn)程收到信號(hào)搀突,意味著某一事件或異常情況發(fā)生刀闷。信號(hào)以SIGxxxx形式的符號(hào)名加以定義。
內(nèi)核仰迁、其他進(jìn)程或進(jìn)程自身均可向進(jìn)程發(fā)送信號(hào)甸昏。
以下情況可向進(jìn)程發(fā)送信號(hào):
- 用戶鍵入中斷字符(Control-C)
- 進(jìn)程的子進(jìn)程之一已經(jīng)終止
- 由進(jìn)程設(shè)定的定時(shí)器(告警時(shí)鐘)已經(jīng)到期
- 進(jìn)程嘗試訪問(wèn)無(wú)效的內(nèi)存地址
shell中kill命令,程序內(nèi)部系統(tǒng)調(diào)用kill()可提供相應(yīng)功能徐许。
收到信號(hào)時(shí)施蜜,進(jìn)程會(huì)根據(jù)信號(hào)采用如下動(dòng)作之一:
- 忽略信號(hào)
- 被信號(hào)“殺死”
- 先掛起,之后再被專用信號(hào)喚醒
大多數(shù)信號(hào)類型雌隅,程序可不采用默認(rèn)的信號(hào)動(dòng)作翻默,信號(hào)處理器是有程序員定義的函數(shù),會(huì)在進(jìn)程收到信號(hào)時(shí)自動(dòng)調(diào)用澄步,根據(jù)信號(hào)的產(chǎn)生條件執(zhí)行相應(yīng)的動(dòng)作冰蘑。
信號(hào)從產(chǎn)生直至送達(dá)進(jìn)程期間,一直處于掛起狀態(tài)村缸。通常祠肥,系統(tǒng)會(huì)在接受進(jìn)程下次獲取調(diào)用時(shí),將處于掛起狀態(tài)的信號(hào)同時(shí)送達(dá)梯皿。程序可以將信號(hào)納入“信號(hào)屏蔽”仇箱,以阻塞該信號(hào),此信號(hào)一直保持掛起狀態(tài)东羹。
12.線程
每個(gè)進(jìn)程都可執(zhí)行多個(gè)線程剂桥。可將線程想象為共享同一虛擬內(nèi)存及一干其他屬性的進(jìn)程属提。
線程共享同一數(shù)據(jù)區(qū)域和堆权逗,但每個(gè)線程都有自己的棧美尸。線程之間可通過(guò)共享的全局變量進(jìn)行通信。
13.進(jìn)程組合shell任務(wù)控制
shell執(zhí)行的每個(gè)程序都會(huì)在一個(gè)新進(jìn)程內(nèi)發(fā)起斟薇。比如shell創(chuàng)建了3個(gè)進(jìn)程來(lái)執(zhí)行以下管道命令:
$ ls - l | sort -k5n | less
主流shell都提供了一種交互式特性师坎,名為任務(wù)控制,該特性允許用戶同時(shí)執(zhí)行并操縱多條命令或管道堪滨。在支持任務(wù)控制的shell中胯陋,會(huì)將管道內(nèi)的所有進(jìn)程置于一個(gè)新的進(jìn)程組或任務(wù)中。
內(nèi)核可以對(duì)進(jìn)程組中的所有成員執(zhí)行各種動(dòng)作袱箱,尤其是信號(hào)的傳遞遏乔。
14.會(huì)話、控制終端和控制進(jìn)程
會(huì)話指一組進(jìn)程組(任務(wù))发笔。會(huì)話中的所有進(jìn)程都具有相同的會(huì)話標(biāo)識(shí)符盟萨。會(huì)話首進(jìn)程是指創(chuàng)建會(huì)話的進(jìn)程,其進(jìn)程ID會(huì)成為會(huì)話ID
由shell創(chuàng)建的所有進(jìn)程組與shell自身隸屬于同一會(huì)話筐咧,shell是此會(huì)話的會(huì)話首進(jìn)程鸯旁。
偽終端
偽終端是一對(duì)相互連接的虛擬設(shè)備,也稱為主從設(shè)備量蕊。在這對(duì)設(shè)備之間铺罢,設(shè)有一條IPC信道,可供數(shù)據(jù)進(jìn)行雙向傳遞残炮。
日期和時(shí)間
進(jìn)程設(shè)計(jì)兩種類型時(shí)間:
- 真實(shí)時(shí)間
- 進(jìn)程時(shí)間:亦稱CPU時(shí)間韭赘,指的是進(jìn)程自啟動(dòng)起來(lái),所占用的CPU時(shí)間總量
- 系統(tǒng)CPU時(shí)間:內(nèi)核模式執(zhí)行代碼所花費(fèi)的時(shí)間
- 用戶CPU時(shí)間:用戶模式
time命令會(huì)顯示真實(shí)時(shí)間势就、系統(tǒng)CPU時(shí)間泉瞻、執(zhí)行管道中多個(gè)進(jìn)程花費(fèi)的CPU時(shí)間
客戶端服務(wù)端架構(gòu)
實(shí)時(shí)性
/proc文件系統(tǒng)
/proc文件系統(tǒng)由一組目錄和文件組成,裝配(mount)于/proc目錄下苞冯。/proc文件系統(tǒng)是中虛擬文件系統(tǒng)袖牙,以文件系統(tǒng)目錄和文件形式,提供一個(gè)指向內(nèi)核數(shù)據(jù)結(jié)構(gòu)舅锄。為查看和修改各種系統(tǒng)屬性提供方便鞭达。還可通過(guò)/prov/PID形式的命令目錄查看系統(tǒng)中運(yùn)行各進(jìn)程的相關(guān)信息。