溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux中進(jìn)程有沒(méi)有優(yōu)先級(jí)

發(fā)布時(shí)間:2023-04-19 10:44:45 來(lái)源:億速云 閱讀:111 作者:iii 欄目:建站服務(wù)器

今天小編給大家分享一下linux中進(jìn)程有沒(méi)有優(yōu)先級(jí)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

linux中進(jìn)程有優(yōu)先級(jí)。Linux是一個(gè)多用戶、多任務(wù)的操作系統(tǒng),系統(tǒng)中通常運(yùn)行著非常多的進(jìn)程,但CPU在一個(gè)時(shí)鐘周期內(nèi)只能運(yùn)算一條指令;哪個(gè)進(jìn)程應(yīng)該先運(yùn)算,誰(shuí)應(yīng)該后運(yùn)算呢?這就需要由進(jìn)程的優(yōu)先級(jí)來(lái)決定了。在Linux系統(tǒng)中,表示進(jìn)程優(yōu)先級(jí)的有兩個(gè)參數(shù):Pri和Nice;進(jìn)程優(yōu)先級(jí)是PRI值不是Nice值,但是Nice值會(huì)影響優(yōu)先級(jí)。

Linux-進(jìn)程的優(yōu)先級(jí)

Linux 是一個(gè)多用戶、多任務(wù)的操作系統(tǒng),系統(tǒng)中通常運(yùn)行著非常多的進(jìn)程。但是 CPU 在一個(gè)時(shí)鐘周期內(nèi)只能運(yùn)算一條指令(現(xiàn)在的 CPU 采用了多線程、多核心技術(shù),所以在一個(gè)時(shí)鐘周期內(nèi)可以運(yùn)算多條指令。 但是同時(shí)運(yùn)算的指令數(shù)也遠(yuǎn)遠(yuǎn)小于系統(tǒng)中的進(jìn)程總數(shù)),那問(wèn)題來(lái)了:誰(shuí)應(yīng)該先運(yùn)算,誰(shuí)應(yīng)該后運(yùn)算呢?這就需要由進(jìn)程的優(yōu)先級(jí)來(lái)決定了。

  • cpu分配資源的先后順序就是優(yōu)先級(jí)

  • 優(yōu)先權(quán)高的進(jìn)程有優(yōu)先執(zhí)行的權(quán)利,

  • 可以讓進(jìn)程運(yùn)行在指定的cpu上,改善系統(tǒng)整體性能

另外,CPU 在運(yùn)算數(shù)據(jù)時(shí),不是把一個(gè)集成算完成,再進(jìn)行下一個(gè)進(jìn)程的運(yùn)算,而是先運(yùn)算進(jìn)程 1,再運(yùn)算進(jìn)程 2,接下來(lái)運(yùn)算進(jìn)程 3,然后再運(yùn)算進(jìn)程 1,直到進(jìn)程任務(wù)結(jié)束。不僅如此,由于進(jìn)程優(yōu)先級(jí)的存在,進(jìn)程并不是依次運(yùn)算的,而是哪個(gè)進(jìn)程的優(yōu)先級(jí)高,哪個(gè)進(jìn)程會(huì)在一次運(yùn)算循環(huán)中被更多次地運(yùn)算。

這樣說(shuō)很難理解,我們換一種說(shuō)法。假設(shè)我現(xiàn)在有 4 個(gè)孩子(進(jìn)程)需要喂飯(運(yùn)算),我更喜歡孩子 1(進(jìn)程 1 優(yōu)先級(jí)更高),孩子 2、孩子 3 和孩子 4 一視同仁(進(jìn)程 2、進(jìn)程 3 和進(jìn)程 4 的優(yōu)先級(jí)一致)?,F(xiàn)在我開(kāi)始喂飯了,我不能先把孩子 1 喂飽,再喂其他的孩子,而是需要循環(huán)喂飯(CPU 運(yùn)算時(shí)所有進(jìn)程循環(huán)運(yùn)算)。那么,我在喂飯時(shí)(運(yùn)算),會(huì)先喂孩子 1 一口飯,然后再去喂其他孩子。而且在一次循環(huán)中,先喂孩子 1 兩口飯,因?yàn)槲腋矚g孩子 1(優(yōu)先級(jí)高),而喂其他的孩子一口飯。這樣,孩子 1 會(huì)先吃飽(進(jìn)程 1 運(yùn)算得更快),因?yàn)槲腋矚g孩子 1。

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

1.使用ps-al,可以看進(jìn)程的優(yōu)先級(jí)

