Linux中進程的屬性:進程優先級

一、優先級和進程優先級

1.1什么是優先級

優先級就是獲取某種資源的先后順序,比如打飯時排隊:排隊就是在確認優先級

1.2為什么要有優先級

本質上其實是目標資源相對于需求者來說比較少,如CPU,磁盤,顯示器,鍵盤等相對于進程來說并不充足

1.3優先級與權限有類似的地方,他們的區別是什么

優先級:能使用資源,決定誰先誰后問題

權限:決定能不能使用資源的問題

1.4進程優先級與競爭性的體現

1.4.1進程優先級競爭的資源

優先級的存在是因為資源較少,需要排順序來競爭資源分配,那么對于進程優先級來說競爭的資源是什么呢?

競爭的是CPU資源

1.4.2競爭性的體現

競爭性的原因:資源稀缺

系統中進程數目很多,但是CPU很少,進程之間就有了競爭屬性

為了更高效地完成任務,更合理地競爭資源,便有了進程優先級

二、進程優先級是怎么實現的

2.1用戶名和與之強相關的UID

2.1.1UID是什么

在Linux下,會為每個用戶維護一個對應的UID整形值來代表用戶名所對應地字符串

可以使用ls -n來查看

可以發現在-n選項下,用戶名 my_normal對應的字符串被替換成了整數1000?

2.1.2為什么要有UID

UID標識了用戶ID,代表進程是哪一個用戶啟動的

①Linux下一切皆文件,每個文件都會記錄自己的擁有者,所屬組以及對應的權限

②Linux下所有操作都是進程來完成,進程也屬于文件,自然要記錄“擁有者”,即:“誰(哪個用戶)啟動的我”

總而言之,進程通過記錄“誰啟動的我”來判斷自身是否屬于文件的擁有者/所屬組,以此確定是否有權限進行一些操作,這就是權限控制實現的底層原理,也是UID的意義

2.2task_struct中優先級屬性的實現原理

task_struct中的優先級屬性是通過特定的幾個int類型的變量來表示優先級的(優先級數字越小,代表優先級越高)

查看優先級:

可以通過ps -la指令查看所有自己創建的進程的詳細信息,包括其優先級

其中:PRI和NI對應的就是優先級屬性

PRI:最終優先級

NI:是nice(細微)的簡寫,代表優先級的修正數據

最終優先級=默認PRI(例子中為80)+NI

2.3如何修改進程優先級(注:此功能不是高頻使用的,且不建議修改)

修改進程優先級使用的是top指令的一個功能:

進入top指令->輸入r->輸入PID->輸入nice值

(注:OS禁止頻繁修改優先級,同時UID對應用戶沒有權限的話也不允許修改)

原進程:

top的r功能:

?輸入一個大于等于19的數,修改后:

再輸入一個小于等于-20的數,觸發OS保護機制,不允許連續修改進程優先級

?切換為root賬戶再修改:

綜上,NI值有范圍限制,在[-20,19]之間 ,共40個數字

2.3補:為什么要把nice值設置在一個可控范圍內?為什么是[-20,19]?

分時OS的進程調度需要遵循盡量公平的原則,如果有一個進程優先級特別高,會破壞這一公平性

2.4進程切換

2.4.1時間片的概念與時間片對于進程有什么影響

①時間片

Linux基于時間片進行輪轉調度,一個進程的時間到了它的時間片,進程切換

②時間片對于進程的影響

時間片到了,這一進程并不一定跑完,因此進程需要保存自己的運行狀態,在任何地方都可以被重新調度

2.4.2結合實際生活中的例子理解輪轉調度

就像在學校轉而去當兵入伍,確定入伍名額需要向學校申請保留學籍

退伍后,需要向學校申請恢復學籍

其中保留學籍的目的是留存歷史的學習痕跡,保留不是目的,而是手段,未來的恢復才是目的

類比起來

①學生就像進程,CPU就像學校,部隊就像OS中,在學校學習的時間就是時間片

②保留學籍就像保存上下文數據

③恢復學籍就像回復上下文數據

2.4.3切換過程和理解

①進程在運行的過程中,會有許多臨時數據在CPU的寄存器中保存,CPU內部有多個寄存器,我們稱之為“一套寄存器”

CPU如何得知當前運行到代碼中哪一行了呢?

是依靠pc指針與ir指針

磁盤中的代碼和數據加載到內存中,在這段內存空間中,每一句代碼都有自己的地址

此時的eip寄存器(又名pc指針,i是instruction的簡寫,意思為指令;p是point的簡寫,意思是指針)存儲當前正在執行指令的下一條指令的地址

ir寄存器:指令寄存器,保存的是當前從內存加載到CPU中,正在執行的指令

