操作系統僵尸進程、CFS、上下文切換

進程

Linux的進程調度

CFS 完全公平調度算法

權重和nice值
  • 權重:權重越大,分配的時間比例越大,就相當于進程的優先級越高。 進程的時間 = C P U 總時間 ? 進程的權重 / 就緒隊列所有進程權重之和 進程的時間 = CPU總時間 * 進程的權重/就緒隊列所有進程權重之和 進程的時間=CPU總時間?進程的權重/就緒隊列所有進程權重之和
  • nice值:進程對外的編程接口中使用的是一個nice值,大小范圍是(-20~19),數值越小優先級越大,意味著權重值越大,nice值和權重之間可以轉換的。一個進程每降低一個nice值,就能多獲得10% 的CPU時間。1024權重對應nice值為0,被稱為NICE_0_LOAD。默認情況下,大多數進程的權重都是NICE_0_LOAD
虛擬時間

虛擬時間vruntime和實際時間(wtime)轉換公式如下:

v r u n t i m e = w t i m e ? ( N I C E _ 0 _ L O A D / w e i g h t ) vruntime = wtime * (NICE\_0\_LOAD / weight) vruntime=wtime?(NICE_0_LOAD/weight)?

CFS調度主要保證每個進程運行的虛擬時間一致即可。在選擇下一個即將運行的進程時,只需要找到虛擬時間最小的進程就行了

在運行隊列中用紅黑樹結構組織進程的調度實體,這里進程虛擬時間正是紅黑樹的key,這樣進程就以進程的虛擬時間被紅黑樹組織起來了。紅黑樹的最左子節點,就是虛擬時間最小的進程,隨著時間的推移進程會從紅黑樹的左邊跑到右,然后從右邊跑到左邊,

CFS調度進程

讓虛擬時間最小的進程最先運行, 一旦進程運行虛擬時間就會增加,最后盡量保證所有進程的虛擬時間相等,誰小了就要多運行,誰大了就要暫停運行。

僵尸進程及守護進程?

守護進程

守護進程就是在后臺運?,不與任何終端關聯的進程,?個守護進程的?進程是init進程通常情況下守護進程在系統啟動時就在運?,它們以root??運?,并能處理?些系統級的任務

孤?進程

如果?進程先退出,?進程還沒退出,那么?進程的?進程將變為init進程。(注:任何?個進程都必須有?進程)。孤?進程將被init進程(進程號為1)所收養,并由init進程對它們完成狀態收集?作。因此孤?進程并不會有什么危害

僵?進程

?進程??進程先結束,而?進程?沒有回收?進程,釋放?進程占?的資源,此時?進程將成為?個僵?進程。

?個進程在調?exit命令結束??的?命的時候,其實它并沒有真正的被銷毀, 而是留下?個稱為僵?進程(Zombie)的數據結構

在Linux進程的狀態中,僵?進程是?常特殊的?種,它已經放棄了?乎所有內存空間,沒有任何可執?代碼,也不能被調度,僅僅在進程列表中保留?個位置,記載該進程的退出狀態等信息供其他進程收集。

系統所能使?的進程號是有限的,如果?量的產?僵?進程,將因為沒有可?的進程號而導致系統不能產?新的進程。 此即為僵?進程的危害,應當避免。

??如何避免僵?進程?
  • ?進程通過waitwaitpid等函數等待?進程結束,但是這會導致?進程掛起。

  • 忽略SIGCHLD信號,這常?于并發服務器的性能的?個技巧

    因為并發服務器常常fork很多?進程,?進程終結之后需要服務器進程去wait清理資源。如果將此信號的處理?式設為忽略,可讓內核把僵??進程轉交給init進程去處理,省去了?量僵?進程占?系統資源。

  • 如果?進程很忙可以?signal函數為SIGCHLD注冊handler信號處理函數,在信號處理函數調?wait/waitpid等待?進程退出。

  • 通過兩次調?fork。?進程?先調?fork創建?個?進程然后waitpid等待?進程退出,?進程再fork?個孫進程后退出。這樣?進程退出后會被?進程等待回收,而對于孫?進程其?進程已經退出所以孫進程成為?個孤?進程,孤?進程由init進程接管,孫進程結束后,init會等待回收。

?進程結束后為什么要進?僵?狀態**?**

設置僵?進程的?的是維護?進程的信息,?進程可能要取得?進程的退出狀態等信息。這些信息?少包括進程ID,進程的終?狀態,以及該進程使?的CPU時間,當?進程調?waitwaitpid時就可以得到這些信息。

僵?狀態是每個?進程必經的狀態嗎?

是的。 任何?個?進程(init除外)在exit()之后,并??上就消失掉,而是留下?個稱為僵?進程(Zombie)的數據結構,等待?進程處理。這是每個?進程在結束時都要經過的階段。如果?進程在exit()之后,?進程沒有來得及處理,這時?ps -aux命令就能看到?進程的狀態是“Z”。如果?進程能及時 處理,可能?ps -aux命令就來不及看到?進程的僵?狀態,但這并不等于?進程不經過僵?狀態。

