關(guān)于Linux進(jìn)程管理.ppt_第1頁(yè)
關(guān)于Linux進(jìn)程管理.ppt_第2頁(yè)
關(guān)于Linux進(jìn)程管理.ppt_第3頁(yè)
關(guān)于Linux進(jìn)程管理.ppt_第4頁(yè)
關(guān)于Linux進(jìn)程管理.ppt_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Linux 進(jìn)程管理 Email:SummaryLinux進(jìn)程概述Linux進(jìn)程的狀態(tài)和標(biāo)識(shí)Linux進(jìn)程調(diào)度Linux進(jìn)程的創(chuàng)建撤消Linux進(jìn)程間的通信機(jī)制Linux 信號(hào)量機(jī)制Linux進(jìn)程概述Linux進(jìn)程組成代碼段:數(shù)據(jù)段:PCBLinux進(jìn)程PCBLinux的PCB是一個(gè)名為task_struct的數(shù)據(jù)結(jié)構(gòu),稱為任務(wù)結(jié)構(gòu)體。它包含linux進(jìn)程的所有信息,是linux的核心數(shù)據(jù)結(jié)構(gòu)。task_struct 結(jié)構(gòu)定義在include/linux/sched.hPCB:Linux進(jìn)程概述task_struct的主要內(nèi)容:進(jìn)程狀態(tài)和標(biāo)志進(jìn)程標(biāo)識(shí)進(jìn)程控制塊6進(jìn)程的族親關(guān)系進(jìn)程控制塊7進(jìn)程間

2、鏈接信息進(jìn)程調(diào)度信息進(jìn)程控制塊8進(jìn)程的時(shí)間信息 進(jìn)程的虛存信息進(jìn)程控制塊9進(jìn)程的文件信息 與進(jìn)程間通信有關(guān)的信息進(jìn)程控制塊10其它信息 進(jìn)程控制塊11Linux進(jìn)程概述向量表task數(shù)組 因?yàn)橄到y(tǒng)中同時(shí)會(huì)有多個(gè)進(jìn)程在活動(dòng),為了方便管理,系統(tǒng)必須能夠很容易地找到任一個(gè)進(jìn)程的結(jié)構(gòu)。向量表task是一個(gè)指針數(shù)組,其中的每一個(gè)指針指向系統(tǒng)中的一個(gè)task_struct數(shù)據(jù)結(jié)構(gòu)。 在linux內(nèi)核源代碼kernel/sched.c中task數(shù)組的定義如下:Struct task_struct *taskNR_TASKS=&init_task;可以看到:1、Task數(shù)組的大小NR_TASKS(/inclu

3、de/linux/task.h)決定了系統(tǒng)中容納進(jìn)程最大數(shù)量,它的默認(rèn)值被定義為512。2、task數(shù)組的第一個(gè)指針指向一個(gè)名字為init_task的結(jié)構(gòu)體,它是系統(tǒng)初始化進(jìn)程init的任務(wù)結(jié)構(gòu)體。 Task_struct的管理Linux進(jìn)程概述雙向循環(huán)鏈表為了加快訪問(wèn)任務(wù)結(jié)構(gòu)體的速度,Linux把系統(tǒng)中所有的任務(wù)結(jié)構(gòu)體相互連接成一個(gè)雙向循環(huán)鏈表。 Task_struct的管理Struct task_struct *next_task;/*指向后一個(gè)任務(wù)結(jié)構(gòu)體的指針*/Struct task_struct *prev_task;/*指向前一個(gè)任務(wù)結(jié)構(gòu)體的指針*/ 當(dāng)創(chuàng)建新的進(jìn)程時(shí),要從系統(tǒng)內(nèi)存

4、中分配一個(gè)新的task_struct結(jié)構(gòu),并將其加入到task向量表中。撤消進(jìn)程時(shí),則執(zhí)行反操作。宏定義:SET_LINKS:插入一個(gè)任務(wù)結(jié)構(gòu)體REMOVE_LINKS:刪除一個(gè)任務(wù)結(jié)構(gòu)體For_each_task:遍歷所有任務(wù)結(jié)構(gòu)體 Linux進(jìn)程概述nr_tasks為了記錄系統(tǒng)中實(shí)際存在的進(jìn)程數(shù),系統(tǒng)定義了一個(gè)全局變量,其值隨系統(tǒng)中存在的進(jìn)程數(shù)目而變化。在kernel/fork.c中,它的定義及初始化如下:Int nr_tasks =1;Task_struct的管理Linux進(jìn)程概述Task_struct的管理Linux進(jìn)程概述Linux進(jìn)程在處理機(jī)上的執(zhí)行狀態(tài)在Linux系統(tǒng)中,用戶不能

5、直接訪問(wèn)系統(tǒng)資源,如處理機(jī)、寄存器、存儲(chǔ)器和各種外圍設(shè)備。因此提供了兩種不同指令:為了區(qū)分處理機(jī)在執(zhí)行那種指令,通常將處理機(jī)的執(zhí)行狀態(tài)又分為兩種:一般指令:供用戶和系統(tǒng)編程使用,不能直接訪問(wèn)系統(tǒng)資源;特權(quán)指令:供操作系統(tǒng)使用,可以直接訪問(wèn)和控制系統(tǒng)資源;管態(tài)(內(nèi)核態(tài)、系統(tǒng))目態(tài)(用戶態(tài)) Linux進(jìn)程概述進(jìn)程空間和系統(tǒng)空間 進(jìn)程的虛存空間內(nèi)核代碼內(nèi)核數(shù)據(jù)區(qū)程序代碼進(jìn)程數(shù)據(jù)進(jìn)程堆棧系統(tǒng)數(shù)據(jù)Task_struct內(nèi)核堆棧系統(tǒng)空間進(jìn)程空間正文段用戶數(shù)據(jù)段的系統(tǒng)數(shù)據(jù)段Linux進(jìn)程的狀態(tài)和標(biāo)識(shí)Linux進(jìn)程的狀態(tài)(5種)每個(gè)進(jìn)程在系統(tǒng)中所處的狀態(tài)記錄在它的任務(wù)結(jié)構(gòu)體的成員項(xiàng)state中。#defin

