国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

基于Linux操作系統(tǒng)下的進(jìn)程管理分析

2022-08-29 16:01 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

進(jìn)程

1.進(jìn)程是什么

 1.1概念

  計(jì)算機(jī)上所有可運(yùn)行的軟件,通常也包括操作系統(tǒng),被組織成若干順序進(jìn)程 (sequential process),簡(jiǎn)稱(chēng)進(jìn)程 (process)。

  一個(gè)進(jìn)程就是一個(gè)正在執(zhí)行程序的實(shí)例,包括程序設(shè)計(jì)器、寄存器和變量的當(dāng)前值。一個(gè)進(jìn)程是某種類(lèi)型的一種活動(dòng),它有程序、輸入、輸出以及狀態(tài)。單個(gè)處理器可以被若干進(jìn)程共享,它使用某種調(diào)度算法決定何時(shí)停止一個(gè)進(jìn)程的工作,并轉(zhuǎn)而為了另一個(gè)進(jìn)程服務(wù)功能。

2.進(jìn)程如何組織

 2.1進(jìn)程控制塊(PCB)

  Linux系統(tǒng)中主要的活動(dòng)實(shí)體就是進(jìn)程。

  每個(gè)進(jìn)程執(zhí)行一段獨(dú)立的程序并且在進(jìn)程初始化的時(shí)候擁有一個(gè)獨(dú)立的控制線程。換句話說(shuō),每一個(gè)進(jìn)程都擁有一個(gè)獨(dú)立的程序計(jì)數(shù)器,用這個(gè)這個(gè)程序計(jì)數(shù)器可以追蹤下一條將要被執(zhí)行的指令。

  所有的進(jìn)程都被放在一個(gè)叫做進(jìn)程控制塊(PCB),的數(shù)據(jù)結(jié)構(gòu)中,可以理解為進(jìn)程屬性的集合,該控制塊由操作系統(tǒng)創(chuàng)建和管理。每個(gè)進(jìn)程在內(nèi)核中都有一個(gè)進(jìn)程控制塊來(lái)維護(hù)進(jìn)程相關(guān)的信息,Linux內(nèi)核的進(jìn)程控制塊是(task_struct)結(jié)構(gòu)體。

 2.2進(jìn)程標(biāo)識(shí)符(PID)

  進(jìn)程標(biāo)識(shí)符在task_struct下定義

每個(gè)進(jìn)程都有一個(gè)唯一的標(biāo)識(shí)符(PID),內(nèi)核通過(guò)這個(gè)標(biāo)識(shí)符來(lái)識(shí)別不同的進(jìn)程,同時(shí),進(jìn)程標(biāo)識(shí)符(PID)也是內(nèi)核提供給用戶(hù)程序的接口,用戶(hù)程序通過(guò)PID對(duì)進(jìn)程發(fā)號(hào)施令。

**  PID** 是32位的無(wú)符號(hào)整數(shù),它被順序編號(hào):新創(chuàng)建進(jìn)程的PID通常是前一個(gè)進(jìn)程的PID加1。然而,為了與16位硬件平臺(tái)的傳統(tǒng)Linux系統(tǒng)保持兼容,在Linux上允許的最大PID號(hào)是32767,當(dāng)內(nèi)核在系統(tǒng)中創(chuàng)建第32768個(gè)進(jìn)程時(shí),就必須重新開(kāi)始使用已閑置的PID號(hào)。在64位系統(tǒng)中,PID可擴(kuò)展到4194303。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?



3.進(jìn)程狀態(tài)

** 3.1六種狀態(tài)**

#define TASK_RUNNING ** **

  1.表示進(jìn)程要么正在執(zhí)行,要么正在準(zhǔn)備執(zhí)行。

#define TASK_INTERRUPTIBLE

  2.表示進(jìn)程被阻塞(睡眠),只有當(dāng)某個(gè)條件是TRUE時(shí),其狀態(tài)相應(yīng)的設(shè)置為 TASK_RUNNING。它可以被信號(hào)和wake_up喚醒。

