日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

文章目錄

  • 馮諾依曼計(jì)算機(jī)模型
  • CPU內(nèi)部結(jié)構(gòu)
    • 控制單元
    • 運(yùn)算單元
    • 存儲單元
  • CPU緩存結(jié)構(gòu)
    • CPU讀取存儲器數(shù)據(jù)過程
    • CPU為何要有高速緩存
    • 帶有高速緩存的CPU執(zhí)行計(jì)算的流程
    • CPU運(yùn)行安全等級
  • 操作系統(tǒng)內(nèi)存管理
    • 內(nèi)核線程模型 (KLT)
    • 用戶線程模型 (ULT)


馮諾依曼計(jì)算機(jī)模型

計(jì)算機(jī)五大核心組成部分

控制器、運(yùn)算器、存儲器、輸入、輸出

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


    CPU內(nèi)部結(jié)構(gòu)

    • 控制單元
    • 運(yùn)算單元
    • 數(shù)據(jù)單元

    控制單元

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


    運(yùn)算單元

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


    存儲單元

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


    CPU緩存結(jié)構(gòu)

    現(xiàn)代CPU為了提升執(zhí)行效率,減少CPU與內(nèi)存的交互(交互影響CPU效率),一般在CPU上集成了多級緩存架構(gòu),常見的為三級緩存結(jié)構(gòu)

    • L1 Cache,分為數(shù)據(jù)緩存和指令緩存,邏輯核獨(dú)占
    • L2 Cache,物理核獨(dú)占,邏輯核共享
    • L3 Cache,所有物理核共享

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

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

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


    CPU讀取存儲器數(shù)據(jù)過程

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


    CPU為何要有高速緩存

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

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

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

    帶有高速緩存的CPU執(zhí)行計(jì)算的流程

  • 程序以及數(shù)據(jù)被加載到主內(nèi)存
  • 指令和數(shù)據(jù)被加載到CPU的高速緩存
  • CPU執(zhí)行指令,把結(jié)果寫到高速緩存
  • 高速緩存中的數(shù)據(jù)寫回主內(nèi)存

  • CPU運(yùn)行安全等級

    CPU有4個(gè)運(yùn)行級別,分別為:

    • ring0
    • ring1
    • ring2
    • ring3

    Linux與Windows只用到了2個(gè)級別:ring0、ring3,操作系統(tǒng)內(nèi)部內(nèi)部程序指令通常運(yùn)行在ring0級別,操作系統(tǒng)以外的第三方程序運(yùn)行在ring3級別,第三方程序如果要調(diào)用操作系統(tǒng)內(nèi)部函數(shù)功能,由于運(yùn)行安全級別不夠,必須切換CPU運(yùn)行狀態(tài),從ring3切換到ring0,然后執(zhí)行系統(tǒng)函數(shù),所以說JVM創(chuàng)建線程,線程阻塞喚醒是重型操作了,因?yàn)镃PU要切換運(yùn)行狀態(tài)。

    JVM創(chuàng)建線程CPU的大致工作過程

  • CPU從ring3切換ring0創(chuàng)建線程
  • 創(chuàng)建完畢,CPU從ring0切換回ring3
  • 線程執(zhí)行JVM程序
  • 線程執(zhí)行完畢,銷毀還得切會(huì)ring0

  • 操作系統(tǒng)內(nèi)存管理

    操作系統(tǒng)有用戶空間與內(nèi)核空間兩個(gè)概念,目的也是為了做到程序運(yùn)行安全隔離與穩(wěn)定,以32位操作系統(tǒng)4G大小的內(nèi)存空間為例

    Linux為內(nèi)核代碼和數(shù)據(jù)結(jié)構(gòu)預(yù)留了幾個(gè)頁框,這些頁永遠(yuǎn)不會(huì)被轉(zhuǎn)出到磁盤上。從 0x00000000 到 0xC0000000(PAGE_OFFSET) 的線性地址可由用戶代碼 和 內(nèi)核代碼進(jìn)行引用(即用戶空間)。

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

    內(nèi)核代碼及其數(shù)據(jù)結(jié)構(gòu)都必須位于這 1 GB的地址空間中,但是對于此地址空間而言,更大的消費(fèi)者是物理地址的虛擬映射。

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

    用戶程序運(yùn)行在用戶方式下,而系統(tǒng)調(diào)用運(yùn)行在內(nèi)核方式下。在這兩種方式下所用的堆棧不一樣:用戶方式下用的是一般的堆棧(用戶空間的堆棧),而內(nèi)核方式下用的是固定大小的堆棧(內(nèi)核空間的對戰(zhàn),一般為一個(gè)內(nèi)存頁的大小),即每個(gè)進(jìn)程與線程其實(shí)有兩個(gè)堆棧,分別運(yùn)行與用戶態(tài)與內(nèi)核態(tài)。

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

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


    內(nèi)核線程(KLT):系統(tǒng)內(nèi)核管理線程(KLT),內(nèi)核保存線程的狀態(tài)和上下文信息,線程阻塞不會(huì)引起進(jìn)程阻塞。在多處理器系統(tǒng)上,多線程在多處理器上并行運(yùn)行。線程的創(chuàng)建、調(diào)度和管理由內(nèi)核完成,效率比ULT要慢,比進(jìn)程操作快。

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


    用戶線程模型 (ULT)


    用戶線程(ULT):用戶程序?qū)崿F(xiàn),不依賴操作系統(tǒng)核心,應(yīng)用提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來控制用戶線程。不需要用戶態(tài)/內(nèi)核態(tài)切換,速度快。內(nèi)核對ULT無感知,線程阻塞則進(jìn)程(包括它的所有線程)阻塞。

    協(xié)程一般屬于ULT的范疇

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

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。