6、e TASK_RUNNING 0 可運(yùn)行態(tài)(執(zhí)行、就緒)#define TASK_INTERRUPTIBLE 1 可中斷的等待態(tài)#define TASK_UNINTERRUPTIBLE 2 不可中斷的等待態(tài)#define TASK_ZOMBLE 3 僵死態(tài)#define TASK_STOPPED 4 暫停態(tài)/include/linux/sched.hLinux進(jìn)程的狀態(tài)和標(biāo)識(shí)Linux進(jìn)程的狀態(tài)運(yùn)行態(tài):該狀態(tài)進(jìn)程稱為當(dāng)前進(jìn)程(current process) 實(shí)際上linux并沒(méi)有該狀態(tài),而是將其歸結(jié)在可運(yùn)行態(tài)。系統(tǒng)中設(shè)置全局指針變量current,指向當(dāng)前進(jìn)程??蛇\(yùn)行態(tài)又可細(xì)分為運(yùn)行態(tài)(執(zhí)行

7、)、可運(yùn)行態(tài)(就緒):可運(yùn)行態(tài) Linux中把所有處于運(yùn)行、就緒狀態(tài)的進(jìn)程鏈接成一個(gè)雙向鏈表,稱為可運(yùn)行隊(duì)列(run_queue)。使用任務(wù)結(jié)構(gòu)體中的兩個(gè)指針:Struct task_struct *next_run;/*指向后一個(gè)任務(wù)結(jié)構(gòu)體的指針*/Struct task_struct *prev_run;/*指向前一個(gè)任務(wù)結(jié)構(gòu)體的指針*/該鏈表的首結(jié)點(diǎn)為init_task。系統(tǒng)設(shè)置全局變量nr_running記錄處于運(yùn)行、就緒態(tài)的進(jìn)程數(shù)。Linux進(jìn)程的狀態(tài)和標(biāo)識(shí)等待態(tài)(wait)阻塞在linux中將該狀態(tài)進(jìn)一步劃分為:可中斷的等待態(tài)(interruptible):該狀態(tài)的進(jìn)程可以由信號(hào)(

8、signal)解除其等待態(tài)。不可中斷的等待狀態(tài)(uninterruptible):該狀態(tài)的進(jìn)程,一般都是直接或間接在等待硬件條件,只能用特定的方式來(lái)解除其等待狀態(tài),如使用wakeup()。Linux進(jìn)程的狀態(tài)處于等待態(tài)的進(jìn)程根據(jù)其等待的事件排在不同的等待隊(duì)列中。Linux進(jìn)程的狀態(tài)和標(biāo)識(shí)暫停態(tài)(stopped):進(jìn)程由于需要接受某種特殊處理而暫時(shí)停止運(yùn)行所處的狀態(tài)。通常,進(jìn)程在接受到外部進(jìn)程的某個(gè)信號(hào)(SIGSTOP、SIGSTP、SIGTTOU)而進(jìn)入暫停態(tài)。通常正在接受調(diào)試的進(jìn)程就處于暫停態(tài)。僵死態(tài)(zombie):進(jìn)程的運(yùn)行已經(jīng)結(jié)束,但是由于某種原因它的進(jìn)程結(jié)構(gòu)體仍在系統(tǒng)中。Linux進(jìn)程的狀態(tài)Linux進(jìn)程的狀態(tài)和標(biāo)識(shí)Linux進(jìn)程的狀態(tài)轉(zhuǎn)換Linux進(jìn)程調(diào)度Linux系統(tǒng)是一個(gè)同時(shí)具有分時(shí)和實(shí)時(shí)特性的操作系統(tǒng)。 linux在進(jìn)程調(diào)度中采用的是可搶占調(diào)度方式: 在分時(shí)特性中為了使進(jìn)程得到平均的處理機(jī)使用時(shí)間而采用時(shí)間片輪轉(zhuǎn)法(內(nèi)核) 在實(shí)時(shí)特性中,對(duì)于當(dāng)前運(yùn)行的進(jìn)程而言,當(dāng)有更緊急的進(jìn)程到來(lái)時(shí),系統(tǒng)剝奪當(dāng)前進(jìn)程的運(yùn)行,而把處理機(jī)分配給緊急進(jìn)程。Linux中的進(jìn)程分為普通進(jìn)程和實(shí)時(shí)進(jìn)程。實(shí)時(shí)進(jìn)程的優(yōu)先級(jí)高于普通進(jìn)程。對(duì)實(shí)時(shí)進(jìn)程和普通進(jìn)程采用不同的調(diào)度策略。 Linux進(jìn)程調(diào)度Linux進(jìn)程 調(diào)度策略#define SCHED_NORMAL 0 普通進(jìn)程的時(shí)間片輪轉(zhuǎn)算法 (c

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論