首頁 運維 linux運維 linux中進程有優先權

linux中進程有優先權

Mar 30, 2023 pm 01:45 PM
linux 行程

linux中進程有優先權。 Linux是一個多用戶、多任務的作業系統,系統中通常運行著非常多的進程,但CPU在一個時鐘週期內只能運算一條指令;哪個進程應該先運算,誰應該後運算呢?這就需要由進程的優先權來決定了。在Linux系統中,表示進程優先權的有兩個參數:Pri和Nice;行程優先權是PRI值不是Nice值,但是Nice值會影響優先權。

linux中進程有優先權

本教學操作環境:linux7.3系統、Dell G3電腦。

Linux-進程的優先權

Linux 是一個多用戶、多任務的作業系統,系統中通常運行著非常多的進程。但是CPU 在一個時脈週期內只能運算一條指令(現在的CPU 採用了多執行緒、多核心技術,所以在一個時脈週期內可以運算多條指令。 但是同時運算的指令數也遠小於系統中的進程總數),那問題來了:誰該先運算,誰該後運算呢?這就需要由進程的優先權來決定了。

  • cpu分配資源的先後順序就是優先權

  • #優先權高的行程有優先執行的權利,

  • 可以讓行程運行在指定的cpu上,改善系統整體效能

#另外,CPU 在運算資料時,不是把一個整合算完成,再進行下一個進程的運算,而是先運算進程1,再運算進程2,接下來運算進程3,然後再運算進程1,直到進程任務結束。不僅如此,由於進程優先權的存在,進程並不是依次運算的,而是哪個進程的優先權高,哪個進程會在一次運算循環中被更多次地運算。

這樣說很難理解,我們換個說法。假設我現在有4 個孩子(進程)需要餵飯(運算),我更喜歡孩子1(進程1 優先級更高),孩子2、孩子3 和孩子4 一視同仁(進程2、進程3 和進程4 的優先順序一致)。現在我開始餵飯了,我不能先把孩子 1 餵飽,再餵其他的孩子,而是需要循環餵飯(CPU 運算時所有進程循環運算)。那麼,我在餵飯時(運算),會先餵孩子 1 一口飯,然後再去餵其他孩子。而且在一次循環中,先餵孩子 1 兩口飯,因為我更喜歡孩子 1(優先級高),而餵其他的孩子一口飯。這樣,孩子 1 會先吃飽(進程 1 運算得更快),因為我比較喜歡孩子 1。

檢視進程優先權

#1.使用ps-al,可以看行程的優先權

linux中進程有優先權

#2.PRI和NI

在Linux 系統中,表示進程優先權的有兩個參數: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。這兩個值都表示優先權,數值越小代表該行程越優先被 CPU 處理。不過,PRI值是由核心動態調整的,使用者不能直接修改。所以我們只能透過修改 NI 值來影響 PRI 值,間接地調整進程優先權。

PRI 和NI 的關係如下:

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

其實,大家只需要記得,我們修改NI 的值就可以改變進程的優先權即可。 NI 值越小,進程的 PRI 就會降低,該進程就越優先被 CPU 處理;反之,NI 值越大,進程的 PRI 值就會増加,該進程就越靠後被 CPU 處理。

修改 NI 值時有幾個注意事項:

  • NI 範圍是 -20~19。

  • 一般使用者調整 NI 值的範圍是 0~19,而且只能調整自己的流程。

  • 一般使用者只能調高 NI 值,而不能降低。如原本 NI 值為 0,則只能調整為大於 0。

  • 只有 root 使用者才能設定行程 NI 值為負值,而且可以調整任何使用者的進程。

檢視檢視並修改nice值的指令

1.用top指令檢視並修改nice值

輸入top-按r ,輸入行程pid,輸入nice值。 (如果顯示拒絕提升的話,使用sudo提升top指令的權限)。

2.其他概念

  • 競爭性:系統數目很多,但只有cpu數量少,甚至只有一個,所以進程之間是具有競爭屬性的。為了有效率地完成任務,更合理競爭相關資源,便具備了優先順序。

  • 獨立性:多進程運行,需要獨享各種資源,所以多進程期間互不干擾。

  • 並行:多個行程在多個cpu中進行,同時進行運行,稱為並行。

  • 並發:多個進程在一個cpu上採用進程切換的方式,在一段時間內,讓多個進程得以推進,稱為並發。

進程優先權是PRI 值不是Nice 值,但Nice 值會影響優先權

PRI 也還是比較好理解的,即進程的優先權,或者通俗點說就是程式被CPU 執行的先後順序,此值越小進程的優先級越高。那 NI 呢?就是我們要說的 nice 值了,其表示進程可被執行的優先權的修正數值。如前面所說, PRI 值越小越快被執行,那麼加入 nice 值後,將會使得 PRI 變成: PRI(new)=PRI(old) nice 。

到目前為止,更需要強調一點的是,行程的 nice 值不是行程的優先權,他們不是一個概念,但是行程 nice 值會影響到行程的優先權變更。

透過調整 nice 值,更改行程優先權, nice 調整範圍是 -20~19 。

進程優先權與變動影響因素與原理

調度策略: RR 調度與FIFO 調度的進程屬於即時進程,以分時調度( OTHER )的進程是非即時進程。

FIFO (先進先出)和RR (時間片輪轉)用於實時進程, OTHER (分時調度)用於非實時進程;實時進程會搶佔普通進程; FIFO 會導致同優先權即時進程始終佔用CPU , RR 會保證同優先權即時進程按時間片輪流執行。

即時進程優先權高於普通進程,即時進程使用靜態優先權調度、非即時進程使用動態優先權調度,非即時進程動態優先權透過 nice 調整、可能受 bonus 影響。

Linux進程有兩種優先權:普通進程優先權(使用SCHED_NORMAL 排程策略),以及即時行程優先權(使用SCHED_FIFO 或SCHED_RR 排程策略)

#不同排程策略的即時進程只有在相同優先權時才有可比性,任何時候,實時進程的優先權都高於普通進程

Linux對實時進程使用靜態優先權調度,對普通的進程(非實時進程),根據動態優先權進行調度。

即時進程,只有靜態優先權(在0~MAX_RT_PRIO-1 間,預設MAX_RT_PRIO 為100 ), 核心不會再根據休眠等因素對其靜態優先權做調整;

即時行程0-99 號優先權每一個優先權對應一個優先權佇列(鍊錶),先執行數值高的對應的鍊錶(0號最低),可由後面所述的chrt 以及對應函數修改該優先權;

非即時行程靜態優先權可透過nice 值( -20~19 )調整: static_prio=MAX_RT_PRIO nice 20 。

nice 只影響非即時行程(靜態優先權在 100~139 之間), nice 越大靜態優先權值越大,優先權越低。

非即時進程動態優先權根據靜態優先權和bonus 計算: dynamic_prio = max (100, min (static_prio - bonus 5, 139))

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

相關推薦:《Linux影片教學

以上是linux中進程有優先權的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

vscode上一步下一步快捷鍵 vscode上一步下一步快捷鍵 Apr 15, 2025 pm 10:51 PM

VS Code 一步/下一步快捷鍵的使用方法:一步(向後):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

See all articles