進程調度的基本過程

文章目錄

  • CPU執行指令過程
  • 進程
    • PCB
    • “分時復用”
  • ??結語


CPU執行指令過程

一個CPU能執行那些指令,可以認為是cpu最初設計的時候就已經寫死了。有一個“表格”描述了都有哪些指令。
在這里插入圖片描述

以上的表格只是一個簡化版本,真實的cpu指令表要復雜很多。此處假設每個指令只有8bit(實際上更長)。
RAM即內存,它的全稱叫做隨機訪問存儲器。

8 bit的指令可以分成兩個部分,前4個bit 是 操作碼,表示指令是干啥的,后4bit 是操作數。
在這里插入圖片描述
CPU中存在了一個特殊的寄存器,“程序計數器”,它保存了接下來要從哪個內存位置來執行指令。隨著指令的執行,這里的值也會隨著更新,默認情況下就是+1自增過程(順序執行),如果遇到“跳轉類語句”(if、while、for、函數調用…)那么它就會設為其他的值。

執行指令的三個階段:

  1. 取指令,cup從內存中讀取到指令內容到cpu內部
  2. 解析指令,識別出這個指令是干啥的,以及對應的功能和操作數
  3. 執行指令

  1. 初始情況下,程序計數器的值是0

    1. 讀取指令
      在這里插入圖片描述
    2. 解析指令
      把讀到的指令一分為二
      左邊這里就是操作碼
      在這里插入圖片描述
      右邊這里就是操作數
      在這里插入圖片描述

    操作碼表示它是干啥的指令;操作數表示這個指令是對誰操作的。
    我們可以去指令表中看這個操作碼是啥意思。這個指令是LOAD A指令,并且后面的 1110 表示了一個內存地址。這個指令的工作就是把 1110 這個地址的數據,讀取到寄存器 A 中。
    3. 執行指令
    把1110 (十進制的14) 地址的內存數據讀取出來,放到寄存器A中。第一條指令執行完畢,系統會自動把程序計數器中的值++

  2. 執行為1的指令

    1. 讀取指令
      在這里插入圖片描述
      2. 解析指令
      把指令拆成 0001(操作碼) 和 1111(操作數)。
      這個指令是LOAD B,就要把1111(十進制的15)地址上的數據讀到寄存器B中。
      3. 執行指令
      找到15這個地址上的數據,讀到B寄存器中。之后程序計數器++(1 -> 2)。

進程

進程就是正在執行的應用程序。
談的一個應用程序,有兩種狀態

  1. 沒有運行的時候,是一個 exe 文件,躺在硬盤上。
  2. 運行的時候,exe 就會被加載到內存中,并且cup執行里面的指令了

執行進程里的指令,需要硬件資源。
在這里插入圖片描述
進程是操作系統進行資源分配的基本單位。

由于一個系統上進程比較多,所以需要管理

  1. 描述:通過 結構體/類,把進程中的各種屬性表示出來
  2. 組織 :通過數據結構,把多個上面的結構體串起來,并進一步的進行各種增刪查改。

對于Linux操作系統來說,它使用“PCB(進程控制塊)”這樣的結構體來描述進程信息的。
我們可以簡單認為,通過鏈表的方式,把上述多個PCB串到一起。
創建新的進程,就相當于創建了一個PCB結構體,并且插入到鏈表中;銷毀進程,就是把PCB從鏈表上刪除掉,并且釋放這個PCB結構體;查看進程列表,就是中遍歷這個鏈表,依次顯示出對應的信息。

注意:以上只是簡化版本,方便理解,實踐的情況要更復雜,不只是一個鏈表...

PCB

PCB有啥信息?
PCB是一個非常復雜的結構體,里面包含了非常多的屬性。我們在這里只討論一些關鍵的信息~

  1. PID 進程的標識符
    同一時刻,一個機器上的多個進程之間PID是唯一的,不會重復,系統內部的很多操作,都是通過PID找到對應的進程的。
    在這里插入圖片描述
    2. 內存指針(一組)
    它描述進程依賴的指令和數據都在內存的哪個區域
    操作系統運行exe就會讀取exe中的指令和數據,并把它們加載到內存中(內存地址)。
    (側面表示出,進程的執行需要一定的內存資源)
    3. 文件描述符表(順序表/數組)
    它描述了進程打開了那些文件(對于到硬盤上的數據),進程中打開了某個文件,就會在順序表中添加一項。
    (側面表示出,進程的執行需要一定的硬盤資源)
    4. 進程狀態
    5. 進程的優先級
    6. 進程的上下文
    7. 進程的記賬信息

4、5、6、7這幾個屬性共同決定了進程調度。我們把他們放在一塊分析。

計算機上同時存在百八十個進程,這么多進程都是要執行的。
CPU負責執行,CPU每個核心可以執行一個進程。我這臺電腦CPU是6核12線程(6個物理核心,12個邏輯核心),只能同時執行12個進程呀~其他進程咋辦呢?

