進程,線程與多核,多cpu之間的關係

CPU主頻就是CPU運算時的工作頻率,在單核時間它是決定CPU性能的重要指標,一般以MHz和GHz位單位,如Phenom II X4 965主頻是3.4GHz。說到CPU主頻,就不得不提外頻和倍頻的概念,它們的關係是:主頻=外頻×倍頻。

        雖然提高頻率能有效提高CPU性能,但受限於製作工藝等物理因素,早在2004年,提高頻率便遇到了瓶頸,於是Intel/AMD只能另闢途徑來提升CPU性能,雙核、多核CPU應運而生。

        其實增加核心數目就是爲了增加線程數,因爲操作系統是通過線程來執行任務的,一般情況下它們是1:1對應關係,也就是說四核CPU一般擁有四個線程。但Intel引入超線程技術後,使核心數與線程數形成1:2的關係,如四核Core i7支持八線程(或叫作八個邏輯核心),大幅提升了其多任務、多線程性能。

        CPU的虛擬化技術(Virtualization Technolegy,簡稱VT)就是單CPU模擬多CPU,並允許一個平臺同時運行多個操作系統,而應用程序都可以在互相獨立的空間內運行而互不影響,從而顯著提高工作效率。在Windows 7中安裝XP模式就是一個很好的例子,當需要使用XP時直接調用,不需要重啓切換系統,這點對於程序員來說是非常有用的。
        雖然虛擬化可以通過軟件實現,但是CPU硬件支持的話,執行效率會大大提升,也可以支持64位操作系統,其中Windows 7的XP模式則是必須要CPU的虛擬技術支持。目前Intel/AMD絕大部分CPU都支持虛擬化技術,但對於普通用戶而言,虛擬化技術沒有實質作用。如果要用到虛擬化技術,需要在BIOS開啓技術。

        隨着CPU的性能越來越強大,也帶來了更高的功耗,爲減少CPU閒置使得能量浪費,Intel和AMD均不約而同地爲CPU添加節能技術。Intel方面,採用節能技術叫“Enhance Intel SpeesStep Technology”,簡稱EIST,雖然經過多次增強優化,但名字始終沒變。但名字始終沒變。而AMD的節能技術則是“Cool ‘n’Quiet”,現在已經發展到3.0版。簡單來說,它們均是在CPU空閒時自動降低CPU的主頻,從而降低CPU功耗與發熱量,達到節能目的。

        無論是Intel還是AMD的節能技術,均需要在BIOS開啓纔有效,找到類似EIST(Intel CPU)或(AMD CPU)的選項進行行開啓即可

 

cpu個數是指物理上安裝了幾個cpu,一般的個人電腦是安裝了1個cpu

cpu內核數是指物理上,一個cpu芯片上集成了幾個內核單元,現代cpu都是多核的。

cpu線程數是指邏輯上處理單元,這個技術是Intel的超線程技術,它讓操作系統識別到有多個處理單元。

如下圖所示:插槽指cpu個數,內核數量是2個,線程數是4個

 

上下文切換(也稱做進程切換或任務切換):是指 CPU 從一個進程或線程切換到另一個進程或線程。

進程(有時候也稱做任務):是指一個程序運行的實例。

線程:在 Linux 系統中,線程就是能並行運行並且與他們的父進程(創建他們的進程)共享同一地址空間(一段內存區域)和其他資源的輕量級的進程。

上下文:是指某一時間點 CPU 寄存器和程序計數器的內容。

寄存器:是 CPU 內部的數量較少但是速度很快的內存(與之對應的是 CPU 外部相對較慢的 RAM 主內存)。寄存器通過對常用值(通常是運算的中間值)的快速訪問來提高計算機程序運行的速度。

程序計數器:是一個專用的寄存器,用於表明指令序列中 CPU 正在執行的位置,存的值爲正在執行的指令的位置或者下一個將要被執行的指令的位置,具體依賴於特定的系統。

I/O 可以被定義爲任何信息流入或流出 CPU 與主內存(RAM)。也就是說,一臺電腦的 CPU和內存與該電腦的用戶(通過鍵盤或鼠標)、存儲設備(硬盤或磁盤驅動)還有其他電腦的任何交流都是 I/O。

稍微詳細描述一下,上下文切換可以認爲是內核(操作系統的核心)在 CPU 上對於進程(包括線程)進行以下的活動:
(1)掛起一個進程,將這個進程在 CPU 中的狀態(上下文)存儲於內存中的某處;
(2)在內存中檢索下一個進程的上下文並將其在 CPU 的寄存器中恢復;
(3)跳轉到程序計數器所指向的位置(即跳轉到進程被中斷時的代碼行),以恢復該進程

上下文切換的消耗

