最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux之進(jìn)程狀態(tài)&&進(jìn)程優(yōu)先級(jí)詳解

 更新時(shí)間:2025年02月06日 17:11:18   作者:阿赭ochre  
文章介紹了操作系統(tǒng)中進(jìn)程的狀態(tài),包括運(yùn)行狀態(tài)、阻塞狀態(tài)和掛起狀態(tài),并詳細(xì)解釋了Linux下進(jìn)程的具體狀態(tài)及其管理,此外,文章還討論了進(jìn)程的優(yōu)先級(jí)、查看和修改進(jìn)程優(yōu)先級(jí)的方法,以及并發(fā)相關(guān)的概念和函數(shù)的返回值

一、操作系統(tǒng)的進(jìn)程狀態(tài)

1.1運(yùn)行狀態(tài)

  • 當(dāng)一個(gè)進(jìn)程準(zhǔn)備就緒,獲得了CPU資源,就會(huì)在CPU所維護(hù)的運(yùn)行隊(duì)列上等待CPU的調(diào)度
  • 一個(gè)進(jìn)程在運(yùn)行或者處于運(yùn)行隊(duì)列中,都叫做運(yùn)行狀態(tài)
  • 一個(gè)進(jìn)程并不是一直在CPU上執(zhí)行的,而是會(huì)以進(jìn)程切換的方式,在一段時(shí)間內(nèi),使多個(gè)進(jìn)程同時(shí)被推進(jìn)---并發(fā)
  • CPU對(duì)進(jìn)程的調(diào)度是基于進(jìn)程切換和時(shí)間片輪轉(zhuǎn)的調(diào)度算法

1.2阻塞狀態(tài)

  • 當(dāng)一個(gè)進(jìn)程正在等待某種IO事件的完成,實(shí)際上就是在等待獲取某種資源,那么該進(jìn)程就處于一種阻塞狀態(tài)
  • 操作系統(tǒng)對(duì)軟硬件資源進(jìn)行管理,都要遵循“先描述再組織”的原則,操作系統(tǒng)對(duì)外設(shè)的管理就是在內(nèi)存中創(chuàng)建一個(gè)個(gè)的外設(shè)數(shù)據(jù)結(jié)構(gòu)對(duì)象,再用鏈表的方式組織起來
  • 每一個(gè)外設(shè)的pcb數(shù)據(jù)結(jié)構(gòu)對(duì)象都會(huì)包含一個(gè)等待隊(duì)列,當(dāng)一個(gè)進(jìn)程在獲取某種外設(shè)資源時(shí)(比如scanf),外設(shè)資源還未準(zhǔn)備好,該進(jìn)程就會(huì)鏈入該外設(shè)的pcb等待隊(duì)列進(jìn)行等待,此時(shí)進(jìn)程就處于阻塞狀態(tài),直到資源準(zhǔn)備就緒,才會(huì)被鏈入運(yùn)行隊(duì)列等待CPU調(diào)度,將狀態(tài)S改為R

1.3掛起

  • 當(dāng)進(jìn)程在隊(duì)列中排隊(duì),操作系統(tǒng)的資源嚴(yán)重不足或者操作系統(tǒng)需要給新加入的進(jìn)程提供空間,那么此時(shí)操作系統(tǒng)就會(huì)將正在等待排隊(duì)的進(jìn)程所對(duì)應(yīng)的數(shù)據(jù)和代碼換出到外設(shè)分區(qū)中,等到該進(jìn)程被調(diào)度了再換入給該進(jìn)程
  • 從換出到換出的過程,進(jìn)程處于掛起狀態(tài)

二、Linux下具體的狀態(tài)

