文章目錄
引言:
對應著處理器從單核到多處理器及多核,作業系統的發展曆程中,從進程演化到線程、多線程。於是,我們會想到這些問題:
1、為什麼微處理要從單核轉向多核?
功耗問題限制了單核處理器不斷提高效能的發展途徑:
作為電腦核心,影響電腦效能高低的核心組件就是處理器。反映在指令上就是處理器執行指令的效率。
處理器效能 = 主頻 x IPC
可以看出,衡量處理器效能的主要指標是每個刻度內可以執行的指令數(IPC)和處理器的主頻。
因此,提高處理器效能就是兩個途徑:
提高主頻和提高每個刻度內執行的指令數(IPC)。
1)處理器微架構的變化可以改變IPC,效率更高的微架構可以提高IPC從而提高處理器的效能。但是,對於同一代的架構,改良架構來提高IPC的幅度是非常有限的,所以在單核處理器時代通過提高處理器的主頻來提高效能就成了唯一的手段。
2)然而,給處理器提高主頻不是沒有止境的,從下面的推導中可以看出,處理器的功耗和處理器內部的電流、電壓的平方和主頻成正比,而主頻和電壓成正比。
處理器功耗 正比於 電流 x 電壓 x 電壓 x 主頻
主頻 正比於 電壓
處理器功耗 正比於 主頻的三次方
3)如果通過提高主頻來提高處理器的效能,就會使處理器的功耗以三次方而非線性(一次方)的速度急劇上升,很快就會觸及frequency wall。過快的能耗上升,需要尋找提高處理器效能的因子,提高IPC。
提高IPC可以通過提高指令執行的並行度來實現,而提高並行度有兩種途徑:一是提高處理器微架構的並行度;二是採用多核架構。
在採用同樣的微架構的情況下,為了達到處理器IPC的目的,我們可以採用多核的方法,同時有效地控制功耗的急劇上升。
處理器功耗 正比於 電流x 電壓 x 電壓 x 主頻
IPC 正比於 電流
處理器功耗 正比於 IPC
由單核處理器增加到雙核處理器,如果主頻不變的話,IPC理論上可以提高一倍,功耗理論上也就最多提高一倍,因為功耗的增加是線性。而實際情況是,雙核處理器效能達到單核處理器同等效能的時候,前者的主頻可以更低,因此功耗的下降也是三次方下降的。反映到產品中就是雙核處理器的起跳主頻可以比單核處理器更低,效能更好。
由此可見,將來處理器發展的趨勢是:為了達到更高的效能,在採用相同微架構的情況下,可以增加處理器的核心數量同時維持較低的主頻。這樣設計的效果是,更多的並行提高IPC,較低的主頻有效地控制了功耗的上升。
2、為什麼提出線程?
其目的有二:
1)如上面所提到的,更好的支援SMP和多核:進程在SMP上可以同時使用多個cpu或者核執行各個線程,很好的支援並行。
2)減小環境切換的開銷:同一進程的線程共用資源、狀態記錄等;實現同類任務的記憶體塊共用,對邏輯記憶體重用,而進程間只能實現對實體記憶體的分時共用。
3、執行緒模式
針對上述兩大目的,相應的提出了兩大執行緒模式:使用者級線程和核心級線程;分類的標準在於線程的調度者在核內還是核外。
其中,核內的可以實現並發;核外的使得環境切換開銷更小。
1、核心以線程為單位,控制線程的分發調度;
2、單純的使用者線程的調度全部在核外實現,只需完成線程運行棧的切換,但由於核心訊號都以進程為單位,無法定位到線程,因此不能用於多處理器系統。
於是,現在的大多作業系統不是採用單一的執行緒模式,而是將兩個模型結合起來,譬如Solaris和Linux]都是採用這樣的混合模型:
1、提供核心線程,高層包括基本抽象,如硬體狀態和軟體上下文,滿足SMP;
2、支援線程庫,一個核心線程成為多個使用者線程的調度者,進而減小了上下文開銷。每個使用者線程可以獨立於該進程的其他線程進行調度執行。
這個模型中,一個進程的某個線程(核心線程)由核內調度,而他又可以調度使用者線程。其目的是保證核心負載最小的條件下,一個進程可以建立大量使用者線程,為並發提供條件。