日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

[并发编程] - 操作系统底层工作原理

發布時間:2025/3/21 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [并发编程] - 操作系统底层工作原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 馮諾依曼計算機模型
  • CPU內部結構
    • 控制單元
    • 運算單元
    • 存儲單元
  • CPU緩存結構
    • CPU讀取存儲器數據過程
    • CPU為何要有高速緩存
    • 帶有高速緩存的CPU執行計算的流程
    • CPU運行安全等級
  • 操作系統內存管理
    • 內核線程模型 (KLT)
    • 用戶線程模型 (ULT)


馮諾依曼計算機模型

計算機五大核心組成部分

控制器、運算器、存儲器、輸入、輸出

  • 控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。
  • 運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。
  • 存儲器(Memory):存儲器的功能是存儲程序、數據和各種信號、命令等信息,并在需要時提供這些信息。
  • 輸入(Input system):輸入設備是計算機的重要組成部分,輸入設備與輸出設備合你為外部設備,簡稱外設,輸入設備的作用是將程序、原始數據、文字、字符、控制命令或現場采集的數據等信息輸入到計算機。常見的輸入設備有鍵盤、鼠標器、光電輸入機、磁帶機、磁盤機、光盤機等。
  • 輸出(Output system):輸出設備與輸入設備同樣是計算機的重要組成部分,它把外算機的中間結果或最后結果、機內的各種數據符號及文字或各種控制信號等信息輸出出來。微機常用的輸出設備有顯示終端CRT、打印機、激光印字機、繪圖儀及磁帶、光盤機等。
  • 上圖中最核心部分: CPU和內存


    CPU內部結構

    • 控制單元
    • 運算單元
    • 數據單元

    控制單元

    控制單元是整個CPU的指揮控制中心,由指令寄存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)和 操作控制器OC(Operation Controller) 等組成,對協調整個電腦有序工作極為重要。它根據用戶預先編好的程序,依次從存儲器中取出各條指令,放在指令寄存器IR中,通過指令譯碼(分析)確定應該進行什么操作,然后通過操作控制器OC,按確定的時序,向相應的部件發出微操作控制信號。操作控制器OC中主要包括:節拍脈沖發生器、控制矩陣、時鐘脈沖發生器、復位電路和啟停電路等控制邏輯。


    運算單元

    運算單元是運算器的核心??梢詧绦兴阈g運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。相對控制單元而言,運算器接受控制單元的命令而進行動作,即運算單元所進行的全部操作都是由控制單元發出的控制信號來指揮的,所以它是執行部件。


    存儲單元

    存儲單元包括 CPU 片內緩存Cache和寄存器組,是 CPU 中暫時存放數據的地方,里面保存著那些等待處理的數據,或已經處理過的數據,CPU 訪問寄存器所用的時間要比訪問內存的時間短。 寄存器是CPU內部的元件,寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非???。采用寄存器,可以減少 CPU 訪問內存的次數,從而提高了 CPU 的工作速度。寄存器組可分為專用寄存器和通用寄存器。專用寄存器的作用是固定的,分別寄存相應的數據;而通用寄存器用途廣泛并可由程序員規定其用途。


    CPU緩存結構

    現代CPU為了提升執行效率,減少CPU與內存的交互(交互影響CPU效率),一般在CPU上集成了多級緩存架構,常見的為三級緩存結構

    • L1 Cache,分為數據緩存和指令緩存,邏輯核獨占
    • L2 Cache,物理核獨占,邏輯核共享
    • L3 Cache,所有物理核共享

    • 存儲器存儲空間大小:內存>L3>L2>L1>寄存器
    • 存儲器速度快慢排序:寄存器>L1>L2>L3>內存

    緩存是由最小的存儲區塊-緩存行(cacheline)組成,緩存行大小通常為64byte。

    舉個例子 : 假設你的L1緩存大小是512kb,而cacheline = 64byte,那么就是L1里有512 * 1024/64個cacheline


    CPU讀取存儲器數據過程

    1、CPU要取寄存器X的值,只需要一步:直接讀取。
    2、CPU要取L1 cache的某個值,需要1-3步(或者更多):把cache行鎖住,把某個數據拿來,解鎖,如果沒鎖住就慢了。
    3、CPU要取L2 cache的某個值,先要到L1 cache里取,L1當中不存在,在L2里,L2開始加鎖,加鎖以后,把L2里的數據復制到L1,再執行讀L1的過程,上面的3步,再解鎖。
    4、CPU取L3 cache的也是一樣,只不過先由L3復制到L2,從L2復制到L1,從L1到CPU。
    5、CPU取內存則最復雜:通知內存控制器占用總線帶寬,通知內存加鎖,發起內存讀請求,等待回應,回應數據保存到L3(如果沒有就到L2),再從L3/2到L1,再從L1到CPU,之后解除總線鎖定


    CPU為何要有高速緩存

    CPU在摩爾定律的指導下以每18個月翻一番的速度在發展,然而內存和硬盤的發展速度遠遠不及CPU。這就造成了高性能能的內存和硬盤價格及其昂貴。然而CPU的高度運算需要高速的數據。為了解決這個問題,CPU廠商在CPU中內置了少量的高速緩存以解決I\O速度和CPU運算速度之間的不匹配問題。

    在CPU訪問存儲設備時,無論是存取數據抑或存取指令,都趨于聚集在一片連續的區域中,這就被稱為局部性原理。

    • 時間局部性(Temporal Locality):如果一個信息項正在被訪問,那么在近期它很可能還會被再次訪問。 比如循環、遞歸、方法的反復調用等。
    • 空間局部性(Spatial Locality):如果一個存儲器的位置被引用,那么將來他附近的位置也會被引用。 比如順序執行的代碼、連續創建的兩個對象、數組等。

    帶有高速緩存的CPU執行計算的流程

  • 程序以及數據被加載到主內存
  • 指令和數據被加載到CPU的高速緩存
  • CPU執行指令,把結果寫到高速緩存
  • 高速緩存中的數據寫回主內存

  • CPU運行安全等級

    CPU有4個運行級別,分別為:

    • ring0
    • ring1
    • ring2
    • ring3

    Linux與Windows只用到了2個級別:ring0、ring3,操作系統內部內部程序指令通常運行在ring0級別,操作系統以外的第三方程序運行在ring3級別,第三方程序如果要調用操作系統內部函數功能,由于運行安全級別不夠,必須切換CPU運行狀態,從ring3切換到ring0,然后執行系統函數,所以說JVM創建線程,線程阻塞喚醒是重型操作了,因為CPU要切換運行狀態。

    JVM創建線程CPU的大致工作過程

  • CPU從ring3切換ring0創建線程
  • 創建完畢,CPU從ring0切換回ring3
  • 線程執行JVM程序
  • 線程執行完畢,銷毀還得切會ring0

  • 操作系統內存管理

    操作系統有用戶空間與內核空間兩個概念,目的也是為了做到程序運行安全隔離與穩定,以32位操作系統4G大小的內存空間為例

    Linux為內核代碼和數據結構預留了幾個頁框,這些頁永遠不會被轉出到磁盤上。從 0x00000000 到 0xC0000000(PAGE_OFFSET) 的線性地址可由用戶代碼 和 內核代碼進行引用(即用戶空間)。

    從0xC0000000(PAGE_OFFSET)到 0xFFFFFFFFF的線性地址只能由內核代碼進行訪問(即內核空間)。

    內核代碼及其數據結構都必須位于這 1 GB的地址空間中,但是對于此地址空間而言,更大的消費者是物理地址的虛擬映射。

    這意味著在 4 GB 的內存空間中,只有 3 GB 可以用于用戶應用程序。進程與線程只能運行在用戶方式(usermode)或內核方式(kernelmode)下。

    用戶程序運行在用戶方式下,而系統調用運行在內核方式下。在這兩種方式下所用的堆棧不一樣:用戶方式下用的是一般的堆棧(用戶空間的堆棧),而內核方式下用的是固定大小的堆棧(內核空間的對戰,一般為一個內存頁的大小),即每個進程與線程其實有兩個堆棧,分別運行與用戶態與內核態。

    由空間劃分我們再引深一下,CPU調度的基本單位線程,也劃分為:

  • 內核線程模型(KLT)
  • 用戶線程模型(ULT)
  • 內核線程模型 (KLT)


    內核線程(KLT):系統內核管理線程(KLT),內核保存線程的狀態和上下文信息,線程阻塞不會引起進程阻塞。在多處理器系統上,多線程在多處理器上并行運行。線程的創建、調度和管理由內核完成,效率比ULT要慢,比進程操作快。

    JVM 屬于KLT, 比如一個線程的start方法 ,底層就會在OS上開辟一個線程。


    用戶線程模型 (ULT)


    用戶線程(ULT):用戶程序實現,不依賴操作系統核心,應用提供創建、同步、調度和管理線程的函數來控制用戶線程。不需要用戶態/內核態切換,速度快。內核對ULT無感知,線程阻塞則進程(包括它的所有線程)阻塞。

    協程一般屬于ULT的范疇

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的[并发编程] - 操作系统底层工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。