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緩存通常分成了三個級別:L1
,L2
,L3
。級別越小越接近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執行指令,把結果寫到高速緩存;高速緩存中的數據寫回主內存
進程和線程
進程
進程是程序的一次執行過程,是一個動態概念,是程序在執行過程中分配和管理資源的基本單位,
線程
線程是CPU調度和分派的基本單位,它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。
- 聯系
線程是進程的一部分,一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。
- 區別:理解它們的差別,從資源使用的角度出發。(所謂的資源就是計算機里的中央處理器,內存,文件,網絡等等)
根本區別:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位
在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。
所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
內存分配方面:系統在運行的時候會為每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會為線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
包含關系:沒有線程的進程可以看做是單線程的,如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱為輕量級進程。
進程和線程在多核cpu,多cpu中的運行關系
操作系統會拆分CPU為一段段時間的運行片,輪流分配給不同的程序。對於多cpu,多個進程可以並行在多個cpu中計算,當然也會存在進程切換;對於單cpu,多個進程在這個單cpu中是並發運行,根據時間片讀取上下文+執行程序+保存上下文。同一個進程同一時間段只能在一個cpu中運行,如果進程數小於cpu數,那么未使用的cpu將會空閑。
多線程的概念主要有兩種:一種是用戶態多線程;一種是內核態多線程,對於內核態多線程(java1.2之后用內核級線程),在操作系統內核的支持下可以在多核下並行運行;
對於多核cpu,進程中的多線程並行執行。對於單核cpu,多線程在單cpu中並發執行,根據時間片切換線程。同一個線程同一時間段只能在一個cpu內核中運行,如果線程數小於cpu內核數,那么將有多余的內核空閑。