這就不得不提到操作系統進程調度的關鍵——“分時復用”了

“分時復用”

這個時刻CPU運行進程1,運行一會,CPU運行進程2,過一會運行進程3…
由于CPU運算速度非常快,使上述的切換速度也非常快,肉眼察覺不到,站在宏觀角度(人),就好像是同時執行了,這叫做“并發執行”。

現在有有了多核心CPU,每個核心和核心之間,微觀上也能同時執行不同的進程,這叫做“并行執行”。

并發/并行,都是操作系統內核統一調度的,程序員/普通用戶感知不到~
因此,平時也把并行和并發統稱為“并發”,對于的編程的手法也就稱為“并發執行”。

  1. 進程狀態
    可以隨時被調度到CPU上執行指令的,稱為“就緒狀態”。
    因為要做一些其他的工作,比如進行IO操作(讀寫硬盤/讀寫網卡…),無法調度到CPU上執行,這稱為“阻塞狀態”。
    其實進程還有其他的狀態,此處就不展開了~

  2. 進程優先級
    進程優先級就是來解決誰先來,誰后來,誰多執行,誰少執行的問題的。

  3. 進程的上下文
    分時復用,一個進程執行一會之后,就要從CPU上調度走,過一段時間,還會調度回CPU,此時就要沿著上次執行的結果,繼續往后執行~
    進程的上下文對于進程來說就是寄存器中的值,CPU有很多寄存器,這些寄存器共同描述了上下文。
    PCB是內存的數據,把寄存器中的值都保存到PCB特定屬性中,下次調度PCB就可以從這里的屬性中把數據恢復到對應的寄存器中了。

  4. 進程的記賬信息
    在優先級的加持之下,就會使不同的進程吃到的資源差異越來越大。
    操作系統會去統計每一個進程在CPU上執行的時間,系統就會根據這個來進一步的調整調度的策略。

這幾個屬性相互配合,共同構成了進程調度的核心邏輯~
上述的調度過程,都是系統內核負責完成的,雖然是在系統內核完成的,但是我們寫程序的時候還是會受到影響的,因此還是需要了解上述的調度過程的!

本文到這里就結束啦~


??結語

山外青山樓外樓,莫把百尺當盡頭。
保持空杯心態加油努力吧!


都看到這里啦!真棒(*^▽^*)

可以給作者一個免費的贊贊嗎,這將會鼓勵我繼續創作,謝謝大家

如有紕漏或錯誤,歡迎指正


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

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

相關文章

RUC2024《綜合設計》期中測試

T1 原題鏈接https://www.luogu.com.cn/problem/P1025 不是我出的 T2 原題鏈接:https://www.luogu.com.cn/problem/P26787 這道題就是講過的二分貪心,先二分規定每兩個點之間都必須大于等于某個值,然后依次枚舉通過貪心求出最少需要刪除的點數…

薄冰英語語法學習--名詞2-格

名詞后面 s,代表后面這個東西屬于前面的。 比如toms book,湯姆的書。 末尾是s,那么直接在最后加就行了。比如boys,男孩們的 表示幾個詞共同 的所有關系在最后一個詞的詞尾加 sMary and Toms books 瑪麗和湯姆共有的書表示幾個詞…

深入探討C++的高級反射機制

反射是一種編程語言能力,允許程序在運行時查詢和操縱對象的類型信息。它廣泛應用于對象序列化、遠程過程調用、測試框架、和依賴注入等場景。 由于C語言本身的反射能力比較弱,因此C生態種出現了許多有趣的反射庫和實現思路。我們在本文一起探討其中的奧秘…

DOM遍歷

DOM 遍歷是指在 HTML 文檔中導航和定位元素的過程。通過 DOM 遍歷,您可以在文檔中移動并查找特定的元素,以便對其進行操作或者檢索信息。 尋找子元素 //DOM遍歷 const h1 document.querySelector(h1);//尋找子元素 console.log(h1.querySelectorAll(.…

每天一個數據分析題(三百九十)- 多元線性回歸

在多元線性回歸中,下列哪項可以緩解多重共線性問題? A. 取對數 B. 平方 C. 去除異常值 D. 逐步回歸 數據分析認證考試介紹:點擊進入 題目來源于CDA模擬題庫 點擊此處獲取答案 數據分析專項練習題庫 內容涵蓋Python,SQL&am…

從入門到精通:使用Python的Watchdog庫監控文件系統的全面指南

從入門到精通:使用Python的Watchdog庫監控文件系統的全面指南 引言Watchdog庫概述核心組件工作原理 快速開始:設置Watchdog安裝Watchdog創建一個簡單的監控腳本設置和啟動Observer 事件處理:如何響應文件系統的變化基本事件處理處理復雜的場景…

