【Linux】進程切換與優先級

前言:

? ? ? ? 上文我們講到了操作系統與Linux中進程的狀態【Linux】進程狀態-CSDN博客

? ? ? ? 本文我們來講進程的優先級、以及進程的切換

進程優先級

什么是優先級??

? ? ? ? CPU中資源是有限的,而進程的數量一定是遠大于CPU資源的,所以優先級是進程得到CPU資源的先后順序優先級也是進程的屬性之一,保存在PCB中。

優先級的實現

優先級是進程的屬性之一,保存在PCB中。

? ? ? ? 優先級中PCB中用整型表示,其值越小表示優先級越高,反之優先級越低

? ? ? ? 優先級是可以被修改。但考慮到時間片的分時操作系統,以及公平性,優先級不能出現大幅度的修改。

? ? ? ? 如上圖,我在Linux中使用執行查看當前正在運行的進程信息。可以看到紅圈這兩個值:

? ? ? ? PRI:表示進程的優先級,其默認值是80

? ? ? ? NI:表示進程優先級的修正數據,稱為nice值

? ? ? ? 優先級的修改:是通過nice值的修改實現的,既最終的優先級 = PRI + NI

? ? ? ? 如圖,通過renice指令來修改進程的優先級后,我們再次查看進程信息可以發現第一個被修改的進程NI變成了10最終的優先級變成了90。?說明默認值是不改變的,優先級修改是通過nice值的修改而實現的

? ? ? ?

補充:UID

? ? ? ? 如上圖,我們可以看到第三列有一個叫做UID的。那什么是UID呢?

? ? ? ? UID:user id,表示用戶標識符?

? ? ? ? 在linux中任何訪問資源的操作都是進程實現的,進程代表當前的用戶。那系統是如何判斷當前進程訪問的權限的呢?

? ? ? ? 其實就是通過UID實現的:通過進程中的UID文件的UID相比較,就可以判斷出這個進程的訪問權限是擁有者、所屬組還是other

優先級的極值

? ? ? ? 如圖可知,優先級的范圍是[60 - 99],而nice值的范圍是[-20 - 19]

? ? ? ? 優先級范圍設置的并不寬泛,因為優先級范圍設置過大會導致,優先級低的進程長時間不能獲得CPU資源,進而導致:進程饑餓

?

進程關系

競爭性:進程與進程之間是存在競爭關系的。CPU資源有限,為獲得CPU資源,為了高效完成任務,更合理的競爭相關資源,便有了優先級。

獨立性:多進程運行時,各個進程之間是獨享資源的,互不干擾。

并行:多個進程在多個CPU下,同時運行。

并發:多個進程在一個CPU下不停的切換運行,在一段時間內,讓多個進程不斷推進。

進程切換

????????進程的切換討論范圍在長代碼與死循環代碼,因為較短的代碼一瞬間就執行完畢了,沒有切換這一說法

死循環進程

? ? ? ? 死循環進程一段占用CPU執行代碼,會一直占用CPU嗎?

? ? ? ? 并不會,因為在計算機是分時操作系統,在進程執行的過程中存在“時間片”每個進程都有其適合的“時間片”(本質其實就是計數器),時間片達到時,進程就會從CPU上剝離下來

? ? ? ? 所以死循環并不會一直占用CPU。

CPU中的寄存器

? ? ? ? CPU中存在各種各樣的寄存器,用于保存當前正在運行進程的各種臨時數據

? ? ? ? 寄存器就是CPU內部的臨時空間

? ? ? ? 寄存器!=寄存器中的數據

如何切換

? ? ? ? A進程占用CPU執行完一個時間片后,要被剝離CPU,進而執行下一個進程。

? ? ? ? 那么當再次執行A進程時,應該從上次執行位置開始繼續向下執行。?這就意味著剝離時,需要當前進程把自己的上下文記錄下來,以便于下一次繼續執行。

? ? ? ? 進程上下文保存到了哪里呢?保存到了進程task_struct的TSS中(TSS:任務狀態段),下一次執行時,之間覆蓋CPU中的寄存器內容即可

? ? ? ? 對于以及執行過的進程才需要記錄上下文,對于之前還沒有執行過的繼承無需記錄,及其將寄存器內容初始化即可。

Linux中真實的調度算法:O(1)調度算法

? ? ? ? 如上圖,runqueue是一個運行隊列,且一個CPU只有一個運行隊列。

queue[140]

????????我們先來介紹一下queue[140]:它的數據類型是 struct task_struct*

struct task_struct* queue[140]

? ? ? ? queue一共有140個元素,一個元素就是一個進程隊列,其下標映射了優先級。前100個元素代表實時優先級(我們不關心)后40個代表我們上面所講的普通優先級

