11.1 什么是進程?
UNIX標準定義:一個其中運行著一個或多個線程地址空間和這些線程所需要的系統(tǒng)資源。(目前暑始,可以將進程看做是正在運行的程序)
如Linux這樣的多任務(wù)操作系統(tǒng)可以同時運行多個程序弥喉。
每個運行著的程序?qū)嵗蜆?gòu)成了一個進程。
eg:在X視窗系統(tǒng)(通常簡稱為X)等視窗化系統(tǒng)中這點尤為明顯(X視窗應(yīng)該是linux的圖形界面)。還有微軟的windows系統(tǒng),x視窗系統(tǒng)提供了一個圖形化的用戶界面,它允許同時運行多個應(yīng)用程序谱醇,每個應(yīng)用程序可以在一個或多個窗口中顯示。
linux多用戶系統(tǒng)步做,允許多用戶訪問副渴,每個用戶呢,可以同時運行多個程序全度,甚至同時運行同一個程序的許多個實例煮剧。系統(tǒng)本身也運行著一些管理者系統(tǒng)資源和控制用戶訪問的程序。
引申: 第4章 将鸵,正在運行的程序或者進程 是由程序代碼勉盅、數(shù)據(jù)、變量(占用著系統(tǒng)內(nèi)存)顶掉、打開的文件(文件描述符)和環(huán)境組成草娜。 一般來說:linux系統(tǒng)中會在進程之間共享程序代碼和系統(tǒng)函數(shù)庫,所以在任何時刻內(nèi)存中都只有代碼的一份副本痒筒。
11.2
進程的結(jié)構(gòu):
兩個用戶分別用grep來執(zhí)行程序:
PS: 每的個進程都會被分配一個唯一的數(shù)字編號宰闰,稱為進程標示符或PID茬贵。通常取值范圍是2~32768的正數(shù)。 當進程被啟動的時候移袍,系統(tǒng)將按照順序選擇下一個沒有被使用的數(shù)字作為它的PID解藻,當數(shù)字已經(jīng)回繞一圈的時候,新的PID重新從2開始咐容。(數(shù)字1一般是為特殊進程init保留的舆逃,init進程負責管理其他進程)蚂维,我們可以看到兩個用戶的的進程被分配的標示符是:1525 戳粒、 1526 .
將要被grep命令執(zhí)行的程序代碼被保存在一個磁盤文件中【也就是寫grep的程序】。正常情況下虫啥,Linux進程不能對用來存放程序代碼的內(nèi)存區(qū)域進行寫操作蔚约,即程序代碼是以只讀方式加載到內(nèi)存中。上圖可以看到涂籽。
雖然不能夠?qū)@個區(qū)域進行寫操作苹祟,但可以被多個進程安全地共享[grep程序代碼]。
系統(tǒng)函數(shù)庫也可以被共享评雌,例如:不管有多少個正在運行的程序要調(diào)用printf函數(shù)树枫,內(nèi)存中只有它的一份副本即可。(這種做法與微軟Windows操作系統(tǒng)中使用的動態(tài)鏈接庫(DLL)機制類似景东,但是更能為復(fù)雜)砂轻。
共享函數(shù)庫的優(yōu)點:
包含可執(zhí)行程序grep的磁盤文件容量比較小,因為它不包含共享函數(shù)庫代碼斤吐。這對一個單獨的程序來說搔涝,算不上大優(yōu)點,但對整個操作系統(tǒng)來說和措,包常用例程提取出來放入(比如說)c語言的標準函數(shù)庫中將節(jié)省大量的磁盤空間庄呈。
注意:
1)并不是進程中所需要的所有東西都是可以共享的,例如:進程使用的變量就與其他進程所使用的截然不同(例如:本例中的 傳遞給grep程序的搜索字符串以變量s的形式出現(xiàn)在每個進程中的數(shù)據(jù)區(qū)中派阱,它們是分離的诬留,通常不能被其他進程讀取。這兩個grep命令所使用的的文件也各不相同贫母,進程通過各自的文件描述符訪問文件)
2)進程有自己的椢亩遥空間,用于保存函數(shù)中的局部變量和控制函數(shù)的調(diào)用和返回颁独。3)進程還有自己的環(huán)境空間彩届,包含專門為這個進程建立的環(huán)境變量。(第4章中putenv和getenv 函數(shù)就用過這些環(huán)境變量)
4)進程還必須維護自己的的程序計數(shù)器誓酒,這個計數(shù)器用來記錄他執(zhí)行到的位置樟蠕,即在執(zhí)行線程中的位置贮聂。(第12章,在使用線程時寨辩,進程可以有不只一個執(zhí)行線程)
5)在linux系統(tǒng)(也包括UNIX系統(tǒng))上吓懈,在目錄/proc中有一組特殊的文件,這些文件允許你“窺視”正在運行的進程的內(nèi)部情況靡狞,就好像這些進程是目錄中的文件一樣(第3章介紹過的/proc 文件系統(tǒng))耻警。
最后:因為Linux和UNIX一樣,喲一個虛擬內(nèi)存系統(tǒng)甸怕,能夠把程序代碼和數(shù)據(jù)內(nèi)存頁面的形式放到硬盤的一個區(qū)域中甘穿,所以Linux可以管理的進程比物理內(nèi)存所能容納的更多得多。
ps:進程的結(jié)構(gòu)這里沒有明細說明梢杭,
(1)一個進程有唯一標示符 (2)進程的函數(shù)共享以及有些不可以共享 (3)繼承的環(huán)境以及計數(shù)器 (4)進程相關(guān)的文件系統(tǒng) (5)進程的虛擬內(nèi)存(其實window也是有的)
Linux怎么樣添加用戶温兼,以及用戶組如何進行查看等等?linux系統(tǒng)的基本操作武契。