僵尸進程不能將它看成是一個正常的進程,這個進程已經死亡了,用戶區資源已經被釋放了,只是還占用著一些內核資源(PCB)。 僵尸進程就相當于是一副已經腐爛只剩下骨頭的尸體。

僵尸進程的出現是由于這個已死亡的進程的父進程不作為造成的。

消滅僵尸進程的方法是,殺死這個僵尸進程的父進程,這樣僵尸進程的資源就被系統回收了。通過kill -9 僵尸進程PID的方式是不能消滅僵尸進程的,這個命令只對活著的進程有效,僵尸進程已經死了,鞭尸是不能解決問題的。

上下文切換?

CPU上下文切換

根據任務的不同,CPU 的上下文切換就可以分為幾個不同的場景,也就是進程上下文切換線程上下文切換以及中斷上下文切換

系統調用

系統調用過程中,不會涉及到虛擬內存等進程用戶態的資源,也不會切換進程。

  • 進程上下文切換,是指從一個進程切換到另一個進程運行。
  • 而系統調用過程中一直是同一個進程在運行。

所以,系統調用過程通常稱為特權模式切換,而不是上下文切換

進程上下文切換

進程是由內核來管理和調度的,進程的切換只能發生在內核態。所以,進程的上下文不僅包括了虛擬內存、棧、全局變量等用戶空間的資源,還包括了內核堆棧、寄存器等內核空間的狀態。