②CPU內部寄存器中的一系列數據,是進程執行時的瞬時狀態信息數據(又名上下文數據)

2.4.3補:寄存器!=寄存器里的上下文數據,還有其他內容

2.4.4進程切換的核心:上下文數據的保存和恢復

進程切換的核心就是進程上下文數據的保存和恢復,一個可執行程序開始運行的過程:

①pc中存main函數的地址,

②之后把執行加載到ir中,更新pc值

③ir將指令交給CPU中一個控制器來執行,執行結束進行下一行代碼的讀取

之后運行進程一的時間片,到時間后換到進程二,以此類推

假如這個過程不保護(不保存上下文數據):

進程一運行結束,回到調度隊列,CPU中pc指針讀取了進程二的首語句,會把原來進程一的痕跡覆蓋;下一次輪到進程一執行,找不到上次的痕跡,無法繼續運行

無法完成調度與切換

做保護:

會在CPU外的某個位置將進程一的上下文數據保存起來,再進行pc指針讀取進程二首語句

進程切走:將相關寄存器數據保存起來

進程切回:將歷史保存的寄存器數據恢復到寄存器中

2.4.5進程切換過程中,CPU寄存器被共享使用

每個進程都有自己的上下文數據,這些上下文數據需要加載到CPU寄存器內部來使用,而CPU寄存器只有一套,所以CPU被多個進程共享使用

2.4.6每個進程的上下文數據究竟存儲在哪里

現在電腦對于進程上下文數據的保護體系已經十分完善了,涉及到多個位置

但我們可以理解為上下文數據保存在內存的PCB中

源碼中可以看出端倪:

在task_struct中有一個tss的定義,而它是這個:

?所以進程的上下文數據保存在任務狀態段(TSS) 的結構體中

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

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

相關文章

基于LangChain 實現 Advanced RAG-后檢索優化(上)-Reranker

摘要 Advanced RAG 的后檢索優化,是指在檢索環節完成后、最終響應生成前,通過一系列策略與技術對檢索結果進行深度處理,旨在顯著提升生成內容的相關性與質量。在這些優化手段中,重排序優化(Reranker)作為核…

【云備份】熱點管理模塊

目錄 1.熱點管理文件的基本思路 2.熱點管理類的設計 3.熱點管理類的實現 1.熱點管理文件的基本思路 服務器端的熱點文件管理是對上傳的非熱點文件進行壓縮存儲,節省磁盤空間。 而熱點文件的判斷在于上傳的文件的最后一次訪問時間是否在熱點判斷時間之內。 實…

LeetCode 560. 和為 K 的子數組 | 前綴和與哈希表的巧妙應用

文章目錄 方法思路:前綴和 哈希表核心思想關鍵步驟 代碼實現復雜度分析示例解析總結 題目描述 給定一個整數數組 nums 和一個整數 k,請統計并返回該數組中和為 k 的子數組的數量。 子數組是數組中連續的非空元素序列。 示例 輸入:nums …

Windows配置grpc

Windows配置grpc 方法一1. 使用git下載grph下載速度慢可以使用國內鏡像1.1 更新子模塊 2. 使用Cmake進行編譯2.1 GUI編譯2.2 命令行直接編譯 3. 使用Visual Studio 生成解決方法 方法二1. 安裝 vcpkg3.配置vckg的環境變量2. 使用 vcpkg 安裝 gRPC3. 安裝 Protobuf4. 配置 CMake…

【算法基礎】快速排序算法 - JAVA

一、算法基礎 1.1 什么是快速排序 快速排序(Quick Sort)是一種高效的分治排序算法,由英國計算機科學家Tony Hoare于1960年提出。它的核心思想是: 選擇一個基準元素(pivot)將數組分成兩部分:小…

Linux用戶管理命令和用戶組管理命令

一、用戶管理命令 1.1、adduser 添加新用戶 1、基本語法 adduser 用戶名 (功能描述:添加新用戶) 應用場景1:企業開發,多人協同(也會有多人使用相同的一個低權限用戶)。 應用場景2&#x…

記錄兩個免費開源又好用的后臺模版vue3

一.element-plus-admin 一套基于vue3、element-plus、typesScript、vite的后臺集成方案 1.簡介 vue-element-plus-admin 是一個基于 element-plus 免費開源的中后臺模版。使用了最新的 Vue3,Vite,Typescript等主流技術開發,開箱即用的中后…

Flip PDF Plus Corp7.7.22電子書制作軟件

