日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

主进程退出后子进程还会存在吗?_【干货】Linux进程模型 全解

發(fā)布時(shí)間:2023/12/19 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主进程退出后子进程还会存在吗?_【干货】Linux进程模型 全解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

ID:嵌入式情報(bào)局

作者:情報(bào)小哥

1進(jìn)程與程序

01

什么是進(jìn)程 ??

? ? 什么是進(jìn)程 ? 進(jìn)程(process)是具有獨(dú)立功能的程序單次運(yùn)行,是操作系統(tǒng)進(jìn)行資源分配的基本單位。

02

進(jìn)程的特點(diǎn)

  • 動(dòng)態(tài)性 : 是程序的一次執(zhí)行過(guò)程,這也是與程序最大的區(qū)別。

  • 并發(fā)性?: 多個(gè)進(jìn)程在一段時(shí)間內(nèi)可以同時(shí)運(yùn)行。

  • 獨(dú)立性 : 各自獨(dú)立運(yùn)行、資源獨(dú)立和調(diào)度的基本單位。

03

進(jìn)程與程序??

  • 程序是靜態(tài),而進(jìn)程為動(dòng)態(tài)。

  • 程序是永久,而進(jìn)程有生命周期。

  • 程序是指令的有序集合,而進(jìn)程不僅包括指令還包括進(jìn)程控制狀態(tài)等信息。

  • 一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程即多個(gè)進(jìn)程可執(zhí)行同一個(gè)程序;一個(gè)進(jìn)程可以執(zhí)行一個(gè)或幾個(gè)程序。

更加通俗的理解 : 程序一般是保留在物理介質(zhì)(塊設(shè)備,如硬盤(pán)等)的數(shù)據(jù),數(shù)據(jù)加載到內(nèi)存以后的執(zhí)行形態(tài)就是進(jìn)程。

2進(jìn)程三態(tài)

01

三態(tài)模型圖??

02

狀態(tài)解釋???

  • 執(zhí)行態(tài)(running):進(jìn)程占有CPU正在執(zhí)行中。

  • 就緒態(tài)(ready)? ? :具備運(yùn)行條件,等待CPU調(diào)度以便運(yùn)行。

  • 阻塞態(tài)(blocked):進(jìn)程等待或者睡眠都屬于此狀態(tài),進(jìn)程不具備運(yùn)行條件,正在等待某個(gè)IO事件的完成。

03

轉(zhuǎn)移過(guò)程? ?

? ? 通過(guò)上面的狀態(tài)模型圖,我們大致可以了解到狀態(tài)的轉(zhuǎn)移只有4種情況,然而如果其中一個(gè)狀態(tài)能夠達(dá)到任意其他兩個(gè)狀態(tài)應(yīng)該有6種轉(zhuǎn)移情況,所以有兩種情況無(wú)法轉(zhuǎn)移:

  • 執(zhí)行態(tài)-->就緒態(tài) : 圖上標(biāo)識(shí)的是時(shí)間片用完,這個(gè)僅僅對(duì)于采用時(shí)間片調(diào)度算法,而對(duì)于其他調(diào)度算法可能存在高優(yōu)先級(jí)搶占低優(yōu)先級(jí),從而使得優(yōu)先級(jí)從執(zhí)行態(tài)變成就緒狀態(tài)等等。

  • 就緒態(tài)-->執(zhí)行態(tài) : 之前進(jìn)程處于就緒狀態(tài), 一旦根據(jù)調(diào)度算法滿足調(diào)度條件便會(huì)占用CPU運(yùn)行,從而變成執(zhí)行狀態(tài)。

  • 執(zhí)行態(tài)-->阻塞態(tài) : 在執(zhí)行狀態(tài)中存在一些請(qǐng)求(IO請(qǐng)求)從而導(dǎo)致當(dāng)前無(wú)法再繼續(xù)執(zhí)行,從而進(jìn)入等待資源的狀態(tài)。

  • 阻塞態(tài)-->就緒態(tài)?: 進(jìn)入等待資源的狀態(tài),一旦獲得資源,完成請(qǐng)求就順利進(jìn)入就緒表,從而等待調(diào)度器調(diào)度。