? ? ? ? 我們之前講到優先級的范圍是:60~99,那對應在queue中的下標表示就是:100~139(x - 60 +100)。比如優先級為64的進程就會鏈接至下標為104的節點下,多個優先級一樣的進程都會被依次鏈接在同一個進程隊列中

bitmap

? ? ? ? bitmap[5]用于在queue中快速查找進程

? ? ? ? bitmap的數據類型是 unsigned int,一個元素有32bit,一個有5個這樣的元素。

? ? ? ? 用bit位記錄進程信息,0表示沒有進程,1表示有進程。從下標0開查詢,一次性查詢32個位置,并從最后一個“1”開始調用進程(既優先級最高的進程位置)。

nr_active

? ? ? ? 記錄進程的個數,當進程個數為0時,不在使用bitmap查詢進程。

過期隊列與活躍隊列

? ? ? ? 在圖中我們可以看到有兩個一模一樣的隊列結構(藍框與紅框),并由兩個指針分別指向:active(活躍)、expired(過期)。

? ? ? ? active指向的隊列叫做活躍隊列,反之另一個叫過期隊列

? ? ? ? 活躍隊列上的進程是要占用CPU資源,執行代碼的。當活躍隊列上的進程執行完一個時間片后,會放到過期隊列中的相應位置上(優先級對應的位置)。當活躍隊列上的進程全部執行完時,active指針與expired指針交換:過期隊列再次變為活躍隊列,繼續執行之前的進程

Linux中進程切換的整體過程

? ? ? ? 1.由bitmap在活躍隊列中查詢進程位置(優先級最高進程的位置)? ? ? ?

????????2.依次占用CPU資源,執行相關進程

? ? ? ? 3.時間片耗盡,記錄上下文后從CPU上剝離,并鏈接至過期隊列中

? ? ? ? 4.直到活躍隊列中沒有進程,指針交換,再次循環至第一步

補充:

? ? ? ? 如果新建了一個進程,是插入活躍隊列還是過期隊列?

? ? ? ? :活躍隊列,新創建的進程應該盡快獲得執行機會,而不是放入已經執行過的過期隊列中等待下一次的調度

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

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

相關文章

首發即開源!DAWorkBench數據可視化分析軟件正式發布!(附源碼下載網址)

1 系統介紹DAWorkBench是一款面向科研實驗和工程測試場景的數據可視化分析開源軟件,支持實現數據清洗、信號處理和交互式可視化等功能。系統集成文件IO、數據處理以及可視化交互三大模塊,支持多維數據分析與高質量圖表生成,助力用戶高效完成從…

Android Studio歷史版本快速下載(二次修改記錄)

原版:Android Studio歷史版本快速下載_android studio 歷史版本下載-CSDN博客 一. 最新版本 https://developer.android.com/studio?hlzh-cn 二. 歷史版本 中國官網的歷史版本為何不能下載?(https://developer.android.com/studio/archi…

The Missing Semester of Your CS Education 學習筆記以及一些拓展知識(六)

文章目錄The Missing Semester of Your CS Education 學習筆記以及一些拓展知識版本控制Git筆記部分Git的基本工作原理Git 的核心工作原理:快照而非差異Git 的三大工作區域Git的核心對象Git的四個對象對象之間的關系與工作流程:對象的引用Git的安裝和基礎…

嵌入式與 Linux 系統中的核心圖形庫全解析

嵌入式與 Linux 系統中的核心圖形庫全解析 圖形庫在嵌入式系統與 Linux 桌面系統中扮演著重要角色。從最底層的 GPU 驅動接口,到上層的圖形渲染與 GUI 工具包,共同構成了完整的圖形顯示棧。本文將系統整理圖形相關的核心組件,按功能分層分類&…

深度學習模塊實踐手冊(第十二期)

56、Ghost 模塊論文《GhostNet: More Features from Cheap Operations》1、作用: Ghost 模塊是一種輕量級的特征提取模塊,旨在通過廉價操作生成更多特征圖,減少計算量的同時保持模型性能。傳統卷積神經網絡在生成特征圖時存在大量冗余計算&am…

自己動手造輪子:如何創建JAR并通過Maven在Spring Boot中引用

讓代碼復用變得簡單優雅——3分鐘學會封裝專屬工具庫作為Java開發者,你是否遇到過這些痛點?多個項目重復編寫相同工具類工具代碼分散難以統一維護團隊協作缺乏標準化工具庫本文將手把手教你創建自己的JAR包,并優雅地集成到Spring Boot項目中&…

使用dea工具 給vue 里面的ts打斷點

