【Linux進程】進程優先級 Linux 2.6內核進程的調度

前言

? ? ? ? 進程是資源分配的基本單位, 在OS中存在這很多的進程, 那么就必然存在著資源競爭的問題, 操作系統是如何進行資源分配的? 對于多個進程同時運行, 操作系統又是如何調度達到并發呢? 本文將以Linux kernel 2.6為例 , 向大家介紹進程在操作系統中 (OS) 的調度原理;

在這里插入圖片描述

1. 進程優先級

? ? ? 進程優先級是操作系統中用來確定進程獲取 CPU 資源的先后順序的一種機制;

? ? ? ? ?為什么要排隊? 本質是資源不足; 在一臺電腦中可能只有一個CPU, 但是可能會同時啟動多個進程, 那么進程在分配CPU資源時就需要排隊(等待CPU資源);

? ? ? ? ?對于較為重要的進程, 可以設置高優先級,? 高優先級進程有優先執行權利。配置進程優先權對多任務環境的linux很有用,可以改善系統性能。還可以把進程運行到指定的CPU上,這樣一來,把不重要的進程安排到某個CPU,可以大大改善系統整體性能。

使用ps -l查看系統進程:

其中較為重要的信息:

  • UID : 代表執行者的身份
  • PID : 代表這個進程的代號
  • PPID :代表這個進程是由哪個進程發展衍生而來的,亦即父進程的代號
  • PRI :代表這個進程可被執行的優先級,其值越小越早被執行
  • NI :代表這個進程的nice值(在進程PCB中)
    ?

Linux中進程優先級范圍:? 60 ~ 99;

Linux中創建進程,默認進程優先級是 80

?在Linux中支持優先級的動態調整,?? 動態調整的規則:

nice值最小是-20, 超過 -20就統一成 -20;

nice值最大為19, 超過19 統一成19;

?優先級(PRI) 的計算 :? PRI (new) = PRI (old) + nice ;

PRI+ nice值是基于默認值80計算的(不會累計),比如: 先把nice值設為10,那么PRI就會變成90,使用root賬戶將nice值設為-10,PRI就變成了70 ;

用top命令更改已存在進程的nice:

  • top
  • 進入top后按“r”–>輸入進程PID–>輸入nice值

?注意: OS只允許普通用戶把優先級調低, 不允許把優先級調高, root賬戶無限制;

?為什么設置限制?

OS在調度時,為了讓每一個進程較為均衡得到調度;? 如果nice值可以隨意亂改, 就會存在用戶惡意的將自己的進程優先級調高,導致優先級低的進程長時間得不到CPU資源 ;

需要注意的點是,進程的nice值不是進程的優先級,PR I和 NI 他們不是一個概念,但是進程nice值會影響到進程的優先級變化。可以理解nice值是進程優先級的修正修正數據

?幾個較為重要的概念:

  • 競爭性: 系統進程數目眾多,而CPU資源只有少量,甚至1個,所以進程之間是具有競爭屬性的。為了高效完成任務,更合理競爭相關資源,便具有了優先級
  • 獨立性:? 多進程運行,需要獨享各種資源,多進程運行期間互不干擾
  • 并行:??多個進程在多個CPU下分別,同時進行運行,這稱之為并行
  • 并發:?多個進程在一個CPU下采用進程切換的方式,在一段時間之內,讓多個進程都得以推進,稱之為并發

2. 并發

?本文的重點是并發 , 先來介紹一下什么是并發??

? ? ? ? 一個進程在被CPU調度時, 并不是一直占用CPU直至運行結束 ,?? 而是每隔一段時間(這個時間段也叫做時間片)?,它就會被從CPU上被剝離下來 ,? ????????然后會重新放進運行隊列等待被調度,如此反復,直到進程運行完畢; CPU每次調度進程時, 都會到運行隊列中去取;

????????Linux內核支持進程之間CPU資源的搶占,它是一種基于時間片輪轉式搶占式內核,時間片非常的短,輪轉速度非常快(一秒內進程可能被調度了100次),所以我們很難察覺;

新的問題: 進程在運行時會被從CPU上剝離下來, 那下次調度時, CPU是如何知道進程執行到哪里的呢?

?小方框表示寄存器;

????????在CPU當中有很多各種各樣的寄存器:eax、ebx、ecx、edx、ss、ds、cs、gs、fs、ebp、esp、eip..

?寄存器的功能有很多,比如記錄程序/進程的運行狀態(走到那一步);

比如: cpu內:eip:程序計數器;

????????進程在運行時會使用這些寄存器,進程會產生各種各樣的數據,在寄存器中臨時保存 !

????????如果有多個進程,各個進程在CPU內形成的臨時數據,都是不一樣的每個進程運行到哪里,產生的臨時數據,叫做進程硬件上下文;?

????????在進行輪轉切換時會暫時將這個數據存儲到進程PCB里;

注意:

????????在以前老的Linux中是這樣,現在的不是直接保存到PCB,原因是PCB內容太多,太大,但都與PCB有聯系,這里只是可以理解為放在PCB當中;本質就是將CPU寄存器當中的數據保存到內存當中;