以上三態(tài)模型的4種狀態(tài)轉(zhuǎn)移就就介紹完了,那么就存在還有兩種狀態(tài)轉(zhuǎn)移是不支持的 :

  • 阻塞態(tài)-->執(zhí)行態(tài)?:?由于調(diào)度器大部分調(diào)度器算法一般都不會(huì)從堵塞任務(wù)表中挑選任務(wù)進(jìn)行執(zhí)行,所以該轉(zhuǎn)換一般不發(fā)生。

  • 就緒態(tài)-->阻塞態(tài)?: 進(jìn)程都沒(méi)有得到執(zhí)行,不會(huì)有任何資源需求,所以該轉(zhuǎn)換一般也不會(huì)發(fā)生。

? ? 當(dāng)然對(duì)于Linux系統(tǒng)不僅僅有這三態(tài)模型,還有其他更多的狀態(tài),基本上都是在三態(tài)模型上的演化!

3五態(tài)模型

01

模型示意圖?

02

模型解讀

  • 對(duì)于進(jìn)程五態(tài)模型僅僅只是在前面的三態(tài)模型上加入了新建態(tài)與終止態(tài),所以這里小哥只是講一下新建態(tài)和終止態(tài),其他三態(tài)與之前的一致。

  • 新建態(tài):

  • 前面說(shuō)過(guò)程序與進(jìn)程的關(guān)系,那么操作系統(tǒng)把程序加載到內(nèi)存中并且讓其變成運(yùn)行狀態(tài)還需要有特別多控制管理數(shù)據(jù)的配置和初始化。比如各種物理和邏輯資源,如內(nèi)存、文件、I/O設(shè)備和CPU時(shí)間等分配和建立進(jìn)程控制塊(PCB)表項(xiàng)、建立資源表格(如打開(kāi)文件表)并分配資源、加載程序并建立地址空間相關(guān)的頁(yè)表與段表等等。

  • 往往在新建態(tài)操作系統(tǒng)過(guò)程中就可以根據(jù)當(dāng)前的CPU負(fù)荷等等限制進(jìn)程的數(shù)量。

  • 終止態(tài):

  • 該狀態(tài)表示進(jìn)程已結(jié)束,首先操作系統(tǒng)會(huì)進(jìn)行一些善后工作,比如回收除進(jìn)程控制塊之外的其他資源,然后可以讓其他進(jìn)程從進(jìn)程控制塊中收集有關(guān)信息(如退出代碼用于傳遞給父進(jìn)程),最后將任務(wù)控制塊(PCB)清除,并且把主內(nèi)存還給操作系統(tǒng)。

4加入掛起與激活

01

模型示意圖??

02

模型解讀? ?

  • 上述模型在五態(tài)模型的基礎(chǔ)上加入了掛起和激活狀態(tài),操作系統(tǒng)一個(gè)最大的特點(diǎn)就是對(duì)硬件資源的最大化利用,同樣對(duì)于主內(nèi)存資源也是通過(guò)置換算法達(dá)到最大化的虛擬地址空間,特別是主存資源當(dāng)不能滿足所有進(jìn)程運(yùn)行時(shí),就必須掛起某些進(jìn)程,放到磁盤(pán)對(duì)換區(qū),暫時(shí)不參加調(diào)度,以平滑系統(tǒng)負(fù)荷等處理。

  • 活躍就緒:存于主存中且可被調(diào)度。

  • 靜止就緒:進(jìn)程被對(duì)換到輔存(磁盤(pán)等)形成靜止就緒狀態(tài),且不參與調(diào)度,系統(tǒng)通過(guò)一定的策略,會(huì)在恰當(dāng)?shù)臅r(shí)機(jī)把掛起就緒態(tài)進(jìn)程調(diào)回主存并轉(zhuǎn)換為活躍就緒,從而繼續(xù)參與系統(tǒng)調(diào)度。

  • 活躍阻塞:之前處于執(zhí)行態(tài),一旦等待事件的產(chǎn)生便進(jìn)入活躍就緒狀態(tài)。

  • 靜止阻塞:是指活躍態(tài)進(jìn)程對(duì)換到輔存時(shí)的阻塞狀態(tài),一旦等待的事件產(chǎn)生,由于該靜止阻塞態(tài)進(jìn)程具有較高的優(yōu)先級(jí),并且操作系統(tǒng)已經(jīng)得知導(dǎo)致它阻塞的事件即將結(jié)束,便會(huì)進(jìn)入活躍阻塞。