static const char * const task_state_array[] =
{
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
  • R就是操作系統(tǒng)中進(jìn)程的運(yùn)行狀態(tài):并不意味著該進(jìn)程一定在運(yùn)行中,它表明該進(jìn)程要么在運(yùn)行要么在運(yùn)行隊(duì)列中
  • S和D狀態(tài)都對(duì)應(yīng)操作系統(tǒng)中的阻塞狀態(tài):S是一種淺度睡眠,可以被喚醒;D是一種深度睡眠,不會(huì)響應(yīng)任何請(qǐng)求
  • 當(dāng)一個(gè)進(jìn)程正在進(jìn)行某種IO事件,比如在向磁盤寫入重要數(shù)據(jù)的時(shí)候,它必須等待磁盤寫入完畢將寫入結(jié)果反饋給進(jìn)程,再反饋給上層用戶,但如果這時(shí)候操作系統(tǒng)的資源嚴(yán)重不足,進(jìn)程掛起已經(jīng)沒辦法解決問題了,操作系統(tǒng)就會(huì)選擇殺掉進(jìn)程,如果一個(gè)進(jìn)程在等待磁盤寫入完畢的期間被殺掉,那么就會(huì)導(dǎo)致數(shù)據(jù)的丟失!為了防止這種情況,必須給該進(jìn)程一個(gè)標(biāo)識(shí)符--D,告訴操作系統(tǒng)我這個(gè)進(jìn)程在等待磁盤寫入完畢的期間是不能被殺掉的
  • T停止?fàn)顟B(tài):可以通過發(fā)送SIGSTOP來停止進(jìn)程,可以發(fā)送SIGCONT來讓進(jìn)程繼續(xù)運(yùn)行,當(dāng)一個(gè)進(jìn)程想要獲取某種資源或者被其他進(jìn)程控制(如gdb),就可能會(huì)出現(xiàn)T狀態(tài)

  • R就是操作系統(tǒng)中進(jìn)程的運(yùn)行狀態(tài):并不意味著該進(jìn)程一定在運(yùn)行中,它表明該進(jìn)程要么在運(yùn)行要么在運(yùn)行隊(duì)列中
  • S和D狀態(tài)都對(duì)應(yīng)操作系統(tǒng)中的阻塞狀態(tài):S是一種淺度睡眠,可以被喚醒;D是一種深度睡眠,不會(huì)響應(yīng)任何請(qǐng)求
  • 當(dāng)一個(gè)進(jìn)程正在進(jìn)行某種IO事件,比如在向磁盤寫入重要數(shù)據(jù)的時(shí)候,它必須等待磁盤寫入完畢將寫入結(jié)果反饋給進(jìn)程,再反饋給上層用戶,但如果這時(shí)候操作系統(tǒng)的資源嚴(yán)重不足,進(jìn)程掛起已經(jīng)沒辦法解決問題了,操作系統(tǒng)就會(huì)選擇殺掉進(jìn)程,如果一個(gè)進(jìn)程在等待磁盤寫入完畢的期間被殺掉,那么就會(huì)導(dǎo)致數(shù)據(jù)的丟失!為了防止這種情況,必須給該進(jìn)程一個(gè)標(biāo)識(shí)符--D,告訴操作系統(tǒng)我這個(gè)進(jìn)程在等待磁盤寫入完畢的期間是不能被殺掉的
  • T停止?fàn)顟B(tài):可以通過發(fā)送SIGSTOP來停止進(jìn)程,可以發(fā)送SIGCONT來讓進(jìn)程繼續(xù)運(yùn)行,當(dāng)一個(gè)進(jìn)程想要獲取某種資源或者被其他進(jìn)程控制(如gdb),就可能會(huì)出現(xiàn)T狀態(tài)

子進(jìn)程退出,父進(jìn)程沒有退出并且沒有回收子進(jìn)程的退出信息,就會(huì)使子進(jìn)程進(jìn)入僵尸進(jìn)程

  • 孤兒進(jìn)程:當(dāng)子進(jìn)程還沒退出,父進(jìn)程就已經(jīng)推出了,那么該子進(jìn)程就會(huì)被1號(hào)進(jìn)程(操作系統(tǒng))領(lǐng)養(yǎng),此時(shí)的子進(jìn)程就叫做孤兒進(jìn)程。
  • 為什么要被1號(hào)進(jìn)程領(lǐng)養(yǎng)?
  • 為了讓子進(jìn)程在退出的時(shí)候可以被回收退出信息。此時(shí)退出進(jìn)程不能再用Ctrl C 而應(yīng)該使用kill -9 殺掉進(jìn)程

