SMP是什么?
SMP 英文為Symmetric Multi-Processing ,是對稱多處理結(jié)構(gòu)的簡稱,是指在一個計(jì)算機(jī)上匯集了一組處理器(多CPU),各CPU之間共享內(nèi)存子系統(tǒng)以及總線結(jié)構(gòu),一個服務(wù)器系統(tǒng)可以同時運(yùn)行多個處理器,并共享內(nèi)存和其他的主機(jī)資源。
CMP 英文為Chip multiprocessors,指的是單芯片多處理器,也指多核心。其思想是將大規(guī)模并行處理器中的SMP集成到同一芯片內(nèi),各個處理器并行執(zhí)行不同的進(jìn)程。
(1)CPU數(shù):獨(dú)立的中央處理單元,體現(xiàn)在主板上就是有多少個CPU槽位
(2)CPU核心數(shù)(CPU cores):在每一個CPU上,都可能有多核(core),每個核中都有獨(dú)立的ALU,F(xiàn)PU,Cache等組件,可以理解為CPU的物理核數(shù)。(我們常說4核8線程中的核),指物理上存在的物體。
(3)CPU線程數(shù)(processor邏輯核):一種邏輯上的概念,并非真實(shí)存在的物體,只是為了更好地描述CPU的運(yùn)作能力。簡單地說,就是模擬出的CPU核心數(shù)。
不過在這里我們這里指的是多個單核CPU組合到一起,每個核都有自己的一套寄存器。
一個系統(tǒng)存在多個CPU,成本會更高和管理也更困難。多核算是輕量級的SMP,物理上多核CPU還是封裝成一個CPU,但是在CPU內(nèi)部具有多個CPU的核心部件,可以同時運(yùn)行多個線程/進(jìn)程。但是需要CPU核心之間要共享資源,比如緩存。對程序員來說,它們之間的區(qū)別很小,大多數(shù)情況可以不做區(qū)分。我們在嵌入式開發(fā)中,大部分都是用的多核CPU。
這里我們就把這個SMP啟動轉(zhuǎn)換成多核CPU啟動。
2、啟動方式
程序?yàn)楹慰梢栽诙鄠€cpu上并發(fā)執(zhí)行:他們有各自獨(dú)立的一套寄存器,如:程序計(jì)數(shù)器pc,棧指針寄存器sp,通用寄存器等,可以獨(dú)自 取指、譯碼、執(zhí)行,當(dāng)然內(nèi)存和外設(shè)資源是共享的,多核環(huán)境下當(dāng)訪問臨界區(qū) 資源一般 自旋鎖來防止競態(tài)發(fā)生。
soc啟動的一般會從片內(nèi)的rom, 也叫bootrom開始執(zhí)行第一條指令,這個地址是系統(tǒng)默認(rèn)的啟動地址,會在bootrom中由芯片廠家固化一段啟動代碼來加載啟動bootloader到片內(nèi)的sram,啟動完成后的bootloader除了做一些硬件初始化之外做的最重要的事情是初始化ddr,因?yàn)閟ram的空間比較小所以需要初始化擁有大內(nèi)存 ddr,最后會從網(wǎng)絡(luò)/usb下載 或從存儲設(shè)備分區(qū)上加載內(nèi)核到ddr某個地址,為內(nèi)核傳遞參數(shù)之后,然后bootloader就完成了它的使命,跳轉(zhuǎn)到內(nèi)核,就進(jìn)入了操作系統(tǒng)內(nèi)核的世界。
bootloader將系統(tǒng)的控制權(quán)交給內(nèi)核之后,他首先會進(jìn)行處理器架構(gòu)相關(guān)初始化部分,如設(shè)置異常向量表,初始化mmu(之后內(nèi)核就從物理地址空間進(jìn)入了虛擬地址空間的世界,一切是那么的虛無縹緲,又是那么的恰到好處)等等,然后會清bss段,設(shè)置sp之后跳轉(zhuǎn)到C語言部分進(jìn)行更加復(fù)雜通用的初始化,其中會進(jìn)行內(nèi)存方面的初始化,調(diào)度器初始化,文件系統(tǒng)等內(nèi)核基礎(chǔ)組件 初始化工作,隨后會進(jìn)行關(guān)鍵的從處理器的引導(dǎo)過程,然后是各種實(shí)質(zhì)性的設(shè)備驅(qū)動的初始化,最后 創(chuàng)建系統(tǒng)的第一個用戶進(jìn)程init后進(jìn)入用戶空間執(zhí)行用戶進(jìn)程宣誓內(nèi)核初始化完成,可以進(jìn)程正常的調(diào)度執(zhí)行。
系統(tǒng)初始化階段大多數(shù)都是主處理器做初始化工作,所有不用考慮處理器并發(fā)情況,一旦從處理器被bingup起來,調(diào)度器和各自的運(yùn)行隊(duì)列準(zhǔn)備就緒,多個任務(wù)就會均衡到各個處理器,開始了并發(fā)的世界,一切是那么的神奇。
soc在啟動階段除了一些特殊情況外(如為了加快啟動速度,在bl2階段通過并行加載方式同時加載bl31、bl32和bl33鏡像),一般都沒有并行化需求。因此只需要一個cpu執(zhí)行啟動流程即可,這個cpu被稱為primary cpu,而其它的cpu則統(tǒng)一被稱為secondary cpu。為了防止secondary cpu在啟動階段的執(zhí)行,它們在啟動時必須要被設(shè)置為一個特定的狀態(tài)。(有時候?yàn)榱嗽黾訂铀俣?,必須對時間敏感的設(shè)備,就可能啟動的時候整個從核并行跑一些任務(wù))
當(dāng)primary cpu完成操作系統(tǒng)初始化,調(diào)度系統(tǒng)開始工作后,就可以通過一定的機(jī)制啟動secondary cpu。顯然secondary cpu不再需要執(zhí)行啟動流程代碼,而只需直接跳轉(zhuǎn)到內(nèi)核中執(zhí)行即可。
主流程啟動初始化一般來說都是主核在干的,當(dāng)系統(tǒng)完成了初始化后就開始啟動從核。 這就像在啟動的大門,只有主核讓你過了,其他的先在門外等著。當(dāng)cpu0啟動到kernel后,就會去門口,把它們的門禁卡給它們,卡上就寫的它們的目的地班級是哪里。如果沒有這個門禁卡的cpu,說明地址為0,就繼續(xù)在原地等著。
故其啟動的關(guān)鍵是如何將內(nèi)核入口地址告知secondary cpu,以使其能跳轉(zhuǎn)到正確的執(zhí)行位置。
aarch64架構(gòu)實(shí)現(xiàn)了兩種不同的啟動方式,spin-table和psci。
其中spin-table方式非常簡單,但其只能被用于secondary cpu啟動,功能比較單一。
隨著aarch64架構(gòu)電源管理需求的增加(如cpu熱插拔、cpu idle等),arm設(shè)計(jì)了一套標(biāo)準(zhǔn)的電源管理接口協(xié)議psci。該協(xié)議可以支持所有cpu相關(guān)的電源管理接口,而且由于電源相關(guān)操作是系統(tǒng)的關(guān)鍵功能,為了防止其被攻擊,該協(xié)議將底層相關(guān)的實(shí)現(xiàn)都放到了secure空間,從而可提高系統(tǒng)的安全性。
-
處理器
+關(guān)注
關(guān)注
68文章
19896瀏覽量
235255 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217104 -
多核
+關(guān)注
關(guān)注
0文章
43瀏覽量
12535 -
SMP
+關(guān)注
關(guān)注
0文章
78瀏覽量
20284
發(fā)布評論請先 登錄
SMP04|SMP22|信號源|SMP04 現(xiàn)金回收
RT-Thread SMP介紹與移植資料分享
RT-Thread框架下的SMP支持
SMP-04采樣保持四放大器和SMP-08 SMP-18采樣

SMP技術(shù)
軟啟動器啟動方式
表面貼裝封裝技術(shù)SMP介紹
SMP是什么?多核芯片(SMP)的啟動方法

RT-Thread SMP啟動流程

SMP多核啟動cpu操作函數(shù)

評論