資源描述:
《linux內(nèi)核分析之進(jìn)程總結(jié)教學(xué)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、姓名:*********班級(jí):四班學(xué)號(hào):***************Linux內(nèi)核分析之進(jìn)程總結(jié)1.1.1進(jìn)程的概念在Linux系統(tǒng)中,進(jìn)程被賦予了下述特性的含義和特性:一個(gè)進(jìn)程是對(duì)一個(gè)程序的執(zhí)行。一個(gè)進(jìn)程的存在意味著存在一個(gè)task_struct結(jié)構(gòu),它包含著相應(yīng)的進(jìn)程控制信息。一個(gè)進(jìn)程可以生成或消滅其子進(jìn)程。一個(gè)進(jìn)程是獲得和釋放各種系統(tǒng)資源的基本單位。1.1Linux進(jìn)程簡(jiǎn)介1.2進(jìn)程的虛擬地址結(jié)構(gòu)1.2.1管理每個(gè)進(jìn)程中的區(qū)系統(tǒng)設(shè)立了稱為vm_area_struct的數(shù)據(jù)類型,進(jìn)程的每個(gè)區(qū)都對(duì)應(yīng)一個(gè)vm_area_struct
2、結(jié)構(gòu),它主要包括下列內(nèi)容:區(qū)的標(biāo)志位,指明該區(qū)的類型以及是否被鎖住,是否可共享等屬性。缺頁處理程序會(huì)根據(jù)地址所在區(qū)的標(biāo)志位查找缺頁原因,并做相應(yīng)處理。區(qū)的起始地址,結(jié)束地址。共享區(qū)域指針,給出共享區(qū)vm_area_struct鏈表。文件系統(tǒng)指針,指向外存中與該區(qū)對(duì)應(yīng)的數(shù)據(jù)文件。此區(qū)域的操作函數(shù)指針。1.3進(jìn)程的狀態(tài)和狀態(tài)轉(zhuǎn)換1.3.1Linux中的五種狀態(tài)。TASK_RUNNING進(jìn)程處在執(zhí)行或就緒狀態(tài),表示在占有CPU,或者在就緒隊(duì)列中等待調(diào)度,只要調(diào)度到它,就可以投入執(zhí)行。TASK_INTERRUPTIBLE進(jìn)程正在睡眠,但是可以
3、被軟中斷信號(hào)喚醒。TASK_UNINTERRUPTIBLE進(jìn)程正在睡眠,且不可以被軟中斷信號(hào)喚醒。TASK_STOPPED表示進(jìn)程的執(zhí)行被暫停,當(dāng)一個(gè)進(jìn)程受到SIGSTIOP、SIGTSTP、SIGTTIN、SIGTTOU軟中斷信號(hào)后進(jìn)入這個(gè)狀態(tài)。TASK_ZOMBIE進(jìn)程執(zhí)行了系統(tǒng)調(diào)用exit后,進(jìn)入僵死狀態(tài)。1.4進(jìn)程控制1.4.1理解Linux系統(tǒng)進(jìn)程的并發(fā)性下面介紹一下fork的功能與實(shí)現(xiàn)過程。系統(tǒng)調(diào)用fork通過執(zhí)行核心程序fork過程完成的功能是:為子進(jìn)程分配一個(gè)進(jìn)程描述符task_struct結(jié)構(gòu),將父進(jìn)程的進(jìn)程描述符的
4、內(nèi)容復(fù)制到新創(chuàng)建的結(jié)構(gòu)中,并重新設(shè)置那些與父進(jìn)程不同的數(shù)據(jù)成員。為子進(jìn)程分配一個(gè)唯一的進(jìn)程標(biāo)識(shí)符號(hào)pid將父進(jìn)程的地址空間的邏輯副本復(fù)制到子進(jìn)程。復(fù)制父進(jìn)程相聯(lián)的有關(guān)文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)和用戶文件描述符表,這樣子進(jìn)程就繼承了父進(jìn)程的文件系統(tǒng)相關(guān)的信息。復(fù)制軟中斷信號(hào)有關(guān)的數(shù)據(jù)結(jié)構(gòu)。設(shè)備子進(jìn)程的狀態(tài)為TASK_RUNNING,把它加入到就緒隊(duì)列,并啟動(dòng)調(diào)度程序。對(duì)父進(jìn)程返回子進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào),對(duì)子進(jìn)程返回零。1.5進(jìn)程管理Linux是一個(gè)多用戶多工的操作系統(tǒng)。多用戶是指多個(gè)用戶可以在同一時(shí)間使用電腦系統(tǒng);多工是指Linux可以同時(shí)執(zhí)行多個(gè)
5、任務(wù),它可以在還未執(zhí)行完一個(gè)任務(wù)時(shí)又執(zhí)行另一項(xiàng)任務(wù)。Linux系統(tǒng)上所有運(yùn)行的任務(wù)都可以稱之為一個(gè)進(jìn)程,每個(gè)用戶任務(wù)、每個(gè)系統(tǒng)管理守護(hù)進(jìn)程,也都可以稱之為進(jìn)程。Linux用分時(shí)管理方法使所有的任務(wù)共同分享系統(tǒng)資源。我們所關(guān)心的是如何去控制這些進(jìn)程,讓它們能夠很好地為用戶服務(wù)。Linux系統(tǒng)中所有進(jìn)程都是相互聯(lián)系的。除了初始化進(jìn)程外,所有進(jìn)程都有一個(gè)父進(jìn)程。新進(jìn)程不是被創(chuàng)建,而是被復(fù)制,或者從以前的進(jìn)程復(fù)制而來。1.6進(jìn)程調(diào)度1.6.1進(jìn)程調(diào)度涉及的主要問題調(diào)度的時(shí)機(jī)。調(diào)度標(biāo)志設(shè)置。調(diào)度策略與優(yōu)先數(shù)的計(jì)算。調(diào)度的實(shí)現(xiàn)。1.7進(jìn)程通信Li
6、nux中的進(jìn)程通信分為三個(gè)部分:低級(jí)通信、管理通信和進(jìn)程通信IPC(inter-processcommunication)。Linux同時(shí)支持計(jì)算機(jī)間通信(網(wǎng)絡(luò)通信)用TCP/TP協(xié)議并提供了相應(yīng)的系統(tǒng)調(diào)用接口。1.8死鎖1.8.1產(chǎn)生死鎖的條件1、互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。2、請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已經(jīng)獲得的資源保持不放。3、不剝奪條件:進(jìn)程已獲得的資源,在未使用完之前,不能強(qiáng)行剝奪。4、循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。1.8.2死鎖的解決和預(yù)防方法理解了死鎖的原
7、因,尤其是產(chǎn)生死鎖的4個(gè)必要條件,就可以最大可能地避免、預(yù)防和解除死鎖。所以,在系統(tǒng)設(shè)計(jì)、進(jìn)程調(diào)度等方面注意如何不讓這4個(gè)必要條件成立,如何確定資源的合理分配算法,避免進(jìn)程永久占據(jù)系統(tǒng)資源。此外,也要放在進(jìn)程在處于等待狀態(tài)的情況下占用資源,在系統(tǒng)運(yùn)行過程中,對(duì)進(jìn)程發(fā)出的每一個(gè)系統(tǒng)能夠滿足的資源申請(qǐng)進(jìn)行動(dòng)態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,若分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配。因此,對(duì)資源的分配要給予合理的規(guī)劃。1.9Linux下的孤兒進(jìn)程和僵尸進(jìn)程1.9.1孤兒進(jìn)程1.9.2僵尸進(jìn)程1.9.3怎樣產(chǎn)生僵尸進(jìn)程的1.9
8、.4怎么查看僵尸進(jìn)程1.9.5怎樣來清除僵尸進(jìn)程1.10Linux進(jìn)程的層次關(guān)系當(dāng)打開Linux系統(tǒng),LILO(LinuxLOader)找到Linux內(nèi)核把它加載到內(nèi)存。它初始化各種硬件,包括磁盤控制器。然后轉(zhuǎn)到保護(hù)模式