#define TASK_UNINTERRUPTIBLE

  3.表示進(jìn)程被阻塞(睡眠),只有當(dāng)某個(gè)條件是TRUE時(shí),其狀態(tài)相應(yīng)的設(shè)置為 TASK_RUNNING。它只能被wake_up喚醒。

#define TASK_STOPPED

  4.表示進(jìn)程被停止執(zhí)行。

#define TASK_TRACED

  5.表示進(jìn)程被 debugger 等進(jìn)程監(jiān)視著。

#define EXIT_ZOMBIE

  6.表示進(jìn)程的執(zhí)行被終止,但是其父進(jìn)程還沒(méi)有使用 wait() 等系統(tǒng)調(diào)用來(lái)獲知它的終止信息。

#define EXIT_DEAD

  7.表示進(jìn)程的最終狀態(tài)。

 3.2狀態(tài)轉(zhuǎn)換圖


4.Linux下的O(1)調(diào)度算法

**  Linux O(1)調(diào)度器** (O(1) scheduler) 是歷史上一個(gè)流行的Linux系統(tǒng)調(diào)度程序。命名為這個(gè)名字是因?yàn)樗軌蛟诔?shù)時(shí)間內(nèi)執(zhí)行任務(wù)調(diào)度,例如從執(zhí)行隊(duì)列中選擇一個(gè)任務(wù)或?qū)⒁粋€(gè)任務(wù)加入執(zhí)行隊(duì)列,這與系統(tǒng)中的任務(wù)總數(shù)有關(guān)。

 4.1 O(1)調(diào)度器

  在O(1)調(diào)度中,要問(wèn)最重要的數(shù)據(jù)結(jié)構(gòu)是運(yùn)行隊(duì)列。運(yùn)行隊(duì)列描繪了進(jìn)程隊(duì)列的結(jié)構(gòu),在內(nèi)核源碼中用runqueue結(jié)構(gòu)體表示。

4.2優(yōu)先級(jí)數(shù)組

  O(1)算法的另一個(gè)核心數(shù)據(jù)結(jié)構(gòu)即為prio_array結(jié)構(gòu)體。該結(jié)構(gòu)體中有一個(gè)用來(lái)表示進(jìn)程動(dòng)態(tài)優(yōu)先級(jí)的數(shù)組queue,它包含了每一種優(yōu)先級(jí)進(jìn)程所形成的鏈表。

4.3靜態(tài)優(yōu)先級(jí)和動(dòng)態(tài)優(yōu)先級(jí)

  進(jìn)程有兩個(gè)優(yōu)先級(jí),一個(gè)是靜態(tài)優(yōu)先級(jí),一個(gè)是動(dòng)態(tài)優(yōu)先級(jí).靜態(tài)優(yōu)先級(jí)是用來(lái)計(jì)算進(jìn)程運(yùn)行的時(shí)間片長(zhǎng)度的,動(dòng)態(tài)優(yōu)先級(jí)是在調(diào)度器進(jìn)行調(diào)度時(shí)用到的,調(diào)度器每次都選取動(dòng)態(tài)優(yōu)先級(jí)最高的進(jìn)程運(yùn)行.