論文生成新紀元:探索頂尖AI寫作工具的高效秘訣

在學術探索的征途中,AI論文工具本應是助力前行的風帆,而非讓人陷入困境的漩渦。我完全理解大家在面對論文壓力的同時,遭遇不靠譜AI工具的沮喪與無奈。畢竟,時間可以被浪費,但金錢和信任卻不可輕棄。 作為一名資深的AI…

@Transactional(rollbackFor = Exception.class)注解

當作用于類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。 在項目中,Transactional(rollbackForException.class),如果類加了這個注解,那…

Java使用Graphics2D畫圖,畫圓,矩形,透明度等實現

背景 如上圖,需要使用Java生成一個圖片, 并以base64編碼的形式返回給前端展示。 使用Graphics2D類,來進行畫圖,其中需要畫方框、原型、插入圖標、寫入文字等,同時需要設置透明度等細節點 環境:Jdk17&#…

Java面試八股之JVM內存泄漏按照發生的方式可以分為哪幾類

JVM內存泄漏按照發生的方式可以分為哪幾類 常發性內存泄漏(Frequent Memory Leak) 這類內存泄漏發生的代碼會被頻繁執行,每次執行時都會導致一塊或多塊內存無法被回收。由于泄漏行為重復發生,故稱為常發性。這類泄漏通常比較容易…

下一代廣域網技術2:SRv6

2.SRv6 SR架構設計之初,就為SR數據平面設計了兩種實現方式:一種是SR-MPLS,其重用了MPLS數據平面,可以在現有IP/MPLS網絡上增量部署;另一種是SRv6,使用IPv6數據平面,基于IPv6路由擴展頭進行擴展…

Docker部署常見應用之Oracle數據庫

文章目錄 安裝部署參考文章 安裝部署 使用Docker安裝Oracle數據庫是一個相對簡便的過程,可以避免在本地環境中直接安裝Oracle數據庫的復雜性。 安裝Docker環境:確保你的系統上已經安裝了Docker,并且Docker服務正在運行。具體的安裝方法可以根…

使用North自部署圖床服務

圖床 圖床可以把圖片轉為鏈接,從而方便我們書寫、分享博客,目前圖床主要分為以下幾類: 利用 Git 倉庫存儲對象存儲(OSS、COS、七牛云等)免費公共圖床(SM.MS、聚合圖床、ImgTP、Postimage等) 但上述圖床都…

低應變復習題

1.比較臨塑荷載、臨界荷載和極限荷載的大小( ) A、臨塑荷載<臨界荷載<極限荷載 B、臨塑荷載>臨界荷載<極限荷載 C、臨塑荷載<臨界荷載>極限荷載 D、臨塑荷載>臨界荷載>極限荷載 參考答案:A 2.面關于低應變反射波法的描述,正確的是:( ) A、反射…

【雜記-淺談BGP邊界網關協議】

BGP邊界網關協議 一、BGP邊界網關協議概述二、BGP的特點及與IGP的區別三、BGP的路由屬性四、BGP協議中使用的報文 一、BGP邊界網關協議概述 1、BGP&#xff0c;Border Gateway Protocol&#xff0c;即邊界網關協議&#xff0c;是一種在自治系統&#xff08;AS&#xff09;之間…

Websocket實現方式二——注解方式

添加Websocket依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>根據ServerEndpoint注解注冊Websocket Configuration public class AgentWsConfig …

多項式回歸(Linear Regression)原理詳解及Python代碼示例

多項式回歸原理詳解 多項式回歸&#xff08;Polynomial Regression&#xff09;是線性回歸&#xff08;Linear Regression&#xff09;的一種擴展形式。它通過在輸入變量上添加高次項來擬合非線性關系。雖然多項式回歸本質上還是線性模型&#xff0c;但它允許模型在輸入特征的多…

if action和Switch之間該怎么選擇?

1. Switch 2. If及If Action Subsystem 3.結論 元素很多&#xff0c;用switch 元素少&#xff0c;用if或switch 如果...很多&#xff0c;用if

職業技能大賽引領下大數據專業實訓教學的改革研究

隨著信息化時代的加速發展&#xff0c;大數據專業作為新興的熱門領域&#xff0c;正日益成為高等職業教育體系中不可或缺的一部分&#xff0c;其承擔著為社會培養大批具有高素質應用技能的大數據技術人才的重任。職業技能大賽作為檢驗和提升學生技能水平的有效平臺&#xff0c;…

web學習筆記(六十九)vue2

1. vue2創建腳手架項目 &#xff08;1&#xff09;在cmd窗口輸入npm install -g vue/cli命令行&#xff0c;快速搭建腳手架。 &#xff08;2&#xff09; 創建vue2項目 &#xff08;3&#xff09; 選擇配置項目&#xff0c;最下面的選項是自己重新配置&#xff0c;第一次創建v…