- 相關(guān)推薦
論文:Linux進(jìn)程和線(xiàn)程的基礎與管理
一、進(jìn)程的基本概念
程序是為了完成某種任務(wù)而設計的軟件,比如vi是程序。什么是進(jìn)程呢? 進(jìn)程就是運行中的程序。一個(gè)運行著(zhù)程序,可能有多個(gè)進(jìn)程。比如Web服務(wù)器是Apache服務(wù)器,當管理員啟動(dòng)服務(wù)后,可能會(huì )有好多人來(lái)訪(fǎng)問(wèn),也就是說(shuō)許多用戶(hù)同時(shí)請求httpd,Apache服務(wù)器將會(huì )創(chuàng )建多個(gè)httpd進(jìn)程來(lái)對其進(jìn)行服務(wù)。
首先我們看看進(jìn)程的定義。進(jìn)程是一個(gè)具有獨立功能的程序關(guān)于某個(gè)數據集合的一次可以并發(fā)執行的運行活動(dòng),是處于活動(dòng)狀態(tài)的計算機程序。進(jìn)程作為構成系統的基本細胞,不僅是系統內部獨立運行的實(shí)體,而且是獨立競爭資源的基本實(shí)體。了解進(jìn)程的本質(zhì),對于理解、描述和設計操作系統有著(zhù)極為重要的意義。了解進(jìn)程的活動(dòng)、狀態(tài),也有利于編制復雜程序。
二、進(jìn)程的屬性
進(jìn)程的定義:一個(gè)進(jìn)程是一個(gè)程序的一次執行的過(guò)程;程序是靜態(tài)的,它是一些保存在磁盤(pán)上的可執行的代碼和數據集合;進(jìn)程是一個(gè)動(dòng)態(tài)的概念,它是Linux系統的基本的調度單位。
一個(gè)進(jìn)程由如下元素組成:
程序讀取的上下文,它表示程序讀取執行的狀態(tài)。 程序當前執行的目錄。 程序服務(wù)的文件和目錄。 程序訪(fǎng)問(wèn)的權限。 內存和其他分配給進(jìn)程的系統資源。
Linux進(jìn)程中最知名的屬性就是它的進(jìn)程號(Process Idenity Number,PID)和它的父進(jìn)程號(Parent Process ID,PPID)。PID、PPID都是非零正整數。一個(gè)PID唯一地標識一個(gè)進(jìn)程。一個(gè)進(jìn)程創(chuàng )建新進(jìn)程稱(chēng)為創(chuàng )建了子進(jìn)程(Child Process)。相反地,創(chuàng )建子進(jìn)程的進(jìn)程稱(chēng)為父進(jìn)程。所有進(jìn)程追溯其祖先最終都會(huì )落到進(jìn)號為1的進(jìn)程身上,這個(gè)進(jìn)程叫做init進(jìn)程,是內核自舉后第一個(gè)啟動(dòng)的進(jìn)程。init進(jìn)程扮演終結父進(jìn)程的角色。因為init進(jìn)程永遠不會(huì )終止,所以系統總是可以確信它的存在,并在必要的時(shí)候以它為參照。如果某個(gè)進(jìn)程它在衍生出來(lái)的全部子進(jìn)程結束之前被終止,就會(huì )出現必須以init為參照的情況。此時(shí)那些失去了父進(jìn)程的子進(jìn)程就都會(huì )以init作為它們的父進(jìn)程。如果執行一下ps-af命令,可以列出許多父進(jìn)程ID為1的進(jìn)程來(lái)。Linux提供了一條pstree命令,允許用戶(hù)查看系統內正在運行的各個(gè)進(jìn)程之間的繼承關(guān)系。直接在命令行中輸入pstree即可,程序會(huì )以樹(shù)狀結構方式列出系統中正在運行的各進(jìn)程之間的繼承關(guān)系。
三、理解Linux下進(jìn)程的結構
Linux中一個(gè)進(jìn)程在內存里有三部分數據,就是“數據段”、“堆棧段”、“代碼段”;贗386兼容的中央處理器,都有上述三種段寄存器,以方便操作系統的運行,如下圖所示。
代碼段
數據段
堆棧段
代碼段是存放了程序代碼的數據,假如機器中有數個(gè)進(jìn)程運行相同的一個(gè)程序,那么它們就可以使用同一個(gè)代碼段。而數據段則存放程序的全局變量、常數及動(dòng)態(tài)數據分配的數據空間。堆棧段存放的就是子進(jìn)程的返回地址、子程序的參數及程序的局部變量。堆棧段包含在進(jìn)程控制塊PCB(Process Control Block)中。PCB處于進(jìn)程核心堆棧的底部,不需要額外分配空間。
四、進(jìn)程狀態(tài)
現在我們來(lái)看看,進(jìn)程在生存周期中的各種狀態(tài)及狀態(tài)的轉換。下面是Linux系統的進(jìn)程狀態(tài)模型的各種狀態(tài)。
用戶(hù)狀態(tài):進(jìn)程在用戶(hù)狀態(tài)下運行的狀態(tài)。 內核狀態(tài):進(jìn)程在內核狀態(tài)下運行的狀態(tài)。 內存中就緒:進(jìn)程沒(méi)有執行,但處于就緒狀態(tài),只要內核調度它,就可以執行。 內存中睡眠:進(jìn)程正在睡眠并且進(jìn)程存儲在內存中,沒(méi)有被交換到SWAP設備。 就緒且換出:進(jìn)程處于就緒狀態(tài),但是必須把它換入內存,內核才能再次調度它運行。 睡眠且換出:進(jìn)程正在睡眠,且被換出內存。 被搶先:進(jìn)程從內核狀態(tài)返回用戶(hù)狀態(tài)時(shí),內核搶先于它做了上下文切換,調度了另一個(gè)進(jìn)程。原先這個(gè)進(jìn)程就處于被搶先狀態(tài)。 僵死狀態(tài)(zombie):進(jìn)程調用exit結束,進(jìn)程不再存在,但在進(jìn)程表項中仍有記錄,該記錄可由父進(jìn)程收集。
現在我們從進(jìn)程的創(chuàng )建到退出來(lái)看看進(jìn)程的狀態(tài)轉化。需要說(shuō)明的是,進(jìn)程在它的生命周期里并不一定要經(jīng)歷所有狀態(tài)。
五、Linux進(jìn)程的創(chuàng )建
fork函數在Linux下產(chǎn)生新的進(jìn)程的系統調用,這個(gè)函數名是英文中“分叉”的意思。為什么取這個(gè)名字呢? 因為一個(gè)進(jìn)程在運行中,如果使用了fork,就產(chǎn)生了另一個(gè)進(jìn)程,于是進(jìn)程就“分叉”了,所以這個(gè)名字取得很形象。fork的語(yǔ)法如下所示:
#include
#include
pid_t fork();
在Linux網(wǎng)絡(luò )編程中經(jīng)常用到fork()系統調用。例如在一個(gè)客戶(hù)機/Web服務(wù)器構建的網(wǎng)絡(luò )環(huán)境中,Web服務(wù)器往往可以滿(mǎn)足許多客戶(hù)端的請求。如果一個(gè)客戶(hù)機要訪(fǎng)問(wèn)Web服務(wù)器,需要發(fā)送一個(gè)請求,此時(shí)由服務(wù)器生成一個(gè)父進(jìn)程,然后父進(jìn)程通過(guò)fork()系統調用產(chǎn)生一個(gè)子進(jìn)程,此時(shí)客戶(hù)機的請求由子進(jìn)程完成。父進(jìn)程可以再度回到等待狀態(tài)不斷服務(wù)其他客戶(hù)端。原理如下圖所示。
有一個(gè)更簡(jiǎn)單的執行其他程序的函數system,參數string傳遞給一個(gè)命令解釋器(一般為sh)執行,即string被解釋為一條命令,由sh執行該命令。若參數string為一個(gè)空指針,則檢查命令解釋器是否存在。該命令可以和同命令行下的命令形式相同,但由于命令作為一個(gè)參數放在系統調用中,應注意編譯時(shí)對特殊意義字符的處理。命令的查找是按PATH環(huán)境變量的定義執行的。命令所生成的后果一般不會(huì )對父進(jìn)程編程造成影響。返回值:當參數為空指針時(shí),只有當命令解釋器有效時(shí)返回值為非零。若參數不為空指針,返回值為該命令的返回狀態(tài)(同waitpid())的返回值。命令無(wú)效或語(yǔ)法錯誤則返回非零值,所執行的命令被終止。其他情況則返回-1.它是一個(gè)較高層的函數,實(shí)際上相當于在shell下執行一條命令,除了system之外,系統調用exec來(lái)執行一個(gè)可執行文件,來(lái)代替當前進(jìn)程的執行映像。系統調用exit的功能是終止發(fā)出調用的進(jìn)程。sleep函數調用用來(lái)指定進(jìn)程掛起的秒數。wait函數族用來(lái)等待和控制進(jìn)程。poppen函數和system函數類(lèi)似,區別是它用管道方式處理輸出。
父進(jìn)程和子進(jìn)程的關(guān)系是管理和被管理的關(guān)系,當父進(jìn)程終止時(shí),子進(jìn)程也隨之而終止。但子進(jìn)程終止時(shí),父進(jìn)程并不一定終止。比如httpd服務(wù)器運行時(shí),我們可以殺掉其子進(jìn)程,父進(jìn)程并不會(huì )因為子進(jìn)程的終止而終止。
六、進(jìn)程的管理
1、啟動(dòng)進(jìn)程
輸入需要運行的程序的程序名,執行一個(gè)程序,其實(shí)也就是啟動(dòng)了一個(gè)進(jìn)程。在Linux系統中,每個(gè)進(jìn)程都具有一個(gè)進(jìn)程號(PID),用于系統識別和調度進(jìn)程。啟動(dòng)一個(gè)進(jìn)程有兩個(gè)主要途徑:手工啟動(dòng)和調度啟動(dòng),后者是事先進(jìn)行設置,根據用戶(hù)要求自動(dòng)啟動(dòng)。由用戶(hù)輸入命令,直接啟動(dòng)一個(gè)進(jìn)程便是手工啟動(dòng)進(jìn)程。但手工啟動(dòng)進(jìn)程又可以分為很多種,根據啟動(dòng)的進(jìn)程類(lèi)型不同;性質(zhì)不同,實(shí)際結果也不一樣。
。1)前臺啟動(dòng)
前臺啟動(dòng)是手工啟動(dòng)一個(gè)進(jìn)程的最常用的方式。用戶(hù)鍵入一個(gè)命令“df”,就已經(jīng)啟動(dòng)了一個(gè)進(jìn)程,而且是一個(gè)前臺的進(jìn)程。這時(shí)候系統其實(shí)已經(jīng)處于多進(jìn)程狀態(tài)。有許多運行在后臺的、系統啟動(dòng)時(shí)就已經(jīng)自動(dòng)啟動(dòng)的進(jìn)程正在悄悄運行著(zhù)。有的用戶(hù)在鍵入“df”命令以后趕緊使用“ps -x”查看,卻沒(méi)有看到df進(jìn)程,會(huì )覺(jué)得很奇怪。其實(shí)這里因為df這個(gè)進(jìn)程結束太快,使用ps查看時(shí)該進(jìn)程已經(jīng)執行結束了。如果啟動(dòng)一個(gè)比較耗時(shí)的進(jìn)程,例如在根命令下運行:find,然后使用ps aux查看,就會(huì )看到在里面有一個(gè)find進(jìn)程。
。2)后臺啟動(dòng)
直接從后臺手工啟動(dòng)一個(gè)進(jìn)程用得比較小一些,除非是該進(jìn)程甚為耗時(shí),且用戶(hù)也不急著(zhù)需要結果。假設用戶(hù)要啟動(dòng)一個(gè)需要長(cháng)時(shí)間運行的格式化文本文件的進(jìn)程,為了不使整個(gè)shell在格式化過(guò)程中都處于“癱瘓”狀態(tài),從后臺啟動(dòng)這個(gè)進(jìn)程是明智的選擇。
2、進(jìn)程調度
當需要中斷一個(gè)前臺進(jìn)程的時(shí)候,通常使用Ctrl+C組合鍵。但是對于一個(gè)后臺進(jìn)程,就不是一個(gè)組合鍵所能解決的了,這時(shí)就必須使用kill命令。該命令可以終止后臺進(jìn)程。至于終止后臺進(jìn)程的原因有很多,或許是該進(jìn)程占用的CPU時(shí)間過(guò)多;或許是該進(jìn)程已經(jīng)掛死。這種情況是經(jīng)常發(fā)生的。kill命令的工作原理是:向Linux系統的內核發(fā)送一個(gè)系統操作信號和某個(gè)程序的進(jìn)程標識號,然后系統內核就可以對進(jìn)程標識號指定的進(jìn)程進(jìn)行操作。
七、Linux的第一個(gè)進(jìn)程:init
init是Linux系統執行的第一個(gè)進(jìn)程,進(jìn)程ID為1,是系統所有進(jìn)程的起點(diǎn),主要用來(lái)執行一些開(kāi)機初始化腳本和監視進(jìn)程。Linux系統在完成核內引導以后就開(kāi)始運行init程序,init程序需要讀取配置文件/etc/inittab。Inittab是一個(gè)不可執行的文本文件,它由若干行命令所組成。
在RHEL 4系統中,inittab配置文件的內容如下所示:
#
#inittab
#
#
#author
#
#Default runlevel.the runlevels used by rhs are:
#0 - halt (do not set initdefault to this)
#1 - single user mode
#2 - multiuser,without nfs (the same as 3, if you do not haver networking)
#3 - full multiuser mode
#4 - unused
#5 - X11
#6 - reboot (do not set initdefault to this)
#
//表示當前缺省運行級別為5,啟動(dòng)系統進(jìn)入圖形化界面
id:5:initdefault:
//啟動(dòng)時(shí)自動(dòng)執行/etc/rc.d/rc.sysinit腳本
#system initialization.
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
//當運行級別為5時(shí),以5為參數運行/etc/rc.d/rc腳本,init將等待其返回
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
//在啟動(dòng)過(guò)程中允許按[ctrl-alt-]重啟系統
#trap ctrl-alt-
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#
..................................
#
//在運行級別2、3、4、5以上ttyX為參數執行/sbin/mingetty程序,打開(kāi)ttyX終端用于用戶(hù)登錄,如果進(jìn)程退出則再次運行mingetty程序
#run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
//在級別5上運行xdm程序,提供xdm圖形方式登錄界面,并在退出時(shí)重新執行
x:5:respawn:/etc/x11/prefdm -nodaemon
#run xdm in runleverl 5
Inittab配置文件每行的基本格式如下。
id:runlevels:action:procees
其中某些部分可以為空,下面我們逐一介紹。
1、id
1~2個(gè)字符,配置行的惟一標識,在配置文件中不能重復。
2、runlevels
配置行適用的運行級別,在這里可填入多個(gè)運行級別,比如12345或者35等。
Linux有7個(gè)運行級別:
0:關(guān)機
1:?jiǎn)斡脩?hù)字符界面
2:不具備網(wǎng)絡(luò )文件系統(NFS)功能的多用戶(hù)字符界面
3:具有網(wǎng)絡(luò )功能的多用戶(hù)字符界面
4:保留不用
5:具有網(wǎng)絡(luò )功能的圖形用戶(hù)界面
6:重新啟動(dòng)系統
3、action
init有如下幾種行為,如下表所示。
init行為
行為
描述
respawn
啟動(dòng)并監視第4項指定的process,若process終止則重啟它
wait
執行第4項指定的process,并等待它執行完備
once
執行第4項指定的process
boot
不論在哪個(gè)執行等級,系統啟動(dòng)時(shí)都會(huì )運行第4項指定的process
bootwait
不論在哪個(gè)執行等級,系統啟動(dòng)時(shí)都會(huì )運行第4項指定的process,且一直等它執行完備
off
關(guān)閉任何動(dòng)作,相當于忽略該配置行
ondemand
進(jìn)入ondemand執行等級時(shí),執行第4項指定的process
initdefault
系統啟動(dòng)后進(jìn)入的執行等級,該行不需要指定process
sysinit
不論在哪個(gè)執行等級,系統會(huì )在執行boot及bootwait之前執行第4項指定的process
powerwait
當系統的供電不足時(shí)執行第4項指定的process,且一直等它執行完備
powerfailnow
當系統的供電嚴重不足時(shí)執行第4項指定的process
ctrlaltdel
當用戶(hù)按下ctrl+alt+del 時(shí)執行的操作
kbrequest
當用戶(hù)按下特殊的組合鍵時(shí)執行第4項指定的process,此組合鍵需在keymaps文件定義
4、process
Process為init執行的進(jìn)程,這些進(jìn)程都保存在目錄/etc/rc.d/rcX中,其中的X代表運行級別,rc程序接收X參數,然后運行/etc/rc.d/rc.X下面的程序。使用如下命令可以查看/etc/rc.d目錄內容。
#ls –l /etc/rc.d/
total 112
drwxr-xr-x 2 root root 4096 3/15 14:44 init.d
-rxwr-xr-x 1 root root 2352 2004-3-17 rc
drwxr-xr-x 2 root root 4096 3/15 14:44 rc0.d
drwxr-xr-x 2 root root 4096 3/15 14:44 rc1.d
drwxr-xr-x 2 root root 4096 3/15 14:44 rc2.d
drwxr-xr-x 2 root root 4096 3/15 14:44 rc3.d
drwxr-xr-x 2 root root 4096 3/15 14:44 rc4.d
drwxr-xr-x 2 root root 4096 3/15 14:44 rc5.d
drwxr-xr-x 2 root root 4096 3/15 14:44 rc6.d
-rxwr-xr-x 1 root root 2200 2004-3-17 rc.local
-rxwr-xr-x 1 root root 2352 2004-3-17 rc.sysinit
…………
使用如下命令查看/etc/rc.d/rc5.d的內容。
#ls –l /etc/rc.d/rc5.d
這些文件都是符號鏈接,以S打頭的標識啟動(dòng)該程序,而以K打頭的標識終止該程序,后面的數字標識執行順序,越小越先執行,剩下的標識程序名。系統啟動(dòng)或者切換到該運行級別時(shí)會(huì )執行以S打頭的程序,系統切換到該運行級別時(shí)會(huì )執行以K打頭的程序。
這個(gè)目錄下的程序可通過(guò)chkconfig程序進(jìn)行管理,當然這個(gè)目錄下的程序需要符合一定規范,如果了解shell編程,可以查看這些符號鏈接所指向的程序的源碼。
init也是一個(gè)進(jìn)程,和普通的進(jìn)程具有一樣的屬性。比如修改了/etc/inittab,想讓修改馬上生效,可通過(guò)運行“kill-SIGHUP 1”來(lái)實(shí)現,也可通過(guò)運行“init q”來(lái)實(shí)現。
八、Linux的線(xiàn)程簡(jiǎn)介
1、Linux線(xiàn)程的定義
線(xiàn)程(thread)是在共享內存空間中并發(fā)的多道執行路徑,它們共享一個(gè)進(jìn)程的資源,如文件描述和信號處理。在兩個(gè)普通進(jìn)程(非線(xiàn)程)間進(jìn)行切換時(shí),內核準備從一個(gè)進(jìn)程的上下文切換到另一個(gè)進(jìn)程的上下文要花費很大的開(kāi)銷(xiāo)。這里上下文切換的主要任務(wù)是保存老進(jìn)程CPU狀態(tài)并加載新進(jìn)程的保存狀態(tài),用新進(jìn)程的內存映像替換進(jìn)程的內存映像。線(xiàn)程允許你的進(jìn)程在幾個(gè)正在運行的任務(wù)之間進(jìn)行切換,而不必執行前面提到的完整的上下文。另外本文介紹的線(xiàn)程是針對POSIX線(xiàn)程的,也就是Pthread。也因為L(cháng)inux對它的支持最好,相對進(jìn)程而言,線(xiàn)程是一個(gè)更加接近于執行體的概念,它可以與同進(jìn)程中的其他線(xiàn)程共享數據,但擁有自己的?臻g,擁有獨立的執行序列。在串行程序基礎上引入線(xiàn)程和進(jìn)程是為了提高程序的并發(fā)度,從而提高程序運行效率和響應時(shí)間。也可以將線(xiàn)程和輕量級進(jìn)程(LWP)視為等同的,但其實(shí)在不同的系統/實(shí)現中有不同的解釋?zhuān)琇WP更恰當的解釋為一個(gè)虛擬CPU或內核的線(xiàn)程。它可以幫助用戶(hù)態(tài)線(xiàn)程實(shí)現一些特殊的功能。Pthread是一種標準化模型,它用來(lái)把一個(gè)程序分成一組能夠同時(shí)執行的任務(wù)。
2、什么場(chǎng)合使用Pthread,即線(xiàn)程
。1)在返回前阻塞的I/O任務(wù)能夠使用一個(gè)線(xiàn)程處理I/O,同時(shí)繼續執行其他處理任務(wù)。
。2)在有一個(gè)或多個(gè)任務(wù)受不確定性事件,比如網(wǎng)絡(luò )通信的可獲得性影響的場(chǎng)合,能夠使用線(xiàn)程處理這些異步事件,同時(shí)繼續執行正常的處理。
。3)如果某些程序功能比其他的功能更重要,可以使用線(xiàn)程以保證所有功能都出現,但那些時(shí)間密集型的功能具有更高的優(yōu)先級。
以上三點(diǎn)可以歸納為:在檢查程序中潛在的并行性時(shí),也就是說(shuō)在要找出能夠同時(shí)執行任務(wù)時(shí)使用Pthread。上面已經(jīng)介紹了,Linux進(jìn)程模型提供了執行多個(gè)進(jìn)程的能力,已經(jīng)可以進(jìn)行并行或并發(fā)編程,可是純種能夠讓你對多個(gè)任務(wù)的控制程序更好、使用資源更少,因為一個(gè)單一的資源,如全局變量,可以由多個(gè)線(xiàn)程共享。而且,在擁有多個(gè)處理器的系統上,多線(xiàn)程應用會(huì )比用多個(gè)進(jìn)程實(shí)現的應用執行速度更快。
3、Linux進(jìn)程和線(xiàn)程的發(fā)展
1999年1月發(fā)布的Linux 2.2內核中,進(jìn)程是通過(guò)系統調用fork創(chuàng )建的,新的進(jìn)程是原來(lái)進(jìn)程的子進(jìn)程。需要說(shuō)明的是,在2.2.x版本中,不存在真正意義上的線(xiàn)程(thread)。Linux中常用的線(xiàn)程Pthread實(shí)際上是通過(guò)進(jìn)程來(lái)模擬的。也就是說(shuō)Linux中的線(xiàn)程也是通過(guò)fork創(chuàng )建的,是“輕”進(jìn)程。Linux 2.2只默認允許4096個(gè)進(jìn)程/線(xiàn)程同時(shí)運行。高端系統同時(shí)要服務(wù)上千個(gè)用戶(hù),所以這顯然是一個(gè)問(wèn)題,它一度是阻礙Linux進(jìn)入企業(yè)級市場(chǎng)的一大因素。
2001年1月發(fā)布的Linux 2.4內核消除了這個(gè)限制,并且允許在系統運行中動(dòng)態(tài)調整進(jìn)程數上限。因此,進(jìn)程數現在只受制于物理內存的多少。在高端服務(wù)器上,即使安裝了512MB內存,現在也能輕而易舉地同時(shí)支持1萬(wàn)6千個(gè)進(jìn)程。
2003年12月發(fā)布的2.6內核,進(jìn)程調度經(jīng)過(guò)重新編寫(xiě),去掉了以前版本中效率不高的算法。以前,為了決定下一步要運行哪一個(gè)任務(wù),進(jìn)程調度程序要查看每一個(gè)準備好的任務(wù),并且經(jīng)過(guò)計算機來(lái)決定哪一個(gè)任務(wù)相對來(lái)更為重要。進(jìn)程標識號(PID)的數目也從32000升到10億。內核內部的大改變之一就是Linux的線(xiàn)程框架被重寫(xiě),以使NPTL(Native POSIX Thread Library)可以運行于其上。對于運行負荷繁重的線(xiàn)程應用的Pentium Pro及更先進(jìn)的處理器而言,這是一個(gè)主要的性能提升,也是企業(yè)級應用中的很多高端系統一直以來(lái)所期待的。線(xiàn)程框架的改變包含Linux線(xiàn)程空間中的許多新的概念,包括線(xiàn)程組、線(xiàn)程各自的本地存儲區、POSIX風(fēng)格信號,以及其他改變。改進(jìn)后的多線(xiàn)程和內存管理技術(shù)有助于更好地運行大型多媒體應用軟件。
4、總結
線(xiàn)程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線(xiàn)程執行開(kāi)銷(xiāo)小,但不利于資源的管理和保護;而進(jìn)程正相反。同時(shí),線(xiàn)程適合于在對稱(chēng)處理器的計算機上運行,而進(jìn)程則可以跨機器遷移。另外,進(jìn)程可以擁有資源,線(xiàn)程共享進(jìn)程擁有的資源。進(jìn)程間的切換必須保存在進(jìn)程控制塊PCB(Process Control Block)中。同一個(gè)進(jìn)程的多個(gè)線(xiàn)程間的切換不用那么麻煩。最后一個(gè)實(shí)例來(lái)作為本文的結束:當你在一臺Linux PC上打開(kāi)兩個(gè)OICQ,每一個(gè)OICQ是一個(gè)進(jìn)程;而當你在一個(gè)OICQ上和多人聊天時(shí),每一個(gè)聊天窗口就是一個(gè)線(xiàn)程。
【論文:Linux進(jìn)程和線(xiàn)程的基礎與管理】相關(guān)文章:
管理學(xué)基礎論文02-18
舞蹈基礎論文03-15
linux系統論文參考文獻11-14
畢業(yè)論文寫(xiě)作基礎11-24
基礎護理學(xué)論文07-05
基礎護理學(xué)論文05-16
和諧社會(huì )進(jìn)程中的政府危機管理03-18
渠道管理背景下?tīng)I運資金管理的意義和優(yōu)化論文02-15
夯實(shí)基礎 強化管理03-22