4.4時(shí)間片

  O(1)算法采用過(guò)期進(jìn)程數(shù)組和活躍進(jìn)程數(shù)組解決以往調(diào)度算法所帶來(lái)的O(n)復(fù)雜度問(wèn)題。過(guò)期數(shù)組中的進(jìn)程都已經(jīng)用完了時(shí)間片,而活躍數(shù)組的進(jìn)程還擁有時(shí)間片。當(dāng)一個(gè)進(jìn)程用完自己的時(shí)間片后,它就被移動(dòng)到過(guò)期進(jìn)程數(shù)組中,同時(shí)這個(gè)過(guò)期進(jìn)程在被移動(dòng)之前就已經(jīng)計(jì)算好了新的時(shí)間片。可以看到O(1)調(diào)度算法是采用分散計(jì)算時(shí)間片的方法,并不像以往算法中集中為所有可運(yùn)行進(jìn)程重新計(jì)算時(shí)間片。當(dāng)活躍進(jìn)程數(shù)組中沒(méi)有任何進(jìn)程時(shí),說(shuō)明此時(shí)所有可運(yùn)行的進(jìn)程都用完了自己的時(shí)間片。那么此時(shí)只需要交換一下兩個(gè)數(shù)組即可將過(guò)期進(jìn)程切換為活躍進(jìn)程,進(jìn)而繼續(xù)被調(diào)度程序所調(diào)度。兩個(gè)數(shù)組之間的切換其實(shí)就是指針之間的交換,因此花費(fèi)的時(shí)間是恒定的。

上面的代碼說(shuō)明了兩個(gè)數(shù)組之間的交換,通過(guò)分散計(jì)算時(shí)間片、交換過(guò)期和活躍兩個(gè)進(jìn)程集合的方法可以使得O(1)算法在恒定的時(shí)間內(nèi)為每個(gè)進(jìn)程重新計(jì)算好時(shí)間片。

4.5調(diào)度算法

  在每次進(jìn)程切換時(shí),內(nèi)核依次掃描就緒隊(duì)列上的每一個(gè)進(jìn)程,計(jì)算每個(gè)進(jìn)程的優(yōu)先級(jí),再選擇出優(yōu)先級(jí)最高的進(jìn)程來(lái)運(yùn)行;盡管這個(gè)算法理解簡(jiǎn)單,但是它花費(fèi)在選擇優(yōu)先級(jí)最高進(jìn)程上的時(shí)間卻不容忽視。系統(tǒng)中可運(yùn)行的進(jìn)程越多,花費(fèi)的時(shí)間就越大,時(shí)間復(fù)雜度為O(n)。

5.對(duì)操作系統(tǒng)進(jìn)程模型的看法

  進(jìn)程是操作系統(tǒng)最核心的概念,這是對(duì)正在運(yùn)行的程序的一個(gè)抽象。所有操作系統(tǒng)其他的所有內(nèi)容都是圍繞著進(jìn)程的概念展開(kāi)的。

  從概念上說(shuō),每個(gè)進(jìn)程都擁有它自己的虛擬CPU。當(dāng)然,實(shí)際上的真正的CPU在各自進(jìn)程之間來(lái)回切換。

  進(jìn)程管理即是操作系統(tǒng)對(duì)CPU的管理,為了提升CPU利用率,使用多道編程,便有了多進(jìn)程維護(hù)管理。操作系統(tǒng)已實(shí)現(xiàn)了各管理功能,硬件CPU及一系列進(jìn)程資源抽象成為了進(jìn)程的概念,可以說(shuō)進(jìn)程算是操作系統(tǒng)的“無(wú)中生有”,應(yīng)用程序的編程人員直接利用進(jìn)程的機(jī)制,達(dá)到讓?xiě)?yīng)用程序高效利用硬件資源的目的。


轉(zhuǎn)自Wangwangsheng



基于Linux操作系統(tǒng)下的進(jìn)程管理分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
新宾| 喀喇沁旗| 祁东县| 葫芦岛市| 金塔县| 溆浦县| 雅江县| 东台市| 保山市| 银川市| 富民县| 贵南县| 武安市| 昭通市| 扎鲁特旗| 邵阳市| 伊吾县| 仪征市| 平邑县| 清新县| 炎陵县| 左云县| 那曲县| 永泰县| 闽清县| 兴城市| 瑞安市| 临高县| 南岸区| 西乌珠穆沁旗| 房产| 北辰区| 太湖县| 泾源县| 贵南县| 广河县| 佛山市| 安康市| 社旗县| 崇州市| 德清县|