三、進(jìn)程的優(yōu)先級(jí)

3.1基本概念

  • CPU的資源是有限的,但是進(jìn)程是多個(gè)的,這就注定了進(jìn)程之間存在競爭關(guān)系
  • 為了保證進(jìn)程被CPU調(diào)度的公平和良性競爭,就必須引入進(jìn)程優(yōu)先級(jí)的概念
  • 進(jìn)程優(yōu)先級(jí)是指CPU分配資源的先后順序(訪問資源的先后順序)
  • 如果一個(gè)進(jìn)程長時(shí)間無法訪問到資源,代碼無法被推進(jìn),就會(huì)導(dǎo)致該進(jìn)程的饑餓問題
  • 優(yōu)先權(quán)高的進(jìn)程有優(yōu)先執(zhí)行權(quán)利。配置進(jìn)程優(yōu)先權(quán)對(duì)多任務(wù)環(huán)境的linux很有用,可能改善系統(tǒng)性能
  • 還可以把進(jìn)程運(yùn)行到指定的CPU上,這樣一來,把不重要的進(jìn)程安排到某個(gè)CPU,可以大大改善系統(tǒng)整 體性能

3.2查看進(jìn)程優(yōu)先級(jí)的命令

  • 使用 ps -al

  • UID: 代表執(zhí)行者的身份
  • PID: 代表這個(gè)進(jìn)程的代號(hào)
  • PPID:代表這個(gè)進(jìn)程是由哪個(gè)進(jìn)程發(fā)展衍生而來的,亦即父進(jìn)程的代號(hào)
  • PRI:代表這個(gè)進(jìn)程可被執(zhí)行的優(yōu)先級(jí),其值越小越早被執(zhí)行
  • NI :代表這個(gè)進(jìn)程的 nice 值

PRI即進(jìn)程的優(yōu)先級(jí),通俗點(diǎn)說就是程序被CPU執(zhí)行的先后順序,此值越小

進(jìn)程的優(yōu)先級(jí)別越高(默認(rèn)80)

NI就是nice值,其表示進(jìn)程可被執(zhí)行的優(yōu)先級(jí)的修正數(shù)值

PRI值越小越快被執(zhí)行,那么加入nice值后,將會(huì)使得PRI變?yōu)椋篜RI(new)=PRI(old)+nice

這樣,當(dāng)nice值為負(fù)值的時(shí)候,那么該程序?qū)?huì)優(yōu)先級(jí)值將變小,即其優(yōu)先級(jí)會(huì)變高,則其越快被執(zhí)行

所以,調(diào)整進(jìn)程優(yōu)先級(jí),在Linux下,就是調(diào)整進(jìn)程nice值 ,Linux為了保證優(yōu)先級(jí)的調(diào)整范圍,nice其取值范圍是-20至19,一共40個(gè)級(jí)別

3.3修改進(jìn)程優(yōu)先級(jí)的命令

  • 使用top r + 進(jìn)程pid + 修正的nice值

操作系統(tǒng)是如何根據(jù)優(yōu)先級(jí)展開調(diào)度的呢?

CPU會(huì)維護(hù)一個(gè)runqueue,runqueue中有兩個(gè)調(diào)度隊(duì)列,他們本質(zhì)上是兩個(gè)指針數(shù)組,存儲(chǔ)40個(gè)優(yōu)先級(jí)所一一對(duì)應(yīng)的40個(gè)隊(duì)列的指針,再結(jié)合位圖的思想(調(diào)度完畢的隊(duì)列為0,未調(diào)度完畢的隊(duì)列為1),針對(duì)不同的優(yōu)先級(jí)對(duì)進(jìn)程進(jìn)行調(diào)度!