5Linux進(jìn)程

01

Linux進(jìn)程狀態(tài)?

? ? 前面小哥跟大家聊了一下操作系統(tǒng)的通用進(jìn)程三狀態(tài)和五狀態(tài)模型,同時(shí)在五狀態(tài)轉(zhuǎn)移模型中加入了掛起和超時(shí)狀態(tài),而實(shí)際的操作系統(tǒng)會(huì)根據(jù)自身特點(diǎn)從而對(duì)狀態(tài)模型圖進(jìn)行擴(kuò)展或者優(yōu)化,那么今天看一下Linux實(shí)際的進(jìn)程狀態(tài)轉(zhuǎn)移。

02

Linux進(jìn)程狀態(tài)圖

03

狀態(tài)與轉(zhuǎn)移??

  • 1、進(jìn)程通過(guò)系統(tǒng)調(diào)用或者中斷即可從用戶態(tài)進(jìn)入內(nèi)核態(tài),此時(shí)Linux通過(guò)進(jìn)程調(diào)度算法調(diào)度實(shí)現(xiàn)多進(jìn)程的并發(fā)執(zhí)行,所以處于用戶態(tài)和內(nèi)核態(tài)的進(jìn)程一般都統(tǒng)一叫做運(yùn)行態(tài)。

  • 2、就緒態(tài)是進(jìn)程滿足運(yùn)行條件等待被系統(tǒng)調(diào)度進(jìn)入運(yùn)行態(tài)的狀態(tài),就緒態(tài)其實(shí)是滿足運(yùn)行條件的,所以一般也叫運(yùn)行態(tài)。

  • 3、可中斷休眠態(tài)又叫淺睡眠態(tài),一般進(jìn)程調(diào)用sleep_interruptible()即可進(jìn)入該狀態(tài),該狀態(tài)主要是等待所需的資源,可以通過(guò)接收來(lái)自其他進(jìn)程的信號(hào)、wake_up()或者wake_up_interruptible()來(lái)進(jìn)行喚醒,從而進(jìn)入就緒態(tài)。

  • 4、不可中斷休眠態(tài)也叫深睡眠態(tài),它與不可中斷休眠態(tài)類似,不過(guò)其喚醒條件更加嚴(yán)苛一點(diǎn),只能通過(guò)使用wake_up()明確指明才能轉(zhuǎn)為就緒態(tài)。

  • 5、進(jìn)程處于運(yùn)行態(tài),當(dāng)收到暫停信號(hào)比如SIGSTOP信號(hào)等,即會(huì)掛起轉(zhuǎn)為暫停態(tài),且處于暫停態(tài)的進(jìn)程收到SIGCONT信號(hào)又可被激活成運(yùn)行態(tài)。

  • 6、僵死態(tài)是Linux里面比較有趣的狀態(tài),當(dāng)主動(dòng)調(diào)用do_exit()以后便會(huì)進(jìn)入該狀態(tài),表示該進(jìn)程已經(jīng)停止運(yùn)行,不過(guò)需要等待父進(jìn)程確認(rèn),其任務(wù)控制塊還沒(méi)有釋放。

? ? 從Linux一個(gè)大體的進(jìn)程狀態(tài)轉(zhuǎn)移圖來(lái)看,與前面介紹的狀態(tài)模型還是比較相似的。

我是情報(bào)小哥,一個(gè)嵌入式自學(xué)玩家!

長(zhǎng)按前往圖中包含的公眾號(hào)關(guān)注

結(jié)束語(yǔ)

? ? 好了,這里是公眾號(hào):“最后一個(gè)bug”,一個(gè)為大家打造的技術(shù)知識(shí)提升基地。

推薦好文??點(diǎn)擊藍(lán)色字體即可跳轉(zhuǎn)

?【MCU】把"安卓HAL層思想"引到單片機(jī)軟件開(kāi)發(fā)中

?【MCU】可怕,別人把我MCU固件給反匯編了!(逆向)

??【典藏】自制小型GUI界面框架(設(shè)計(jì)思想篇)

??【典藏】大佬們都在用的結(jié)構(gòu)體進(jìn)階小技巧

總結(jié)

以上是生活随笔為你收集整理的主进程退出后子进程还会存在吗?_【干货】Linux进程模型 全解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。