上下文切換通常是計算密集型的。也就是說,它需要相當可觀的處理器時間,在每秒幾十上百次的切換中,每次切換都需要納秒量級的時間。所以,上下文切換對系統來說意味着消耗大量的 CPU 時間,事實上,可能是操作系統中時間消耗最大的操作。
Linux相比與其他操作系統(包括其他類 Unix 系統)有很多的優點,其中有一項就是,其上下文切換和模式切換的時間消耗非常少

目錄

cpu架構和工作原理

計算機有5大基本組成部分,運算器,控制器,存儲器,輸入和輸出。運算器和控制器封裝到一起,加上寄存器組和cpu內部總線構成中央處理器(CPU)。cpu的根本任務,就是執行指令,對計算機來說,都是0,1組成的序列,cpu從邏輯上可以劃分爲3個模塊:控制單元、運算單元和存儲單元。這三個部分由cpu總線連接起來。

CPU的運行原理就是:控制單元在時序脈衝的作用下,將指令計數器裏所指向的指令地址(這個地址是在內存裏的)送到地址總線上去,然後CPU將這個地址裏的指令讀到指令寄存器進行譯碼。對於執行指令過程中所需要用到的數據,會將數據地址也送到地址總線,然後CPU把數據讀到CPU的內部存儲單元(就是內部寄存器)暫存起來,最後命令運算單元對數據進行處理加工。週而復始,一直這樣執行下去。

多核cpu和多cpu

架構

多個物理CPU,CPU通過總線進行通信,效率比較低。

多核CPU,不同的核通過L2 cache進行通信,存儲和外設通過總線與CPU通信

cpu的緩存

CPU緩存是位於CPU與內存之間的臨時數據交換器,它的容量比內存小的多但是交換速度卻比內存要快得多。CPU緩存一般直接跟CPU芯片集成或位於主板總線互連的獨立芯片上。

隨着多核CPU的發展,CPU緩存通常分成了三個級別:L1L2L3。級別越小越接近CPU,所以速度也更快,同時也代表着容量越小。L1 是最接近CPU的, 它容量最小(例如:32K),速度最快,每個核上都有一個 L1 緩存,L1 緩存每個核上其實有兩個 L1 緩存, 一個用於存數據的 L1d Cache(Data Cache),一個用於存指令的 L1i Cache(Instruction Cache)。L2 緩存 更大一些(例如:256K),速度要慢一些, 一般情況下每個核上都有一個獨立的L2 緩存; L3 緩存是三級緩存中最大的一級(例如3MB),同時也是最慢的一級, 在同一個CPU插槽之間的核共享一個 L3 緩存。

讀取數據過程。就像數據庫緩存一樣,首先在最快的緩存中找數據,如果緩存沒有命中(Cache miss) 則往下一級找, 直到三級緩存都找不到時,向內存要數據。一次次地未命中,代表取數據消耗的時間越長。

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

進程和線程

  1. 進程是資源分配的最小單位,一個程序有至少一個進程。線程是程序執行的最小單位。一個進程有至少一個線程。
  2. 進程有自己的獨立地址空間,每啓動一個進程,系統就會爲它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴。而線程是共享進程中的數據的,使用相同的地址空間,因此CPU切換一個線程的花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多。
  3. 線程之間的通信更方便,同一進程下的線程共享全局變量、靜態變量等數據,而進程之間的通信需要以通信的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。
  4. 多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉並不會對另外一個進程造成影響,因爲進程有自己獨立的地址空間。

進程和線程在多核cpu,多cpu中的運行關係

多cpu的運行,對應進程的運行狀態;多核cpu的運行,對應線程的運行狀態。

操作系統會拆分CPU爲一段段時間的運行片,輪流分配給不同的程序。對於多cpu,多個進程可以並行在多個cpu中計算,當然也會存在進程切換;對於單cpu,多個進程在這個單cpu中是併發運行,根據時間片讀取上下文+執行程序+保存上下文。同一個進程同一時間段只能在一個cpu中運行,如果進程數小於cpu數,那麼未使用的cpu將會空閒。

進程有自己的獨立地址空間,每啓動一個進程,系統就會爲它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴。而線程是共享進程中的數據的,使用相同的地址空間,因此CPU切換一個線程的花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多。
對於多核cpu,進程中的多線程並行執行,執行過程中存在線程切換,線程切換開銷較小。對於單核cpu,多線程在單cpu中併發執行,根據時間片切換線程。同一個線程同一時間段只能在一個cpu內核中運行,如果線程數小於cpu內核數,那麼將有多餘的內核空閒。

總結

1 單CPU中進程只能是併發,多CPU計算機中進程可以並行。

2單CPU單核中線程只能併發,單CPU多核中線程可以並行。

3 無論是併發還是並行,使用者來看,看到的是多進程,多線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章