在 Vue 項目中使用 TypeScript 時,我們通常會在 IDE(如 JetBrains 的 IntelliJ IDEA 或 WebStorm)中設置斷點進行調試。以下是詳細步驟: 準備工作 確保項目已配置 source maps(Vue CLI 創建的項目默認已配置&#xff0…

Zabbix 企業級分布式監控

目錄 簡介 一、監控系統基礎 1.1 監控的價值 1.2 監控的 5 大類型與 5 大層次 1.3 監控系統的實現原理 二、Zabbix:企業級監控方案 2.1 Zabbix 簡介 2.2 Zabbix 核心功能特性 2.3 Zabbix 角色與架構 三、Zabbix 部署案例 3.1 資源清單 3.2 基礎環境配置…

SQL JOIN 全解析:用 `users` 與 `orders` 表徹底掌握內連接、左連接、右連接

SQL JOIN 全解析:用 users 與 orders 表徹底掌握內連接、左連接、右連接 在日常開發中,SQL 的連接(JOIN)語句是數據庫查詢的核心技能。尤其在多表聯合查詢時,不掌握好 INNER JOIN、LEFT JOIN、RIGHT JOIN,…

(一)從零搭建unity3d機械臂仿真-unity3d導入urdf模型

1.新建工程并加載模型 (1)unity中新建3d工程 (2)將機器人模型導入到unity3d中 導入開源Unity-Robotics-Hub的機械臂。 詳細操作參考視頻 ROS Unity URDF Import Testing Robot Motion 使用 URDF Importer工具 在 Unity 中&#x…

Linux之網絡部分-應用層自定義協議與序列化

一、應用層 1.1、理解協議 協議是一種 "約定". socket api 的接口, 在讀寫數據時, 都是按 "字符串" 的方式來發送接收的。如果我們要傳輸一些 "結構化的數據" 怎么辦呢? 其實,協議就是雙方約定好的結構化的數據。 1.2、網絡版計…

機器學習week3-分類、正則化

1. 邏輯回歸1.1. 線性回歸 vs 邏輯回歸對比維度線性回歸邏輯回歸任務類型回歸(預測連續值)分類(預測離散類別)輸出范圍(?∞,∞)[0,1](概率值)損失函數均方誤差(MSE)對數損失&#x…

FastAdmin 中生成插件

在 FastAdmin 中生成一個 OCR 發票識別插件,可以按照以下步驟進行開發。這里假設你已經熟悉 FastAdmin 插件開發的基本流程,并會使用 Composer 和 PHP 擴展。1. 創建插件骨架使用 FastAdmin 命令行工具生成插件基礎結構:php think addon -a o…

DevExpress WinForms中文教程:Grouping(分組)- 如何自定義分組算法?

DevExpress WinForms擁有180組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝…

PHP 與 Vue.js 結合的前后端分離架構

PHP 與 Vue.js 結合是構建現代 Web 應用的流行技術棧,通常采用 前后端分離架構。以下是關鍵要點和推薦實現方案: 一、技術棧組合 角色技術選項后端 (PHP)Laravel (推薦)、Symfony、CodeIgniter前端 (Vue)Vue 2/3、Vue Router、Pinia/Vuex、Vite通信協議…

XML高效處理類 - 專為Office文檔XML處理優化

/**** 提供XML讀取、寫入、修改、查詢等高級功能,支持命名空間和復雜XML結構* * 主要功能:* 1. 復雜路徑解析(支持屬性篩選、索引、通配符)* 2. 完整節點類型支持(元素、文本、CDATA、注釋、PI)* 3. 高效元…

星慈光編程蟲2號小車講解第一篇--向前向后

星慈光編程蟲2號小車是一款基于微控制器(如Arduino)的編程教學小車,常用于學習機器人控制和編程基礎。本講解將重點介紹小車的基本運動:前進、后退、左轉和右轉。這些運動通過控制電機實現,通常涉及調整電機的方向和速…

iOS 加固工具有哪些?快速發布團隊的實戰方案

在當今快速迭代的 iOS 開發環境中,團隊需要在高頻上線與應用安全之間找到平衡。快速發布不應犧牲安全性,而安全加固也不應成為阻礙上線的瓶頸。這就要求開發者在加固工具的選型與流程設計上,做到既高效又可靠。 那么,iOS 加固工具…

結構型模式-架構解耦與擴展實踐

結構型模式聚焦于對象間的組合關系,通過優化類與對象的裝配方式,實現系統的靈活性與可擴展性。在分布式系統中,由于多節點協作、跨網絡通信及異構環境集成等特性,傳統結構型模式需進行適應性改造,以應對分布式特有的復…

scratch筆記和練習-第三課

角色的大小變化 亮度等特效設置 流程圖圖形符號 Figma攻略:26個流行流程圖符號及其解釋 練習 實現在閃動10次后角色緩緩變回原形