因此,進程的上下文切換就比系統調用時多了一步:在保存當前進程的內核狀態和CPU寄存器之前,需要先把該進程的虛擬內存、棧等保存下來;而加載了下一進程的內核態后,還需要刷新進程的虛擬內存和用戶棧。(與系統調用的區別?

線程上下文切換
  • 前后兩個線程屬于不同進程。此時,因為資源不共享,所以切換過程就跟進程上下文切換是一樣。
  • 前后兩個線程屬于同一個進程。此時,因為虛擬內存是共享的,所以在切換時,虛擬內存這些資源就保持不動,只需要切換線程的私有數據、寄存器等不共享的數據。
中斷上下文切換

為了快速響應硬件的事件,中斷處理會打斷進程的正常調度和執行,轉而調用中斷處理程序,響應設備事件。而在打斷其他進程時,就需要將進程當前的狀態保存下來,這樣在中斷結束后,進程仍然可以從原來的狀態恢復運行。

  • 中斷上下文切換并不涉及到進程的用戶態。

  • 所以,即便中斷過程打斷了一個正處在用戶態的進程,也不需要保存和恢復這個進程的虛擬內存、全局變量等用戶態資源。

  • 中斷上下文,其實只包括內核態中斷服務程序執行所必需的狀態,包括CPU 寄存器、內核堆棧、硬件中斷參數等。

  • 對同一個 CPU 來說,中斷處理比進程擁有更高的優先級

  • 進程上下文切換一樣,中斷上下文切換也需要消耗CPU

參考:
極客時間

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

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

相關文章

電腦鼠標一直轉圈圈怎么處理?對癥下藥,分享6種方法

在使用電腦的過程中,鼠標一直轉圈圈是一個常見且令人困擾的問題。這種情況通常意味著系統正在處理某些任務,但如果持續時間過長,可能表明系統存在性能問題或錯誤。本文將詳細探討鼠標一直轉圈圈的常見原因及其解決方法。 摘要 電腦鼠標一直轉…

概述:監督學習(分類,回歸)與無監督學習(聚類)

目錄: 一、監督學習:1.什么是監督學習:2.監督學習類型: 二、無監督學習1.什么是無監督學習:2.無監督學習類型: 一、監督學習: 1.什么是監督學習: 當前創造市場價值的機器學習中99%都是監督學習。監督學習…

Django實現部門管理功能

在這篇文章中,我們將介紹如何使用Django框架實現一個簡單的部門管理功能。這個功能包括部門列表展示、添加新部門、編輯和刪除部門等操作。 1. 項目設置 首先,確保你已經安裝了Django并創建了一個新的Django項目。在項目中,我們需要創建一個名為??app01??的應用。 2.…

【前端項目筆記】8 訂單管理

訂單管理 效果展示: 在開發功能之前先創建分支order cls 清屏 git branch 查看所有分支(*代表當前分支) git checkout -b order 新建分支order git push -u origin order 將本地的當前分支提交到云端倉庫origin中命名為order 通過路由方式…

JAVA 和Python對比

JAVA 和Python對比 1 . 數據類型 python Int,float,complex numbers 都沒有定義到底占用多少個字節空間。都是沒有取值范圍,也沒有無符號的情況。 JAVA JAVA 有基礎數據類型,都有確定占多少個字節 2. 全局變量 python 類似…

基于精益轉型打造醫療電子運營新模式

為了保持競爭優勢并滿足日益增長的客戶需求,許多企業開始探索精益轉型之路,以打造醫療電子運營的新模式。本文,深圳天行健精益管理咨詢公司將從精益轉型的概念、實施策略以及面臨的挑戰等方面,深入探討如何通過精益轉型實現醫療電…

面試問題C++

當你將一個無符號整型(unsigned integer)轉換為一個有符號整型(signed integer)時,具體的值取決于原始無符號整型的值以及目標有符號整型的大小。 轉換規則: 如果無符號整型的值在有符號整型的可表示范圍內(即它小于等于INT_MAX),則轉換后的值將保持不變。如果無符號…

【數據結構】(C語言):堆(二叉樹的應用)

堆: 此處堆為二叉樹的應用,不是計算機中用于管理動態內存的堆。形狀是完全二叉樹。堆分兩種:最大堆,最小堆。最大堆:每個節點比子樹所有節點的數值都大,根節點為最大值。最小堆:每個節點比子樹…

python-opencv多態模板匹配簡單代碼實現

在我實驗過程中發現,這種模板匹配如果不做任何處理只對原有圖像進行匹配的話,好像效果很瓜 貌似是模板是1 那就只能檢測出正常形態下的1,變大或者是 l 都不一定檢測到, 也就是說,只能檢測和模板圖片大小尺寸顏色類別…

docker 安裝 禪道

docker pull hub.zentao.net/app/zentao:20.1.1 sudo docker network create --subnet172.172.172.0/24 zentaonet 使用 8087端口號訪問 使用禪道mysql 映射到3307 sudo docker run \ --name zentao2 \ -p 8087:80 \ -p 3307:3306 \ --networkzentaonet \ --ip 172.172.172.…

電腦錄制視頻的軟件,電腦錄制,4款免費軟件推薦

在數字化時代,電腦錄制視頻的軟件已成為我們日常生活和工作中的得力助手,這些軟件可以幫助我們輕松捕獲到屏幕上的精彩瞬間。但同時市面上的錄制視頻軟件也層出不窮,讓人不知該如何選擇。到底怎樣才能選擇到一款適合自己的錄屏軟件呢&#xf…

【SpringBoot3學習 | 第2篇】SpringBoot3整合+SpringBoot3項目打包運行

文章目錄 一. SpringBoot3 整合 SpringMVC1.1 配置靜態資源位置1.2 自定義攔截器(SpringMVC配置) 二. SpringBoot3 整合 Druid 數據源三. SpringBoot3 整合 Mybatis3.1 Mybatis整合3.2 聲明式事務整合配置3.3 AOP整合配置 四. SpringBoot3 項目打包和運行…

k8s-第二節-常用操作

k8s命令行常用操作 k8s命令行 操作對象時都要前面聲明操作對象類型 kubectl get kubectl describe kubectl delete kubectl edit kubectl logs kubectl exec kubectl port-forward 端口轉發將pod 端口映射出來 kubectl cp 本地文件路徑:容器文件路徑 kubectl apply …

【JS場景題】判斷一個元素是否在可視區域內有哪些方法?

方法一、通過元素的位置信息和滾動條滾動的高度來判斷 前置知識 clientWidth: 元素的內容區域寬度加上左右內邊距寬度。offsetTop: 元素的上外邊框至包含元素的上內邊框之間的像素距離。document.documentElement.clientHeight: 獲取視口高度(不包含滾動…

《Attention Is All You Need》解讀

一、簡介 “Attention Is All You Need” 是一篇由Ashish Vaswani等人在2017年發表的論文,它在自然語言處理領域引入了一種新的架構——Transformer。這個架構現在被廣泛應用于各種任務,如機器翻譯、文本摘要、問答系統等。Transformer模型的核心是“自…

小學vr虛擬課堂教學課件開發打造信息化教學典范

在信息技術的浪潮中,VR技術正以其獨特的魅力與課堂教學深度融合,引領著教育方式的創新與教學方法的變革。這一變革不僅推動了“以教促學”的傳統模式向“自主探索”的新型學習方式轉變,更為學生帶來了全新的學習體驗。 運用信息技術融合VR教學…

深度學習1

1.支持向量機Support Vector Machine(SVM)是一種對數據二分類的線性分類器,目的是尋找一個超平面對樣本進行分割,廣泛應用人像識別,手寫數字識別,生物信息識別。 二維空間分割界是一條直線,在三…

table = collections.defaultdict(list)申請的字典的類型是什么?

當你使用 collections.defaultdict(list) 來申請一個字典時,這個字典的類型是 defaultdict,但是其行為和表現方式在某些方面與普通的字典(dict)相似,主要區別在于它如何處理缺失的鍵。 defaultdict 是 Python 標準庫 …

【基礎篇】第4章 Elasticsearch 查詢與過濾

在Elasticsearch的世界里,高效地從海量數據中檢索出所需信息是其核心價值所在。本章將深入解析查詢與過濾的機制,從基礎查詢到復合查詢,再到全文搜索與分析器的定制,為你揭開數據檢索的神秘面紗。 4.1 基本查詢 4.1.1 Match查詢…

Java操作Excel最佳實踐

Java操作Excel最佳實踐 1、背景描述2、Apache POI簡介3、Java讀取Excel 1、背景描述 2、Apache POI簡介 官網&#xff1a;http://poi.apache.org/index.html 官方文檔&#xff1a;https://poi.apache.org/apidocs/index.html 3、Java讀取Excel 3.1、導入依賴 <dependency…