flip pdf plus corporate7.7.22中文版由FlipBuilder官方出品的一款企業級的翻頁電子書制作軟件,擁有豐富的模板,主題和動畫場景,每本書最大頁數1000頁,每本書的最大大小1GB,即可以幫助企業用戶制作好豐富的電子書籍。 …

C語言藍橋杯真題代碼

以下是不同屆藍橋杯C語言真題代碼示例,供參考: 第十三屆藍橋杯省賽 C語言大學B組 真題:卡片 題目:小藍有很多數字卡片,每張卡片上都是數字1-9。他想拼出1到n的數列,每張卡片只能用一次,求最大的…

[Windows] Kazumi番劇采集v1.6.9:支持自定義規則+在線觀看+彈幕,跨平臺下載

[Windows] Kazumi番劇采集 鏈接:https://pan.xunlei.com/s/VOPLMhEQD7qixvAnoy73NUK9A1?pwdtu6i# Kazumi是一款基于框架; 開發的輕量級番劇采集工具,專為ACG愛好者設計。通過;自定義XPath規則; 實現精準內容抓取,支持多平臺(An…

探秘數據結構:構建高效算法的靈魂密碼

摘要 數據結構作為計算機科學的基石,其設計與優化直接影響算法效率、資源利用和系統可靠性。本文系統闡述數據結構的基礎理論、分類及其核心操作,涵蓋數組、鏈表、棧、隊列、樹、圖、哈希表與堆等經典類型。深入探討各結構的應用場景與性能對比&#xf…

機器人--架構及設備

機器人的四大組成部分 控制系統 驅控系統 執行系統 電機屬于執行系統的設備。 傳感系統 傳感系統分為內部傳感系統和外部傳感系統。 內部傳感系統(內部傳感器): 用于獲取機器人內部信息,比如IMU,力傳感器等。 外部傳感系統(外部傳感器):…

人工智能:如何快速篩選出excel中某列存在跳號的單元格位置?

前提: 電腦上必須提前安裝好了【office AI】軟件工具 方法如下: 1、打開要操作的excel表格,點擊上方的【officeAI】,再點擊左邊的【右側面板】按鈕,就會出現如下右側的【OfficeAI助手】 2、在OfficeAI助手的聊天框…

Spring MVC入門

介紹了Spring MVC框架的概念、特征及核心功能,通過案例詳細介紹了Spring MVC開發所需要的開發環境以及基本的開發步驟。 一、Spring MVC框架概述 Spring MVC是Spring框架的一個模塊,是一個基于Java的實現了MVC設計模式的輕量級Web框架。它通過一套注解和…

貪心算法求解邊界最大數

貪心算法求解邊界最大數(拼多多2504、排列問題) 多多有兩個僅由正整數構成的數列 s1 和 s2,多多可以對 s1 進行任意次操作,每次操作可以置換 s1 中任意兩個數字的位置。多多想讓數列 s1 構成的數字盡可能大,但是不能比…

Ubuntu ZLMediakit的標準配置文件(rtsp->rtmp->hls)

最近在工作中遇到不生成hls資源的問題,后面發現是配置文件有誤,特此記錄正確的config.ini配置文件,方便查閱。 最終解決方案,通過下面這種格式可以訪問到flv視頻,具體為什么不太清楚,rtmp格式:rtmp://39.113.48.113:8089/live/1744168516937396175 記錄最終解決方案:ht…

# LeetCode 1007 行相等的最少多米諾旋轉

LeetCode 1007 行相等的最少多米諾旋轉 原題英文:Minimum Domino Rotations For Equal Row 難度:中等 | 標簽:數組、貪心 1?題目重述 給定兩行長度相同的多米諾骨牌: tops[i] 表示第?i?張骨牌上面的數字;bottoms[…

大數據技術:從趨勢到變革的全景探索

??個人主頁??:一ge科研小菜雞-CSDN博客 ????期待您的關注 ???? 在數字化時代的浪潮下,大數據已經不再是一個陌生的概念。從日常生活中的社交媒體,到企業決策支持系統,再到公共管理的大數據應用,它正在改變著我們的工作和生活方式。隨著技術的進步,傳統的數據…

前端八股Day5——XHS某中廠實習前端一面

沒寫完,睡醒補 CSS盒模型 //出現頻率好高,感覺每次寫面經都遇到 W3C標準盒模型(content-box):盒子寬高width/heightpaddingbordermargin IE怪異盒模型(border-box):盒子寬高width/heigth(包括padding和border)margin 默認標準切換…

INP指標

什么是INP(Interaction to Next Paint) 參考網站:webVital-INP文檔 定義與核心目標 INP 是一項穩定的 Core Web Vitals 指標,通過統計用戶訪問期間所有符合條件的互動約定時間,評估網頁對用戶操作的總體響應能力。最…