????????CPU寄存器硬件只有一套,進程上下文數據有很多套,比如10個進程有10套上下文數據;

????????寄存器 != 寄存器內容

3. Linux kernel 2.6?內核調度隊列與調度原理

? ? ? ? 有了前邊的基礎知識補充, 接下來我們介紹一下Linux kernel 2.6?內核調度隊列以及基本調度原理;

一個CPU擁有一個runqueue(如果有多個CPU就要考慮進程個數的負載均衡問題)

?下圖就是Linux2.6內核中進程隊列的數據結構:

?優先級:

  • ?普通優先級: 100~ 139
  • ?實時優先級: 0~ 99(不關心)

100~139就是我們使用指令看到的40個優先級; 從第100號開始(PRI: 60), 優先級依次向下遞減;

?如下圖:

?CUP調度隊列中的進程是如果直接遍歷一遍隊列, 然后依次調度進程, 遍歷的過程也會造成資源的浪費; 所以在設計時加入了nr_active 和?bitmap[5];

????????int整形占4個字節,32個bit位 5 x 32 也就是 160個 bit位 (足夠表示140個優先級) ; 利用位圖映射可以極大的提高效率;?

?????????nr_active判斷隊列是否有進程,bitmap位圖映射快速找到進程位置,這樣下來輪轉一次的效率就會非常高,時間復雜度接近O(1) ;

在操作系統中會維護兩個這樣的隊列 (活動對列 和 過期隊列);?

????????進程在活動隊列并不一定就運行完了,可能是時間片結束了,被調度完之后就會加入到了過期隊列;

同時還會維護兩個指針:

  • void *active? ?活動隊列
  • void *expired? ?過期隊列

CPU只會執行active指針指向的隊列???????

?????????當進程優先級為99的進程正在被執行時,新插入一些優先級較高的進程,這些進程會被插入
到過期隊列當中;? (如果直接插入到活動隊列,那就會導致優先級較低的隊列一直等待,進而引發進程饑餓問題)

????????這樣一來,?過期隊列的進程不斷增多,?由于不會插入新的進程,所以它的進程數量一定會越來越少;當active指針指向的活動隊列執行完畢,就將兩個指針指向的隊列進行交換即可

????????原本的活動隊列執行空了,再來新的進程就插入到這個隊列,這個隊列會繼續作為過期隊列
如此循環,最終就完成了進程的調度;

???????????????這樣的設計方式不僅提高了效率,并且也解決了進程饑餓問題;


總結

? ? ? ? ?進程是資源分配的基本單位, 在OS中存在這很多的進程, 那么就必然存在著資源競爭的問題, 于是便有了進程優先級來確認進程調度的先后順序;? 但這也可能會伴隨著進程饑餓的問題,? 而在Linux2.6版本中的進程調度設計很好的解決這些問題; 具有很高的參考學習的價值;? 好了以上便是本文的全部內容, 希望對你有所幫助 , 感謝閱讀 !

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40445.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【網絡安全】第7講 計算機病毒概述(筆記)

一、計算機病毒的簡介 1、名稱的由來 由生物醫學上的 “病毒” 一詞借用而來。 (1)與生物醫學上“病毒”的異同 同:都具有傳染性、流行性、針對性等。異:不是天生的,而是人為編制的具有特殊功能的程序。 2、病毒的起…

免費代理 IP 如何泄露您的個人信息?

互聯網時代,信息安全和隱私保護成為人們關注的焦點。很多用戶出于各種需要,使用代理服務器瀏覽網頁或進行其他網絡活動,其中免費代理IP因其免費的特點而受到廣泛青睞。然而,免費代理IP并不總是一個安全可靠的選擇,它們…

process.env 管理 Vue 項目的環境變量(Vue項目中環境變量的配置及調用)

簡述:在構建 Vue 應用時,管理配置是開發中的一個重要部分。不同的環境(如開發、測試和生產)往往需要不同的配置,例如 API、 基礎 URL、第三方服務的密鑰等。使用環境變量可以幫助我們更好地管理這些配置。這里將介紹如…

每天10個js面試題(二)

1.事件輪詢? JavaScript 是單線程的,同一時間只能做一件事。所有任務都需要排隊,前一個任務結束,才會執行后一個任務,為了保證任務有序的執行,事件輪詢就是單線程任務調度的一種方式,單線程任務…

1014-01SF 同軸連接器

型號簡介 1014-01SF是Southwest Microwave的一款2.92 mm 同軸連接器。這款連接器外殼采用鋼CRES 合金 UNS S30300,觸點采用鈹銅 (BeCu),UNS C17300,并經過金鍍處理,以確保良好的導電性和耐腐蝕性。適用于高頻微波應用,…

如何設計通用用戶、權限、菜單數據表

在設計一個通用的用戶、權限和菜單管理系統時,我們通常需要創建幾個核心的數據庫表來管理用戶信息、角色信息、權限信息以及菜單信息。下面是一個基于SQL的示例,展示了如何建立這些基礎表格。 數據庫表設計 1. 用戶表 (users) Sql 1CREATE TABLE user…

從 0 到 1 安裝運行 Qwen2