新加入的進(jìn)程或者被進(jìn)程切換下來的進(jìn)程會(huì)鏈接到另外一個(gè)調(diào)度隊(duì)列的對(duì)應(yīng)的優(yōu)先級(jí)的隊(duì)列當(dāng)中去,直到前一個(gè)調(diào)度隊(duì)列全部調(diào)度完后,swap交換兩個(gè)隊(duì)列的指針,對(duì)另外一個(gè)未調(diào)度的隊(duì)列進(jìn)行調(diào)度,以此循環(huán)往復(fù),也叫Linux內(nèi)核的O(1)調(diào)度算法

3.4其他概念

  • 競爭性: 系統(tǒng)進(jìn)程數(shù)目眾多,而CPU資源只有少量,甚至1個(gè),所以進(jìn)程之間是具有競爭屬性的。為了高效完成任務(wù),更合理競爭相關(guān)資源,便具有了優(yōu)先級(jí)
  • 獨(dú)立性: 多進(jìn)程運(yùn)行,需要獨(dú)享各種資源,多進(jìn)程運(yùn)行期間互不干擾
  • 并行: 多個(gè)進(jìn)程在多個(gè)CPU下分別,同時(shí)進(jìn)行運(yùn)行,這稱之為并行
  • 并發(fā): 多個(gè)進(jìn)程在一個(gè)CPU下采用進(jìn)程切換的方式,在一段時(shí)間之內(nèi),讓多個(gè)進(jìn)程都得以推進(jìn),稱之為并發(fā)