linux中進(jìn)程有沒(méi)有優(yōu)先級(jí)

2.PRI和NI

在 Linux 系統(tǒng)中,表示進(jìn)程優(yōu)先級(jí)的有兩個(gè)參數(shù):Priority 和 Nice。

[root@localhost ~]# ps -le
F S UID PID PPID C PRI NI ADDR  SZ WCHAN TTY    TIME  CMD
4 S   0   1    0 0  80  0    - 718     -   ? 00:00:01 init
1 S   0   2    0 0  80  0    -   0     -   ? 00:00:00 kthreadd
...省略部分輸出...

其中,PRI 代表 Priority,NI 代表 Nice。這兩個(gè)值都表示優(yōu)先級(jí),數(shù)值越小代表該進(jìn)程越優(yōu)先被 CPU 處理。不過(guò),PRI值是由內(nèi)核動(dòng)態(tài)調(diào)整的,用戶不能直接修改。所以我們只能通過(guò)修改 NI 值來(lái)影響 PRI 值,間接地調(diào)整進(jìn)程優(yōu)先級(jí)。

PRI 和 NI 的關(guān)系如下:

PRI (最終值) = PRI (原始值) + NI

其實(shí),大家只需要記得,我們修改 NI 的值就可以改變進(jìn)程的優(yōu)先級(jí)即可。NI 值越小,進(jìn)程的 PRI 就會(huì)降低,該進(jìn)程就越優(yōu)先被 CPU 處理;反之,NI 值越大,進(jìn)程的 PRI 值就會(huì)増加,該進(jìn)程就越靠后被 CPU 處理。

修改 NI 值時(shí)有幾個(gè)注意事項(xiàng):

  • NI 范圍是 -20~19。

  • 普通用戶調(diào)整 NI 值的范圍是 0~19,而且只能調(diào)整自己的進(jìn)程。

  • 普通用戶只能調(diào)高 NI 值,而不能降低。如原本 NI 值為 0,則只能調(diào)整為大于 0。

  • 只有 root 用戶才能設(shè)定進(jìn)程 NI 值為負(fù)值,而且可以調(diào)整任何用戶的進(jìn)程。

查看查看并修改nice值的命令

1.用top命令查看并修改nice值

輸入top-按r ,輸入進(jìn)程pid,輸入nice值。(如果顯示拒絕提升的話,使用sudo提升top命令的權(quán)限)。

2.其他概念

  • 競(jìng)爭(zhēng)性:系統(tǒng)數(shù)目很多,但只有cpu數(shù)量少,甚至只有一個(gè),所以進(jìn)程之間是具有競(jìng)爭(zhēng)屬性的。為了高效完成任務(wù),更合理競(jìng)爭(zhēng)相關(guān)資源,便具有了優(yōu)先級(jí)。

  • 獨(dú)立性:多進(jìn)程運(yùn)行,需要獨(dú)享各種資源,所以多進(jìn)程期間互不干擾。

  • 并行:多個(gè)進(jìn)程在多個(gè)cpu中進(jìn)行,同時(shí)進(jìn)行運(yùn)行,稱為并行。

  • 并發(fā):多個(gè)進(jìn)程在一個(gè)cpu上采用進(jìn)程切換的方式,在一段時(shí)間內(nèi),讓多個(gè)進(jìn)程得以推進(jìn),稱為并發(fā)。

進(jìn)程優(yōu)先級(jí)是 PRI 值不是 Nice 值,但是 Nice 值會(huì)影響優(yōu)先級(jí)

PRI 也還是比較好理解的,即進(jìn)程的優(yōu)先級(jí),或者通俗點(diǎn)說(shuō)就是程序被 CPU 執(zhí)行的先后順序,此值越小進(jìn)程的優(yōu)先級(jí)別越高。那 NI 呢?就是我們所要說(shuō)的 nice 值了,其表示進(jìn)程可被執(zhí)行的優(yōu)先級(jí)的修正數(shù)值。如前面所說(shuō), PRI 值越小越快被執(zhí)行,那么加入 nice 值后,將會(huì)使得 PRI 變?yōu)椋?PRI(new)=PRI(old)+nice 。

到目前為止,更需要強(qiáng)調(diào)一點(diǎn)的是,進(jìn)程的 nice 值不是進(jìn)程的優(yōu)先級(jí),他們不是一個(gè)概念,但是進(jìn)程 nice 值會(huì)影響到進(jìn)程的優(yōu)先級(jí)變化。