環境信息: PyTorch 2.0.0 Python 3.8(ubuntu20.04) Cuda 11.8 RTX 3090(24GB) * 1 模型 /home/zhangwei/llm 源碼 /usr/local/project/conda/Qwen/Qwen mkdir -p /usr/local/project/conda/Qwen #【用來存放Qwen2源碼】 mkdir -p /home/zhangwei/llm #【用來存放Q…

機器人典型的交互任務、阻抗控制的示意圖、內涵、意義、存在的交互控制科學問題

機器人典型的交互任務 機器人在實際應用中經常需要完成與環境的交互任務,這些任務包括但不限于: 裝配任務:在制造業中,機器人需要準確地操控和組裝各種零部件,包括不同形狀、大小和材質的物體。搬運任務:…

科普文:一文搞懂nginx原理和實戰

1. Nginx簡介與核心架構 1.1 Nginx簡介 Nginx (engine x) 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP 郵件代理服務器。 由 Igor Sysoev 于2004年首次發布,其設計目標是解決 C10K 問題,即在一臺服務器上同時處理一萬個并…

The Sandbox 人物化身每月獎勵: 七月版來了!

人物化身的持有者可以從 The Sandbox 領取自己的隊服! 視頻:https://youtu.be/tSo5FPL7DhE 我們又推出了人物化身所有者月度獎勵!在七月,我們將通過 The Sandbox 隊服來弘揚體育競技精神。穿上這些時尚的元宇宙隊服,代…

Java:HashMap底層原理

一、前言 在Java 7及之前的版本中,HashMap的底層數據結構主要是數組加鏈表,在Java 8中,HashMap的底層數據結構是數組鏈表紅黑樹的組合。 二、底層數據結構 1. 數組 初始化和擴容:HashMap首先會初始化一個指定長度的數組&#xf…

單機多網卡互通——問題跟蹤+工具分析

一、背景 想搭建soft ROCE(RXE)與實體ROCE設備互聯的測試環境&#xff0c;為了節省機器以及使用方便&#xff0c;預想在配備ROCE卡的主機上&#xff0c;用另一個網卡綁定soft ROCE&#xff0c;然后互通。 [ETH1 ROCE] <--------------------> [ETH2 RXE] 二、問題跟…

Appium元素定位(全網詳細講解)(二)

1.appium inspector&#xff08;定位元素的工具&#xff09;使用方法 詳細介紹&#xff1a; 詳細解釋&#xff1a; 圖標名稱說明1Show Element Handles是否顯示元素句柄2Select Elements選擇元素定位3Tap/Swipe By Coordinates按坐標點擊/滑動4Download Screenshot下載屏幕截…

2024機器遺忘(Machine Unlearning)技術分類-思維導圖

1 介紹 機器遺忘&#xff08;Machine Unlearning&#xff09;是指從機器學習模型中安全地移除或"遺忘"特定的數據點或信息。這個概念源于數據隱私保護的需求&#xff0c;尤其是在歐盟通用數據保護條例&#xff08;GDPR&#xff09;等法規中提出的"被遺忘的權利…

【漏洞復現】飛企互聯-FE企業運營管理平臺——SQL注入

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 飛企互聯-FE企業運營管理平臺是一個基于云計算、智能化、大數據…

【8】相關補充

【8】相關補充 文章目錄 前言一、不同模型在測試集上的精度二、實驗記錄三、SNP位點篩選及其它python腳本四、總結五、后續安排總結 前言 存放一些有關這個項目研究的補充。 三葉青圖像識別研究簡概 一、不同模型在測試集上的精度 存放了不同識別模型在測試集上精度評估展示…

Java中的時間日期處理與時區管理

Java中的時間日期處理與時區管理 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在現代軟件開發中&#xff0c;時間日期處理和時區管理是至關重要的部分。Jav…

Android HWASAN使用與實現原理

一、背景 為了提前檢測出Android User Sapce的app或native進程的內存錯誤問題&#xff0c;幫助研發定位與分析這些問題&#xff0c;基于Android 14版本上對HWASAN做了調研分析。 二、ASAN介紹 HWASAN是在ASAN的基礎上做了拓展&#xff0c;因此在介紹HWASAN之前先了解下ASAN.…

ES8.13.0 java client請求響應報錯status: 200, [es/search] Failed to decode response

最近在做商城項目使用ES8.13.0做商品復雜的檢索功能時&#xff0c;遇到一個報錯如下&#xff1a; 2024-07-05 10:47:53.994 ERROR 10708 --- [nio-7500-exec-1] com.tfq.exception.RRExceptionHandler : co.elastic.clients.transport.TransportException: node: http://1…

WBCE CMS v1.5.2 遠程命令執行漏洞(CVE-2022-25099)

前言 CVE-2022-25099 是一個影響 WBCE CMS v1.5.2 的嚴重安全漏洞&#xff0c;具體存在于 /languages/index.php 組件中。該漏洞允許攻擊者通過上傳精心構造的 PHP 文件在受影響的系統上執行任意代碼。 技術細節 受影響組件&#xff1a;/languages/index.php受影響版本&…