3.5并發(fā)

  • 函數(shù)的返回值是如何被外部拿到的?----通過CPU寄存器
  • 系統(tǒng)如何得知我們當(dāng)前進(jìn)程執(zhí)行到哪一行代碼?----通過pc(eip)程序計(jì)數(shù)器,記錄當(dāng)前進(jìn)程執(zhí)行的指令的下一條指令的地址
  • CPU中的寄存器很多!將進(jìn)程中的高頻數(shù)據(jù)放入到CPU的寄存器中可以提高效率
  • 問題是,我們?cè)谶M(jìn)行進(jìn)程切換到時(shí)候,如果不把屬于當(dāng)前進(jìn)程的存儲(chǔ)在寄存器中的數(shù)據(jù)帶走,那么下一個(gè)來的進(jìn)程在把數(shù)據(jù)放入寄存器的時(shí)候就會(huì)將上一個(gè)進(jìn)程的數(shù)據(jù)覆蓋,等到該進(jìn)程重新被CPU調(diào)度,就無法從上一次執(zhí)行的位置繼續(xù)往下執(zhí)行
  • CPU的寄存器中保存的是進(jìn)程的臨時(shí)數(shù)據(jù),也叫進(jìn)程的上下文
  • 一個(gè)進(jìn)程在被CPU高頻調(diào)度的時(shí)候,必須經(jīng)歷調(diào)度----排隊(duì),在這個(gè)過程中,進(jìn)程離開CPU必須自己保存上下文帶走,再被調(diào)度時(shí)恢復(fù)上下文
  • 總之,進(jìn)程切換涉及到保存上下文和恢復(fù)上下文,寄存器中的數(shù)據(jù)在被保存時(shí)實(shí)際上是以結(jié)構(gòu)體的形式被保存在內(nèi)存中,進(jìn)程的pcb數(shù)據(jù)結(jié)構(gòu)對(duì)象中存在一個(gè)指向該結(jié)構(gòu)體的指針

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • CentOS 7 虛擬機(jī)無法開機(jī)問題的快速解決方法

    CentOS 7 虛擬機(jī)無法開機(jī)問題的快速解決方法

    這篇文章主要介紹了CentOS 7 虛擬機(jī)無法開機(jī)問題的快速解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • Ubuntu中實(shí)現(xiàn)定時(shí)喚醒與自動(dòng)休眠功能

    Ubuntu中實(shí)現(xiàn)定時(shí)喚醒與自動(dòng)休眠功能

    在自動(dòng)化腳本執(zhí)行的時(shí)間段內(nèi)喚醒系統(tǒng)使其正常運(yùn)行,其余時(shí)間則讓其進(jìn)入休眠狀態(tài),以此來降低能耗,為達(dá)成這一目標(biāo),我編寫了一個(gè)簡易的腳本,并通過 crontab 配置了自動(dòng)化任務(wù),接下來,我會(huì)詳盡地講解整個(gè)配置過程,需要的朋友可以參考下
    2024-09-09
  • linux縮減XFS分區(qū)格式的根目錄

    linux縮減XFS分區(qū)格式的根目錄

    大家好,本篇文章主要分享的是linux縮減XFS分區(qū)格式的根目錄,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • centos7系統(tǒng)下搭建docker本地鏡像倉庫的方法

    centos7系統(tǒng)下搭建docker本地鏡像倉庫的方法

    本篇文章主要介紹了CentOS 7 : Docker私有倉庫搭建和使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 淺析在 RHEL8 配置靜態(tài) IP 地址的不同方法

    淺析在 RHEL8 配置靜態(tài) IP 地址的不同方法

    如果一個(gè)人在 Linux 服務(wù)器上正確配置了靜態(tài)地址,那么他/她就可以通過網(wǎng)絡(luò)遠(yuǎn)程訪問它。在本文中,我們將演示在 RHEL 8 服務(wù)器網(wǎng)卡上配置靜態(tài) IP 地址的不同方法,需要的朋友可以參考下
    2019-09-09
  • Linux工具之Nethogs按進(jìn)程監(jiān)控網(wǎng)絡(luò)帶寬的安裝部署

    Linux工具之Nethogs按進(jìn)程監(jiān)控網(wǎng)絡(luò)帶寬的安裝部署

    NetHogs是一個(gè)小型的net top工具,不像大多數(shù)工具那樣拖慢每個(gè)協(xié)議或者是每個(gè)子網(wǎng)的速度而是按照進(jìn)程進(jìn)行帶寬分組,這篇文章主要介紹了Linux工具Nethogs按進(jìn)程監(jiān)控網(wǎng)絡(luò)帶寬,值得收藏,需要的朋友可以參考下
    2019-07-07
  • Linux之信號(hào)的保存方式

    Linux之信號(hào)的保存方式

    這篇文章主要介紹了Linux之信號(hào)的保存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Linux之多線程以及多線程并發(fā)訪問同一塊內(nèi)存的處理問題

    Linux之多線程以及多線程并發(fā)訪問同一塊內(nèi)存的處理問題

    這篇文章主要介紹了Linux之多線程以及多線程并發(fā)訪問同一塊內(nèi)存的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Shell中的單中括號(hào)和雙中括號(hào)的用法詳解

    Shell中的單中括號(hào)和雙中括號(hào)的用法詳解

    shell中的中括號(hào)在條件測試中是使用最頻繁的,無論是中括號(hào)還是雙中括號(hào),可用于一些條件的測試:算術(shù)比較、文件屬性測試、字符串比較。這篇文章主要介紹了Shell中的單中括號(hào)和雙中括號(hào)的用法詳解,需要的朋友可以參考下
    2022-12-12
  • linux日志審計(jì)服務(wù)auditd占用內(nèi)存過大的解決過程

    linux日志審計(jì)服務(wù)auditd占用內(nèi)存過大的解決過程

    文章介紹了如何使用ps命令查看auditd服務(wù)的內(nèi)存使用情況,并提供了當(dāng)auditd服務(wù)內(nèi)存占用過大時(shí)的解決方法,包括在auditd.service文件中增加MemoryLimit限制并重啟服務(wù)
    2025-10-10

最新評(píng)論

济源市| 和田县| 慈溪市| 邢台县| 明光市| 青冈县| 临泽县| 桃园县| 唐海县| 伊宁市| 伽师县| 潮安县| 南召县| 固原市| 博罗县| 屯门区| 康定县| 奈曼旗| 宁陵县| 葵青区| 前郭尔| 扎鲁特旗| 珠海市| 乐亭县| 龙井市| 延安市| 怀仁县| 临西县| 西贡区| 临城县| 库车县| 三台县| 竹溪县| 汾阳市| 广南县| 漯河市| 晋江市| 永靖县| 贡觉县| 资源县| 乐东|