通過(guò)調(diào)整 nice 值,更改進(jìn)程優(yōu)先級(jí), nice 調(diào)整范圍是 -20~19 。

進(jìn)程優(yōu)先級(jí)與變動(dòng)影響因素與原理

調(diào)度策略: RR 調(diào)度和 FIFO 調(diào)度的進(jìn)程屬于實(shí)時(shí)進(jìn)程,以分時(shí)調(diào)度( OTHER )的進(jìn)程是非實(shí)時(shí)進(jìn)程。

FIFO (先進(jìn)先出)和 RR (時(shí)間片輪轉(zhuǎn))用于實(shí)時(shí)進(jìn)程, OTHER (分時(shí)調(diào)度)用于非實(shí)時(shí)進(jìn)程;實(shí)時(shí)進(jìn)程會(huì)搶占普通進(jìn)程; FIFO 會(huì)導(dǎo)致同優(yōu)先級(jí)實(shí)時(shí)進(jìn)程始終占用 CPU , RR 會(huì)保證同優(yōu)先級(jí)實(shí)時(shí)進(jìn)程按時(shí)間片輪流執(zhí)行。

實(shí)時(shí)進(jìn)程優(yōu)先級(jí)高于普通進(jìn)程,實(shí)時(shí)進(jìn)程使用靜態(tài)優(yōu)先級(jí)調(diào)度、非實(shí)時(shí)進(jìn)程使用動(dòng)態(tài)優(yōu)先級(jí)調(diào)度,非實(shí)時(shí)進(jìn)程動(dòng)態(tài)優(yōu)先級(jí)通過(guò) nice 調(diào)整、可能受 bonus 影響。

Linux進(jìn)程有兩種優(yōu)先級(jí):普通進(jìn)程優(yōu)先級(jí)(使用 SCHED_NORMAL 調(diào)度策略),以及實(shí)時(shí)進(jìn)程優(yōu)先級(jí)(使用 SCHED_FIFO 或 SCHED_RR 調(diào)度策略)

不同調(diào)度策略的實(shí)時(shí)進(jìn)程只有在相同優(yōu)先級(jí)時(shí)才有可比性,任何時(shí)候,實(shí)時(shí)進(jìn)程的優(yōu)先級(jí)都高于普通進(jìn)程

Linux對(duì)實(shí)時(shí)進(jìn)程使用靜態(tài)優(yōu)先級(jí)調(diào)度,對(duì)普通的進(jìn)程(非實(shí)時(shí)進(jìn)程),根據(jù)動(dòng)態(tài)優(yōu)先級(jí)進(jìn)行調(diào)度。

實(shí)時(shí)進(jìn)程,只有靜態(tài)優(yōu)先級(jí)(在 0~MAX_RT_PRIO-1 間,默認(rèn) MAX_RT_PRIO 為 100 ), 內(nèi)核不會(huì)再根據(jù)休眠等因素對(duì)其靜態(tài)優(yōu)先級(jí)做調(diào)整;

實(shí)時(shí)進(jìn)程 0-99 號(hào)優(yōu)先級(jí)每一個(gè)優(yōu)先級(jí)對(duì)應(yīng)一個(gè)優(yōu)先級(jí)隊(duì)列(鏈表),先執(zhí)行數(shù)值高的對(duì)應(yīng)的鏈表(0號(hào)最低),可由后面所述的 chrt 以及 相應(yīng)函數(shù)修改該優(yōu)先級(jí);

非實(shí)時(shí)進(jìn)程靜態(tài)優(yōu)先級(jí)可通過(guò) nice 值( -20~19 )調(diào)整: static_prio=MAX_RT_PRIO + nice + 20 。

nice 只影響非實(shí)時(shí)進(jìn)程(靜態(tài)優(yōu)先級(jí)在 100~139 之間), nice 越大靜態(tài)優(yōu)先級(jí)值越大,優(yōu)先級(jí)越低。

非實(shí)時(shí)進(jìn)程動(dòng)態(tài)優(yōu)先級(jí)根據(jù)靜態(tài)優(yōu)先級(jí)和 bonus 計(jì)算: dynamic_prio = max (100, min (static_prio - bonus + 5, 139))

bonus 反映進(jìn)程平均睡眠時(shí)間(范圍 0~10 ),睡眠時(shí)間越多越可能是交互進(jìn)程,每次輪到它運(yùn)行時(shí)它就越可能不會(huì)使用完時(shí)間片再釋放 cpu 。

以上就是“l(fā)inux中進(jìn)程有沒(méi)有優(yōu)先級(jí)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI