沒營養又愛吃餌的閒聊仔又來啦
剛好幾位版友問到的是關於PI (Platform Initialization)的問題
https://github.com/tianocore/tianocore.github.io/wiki/PI-Boot-Flow
https://uefi.org/sites/default/files/resources/PI_Spec_1_7_final_Jan_2019.pdf
請先簡單翻過這兩本文件(真的有難度只看圖也行),我只提出跟大小(size)有關的部分
1. SEC 階段
這裡的程式都是純組合語言編譯的
這個階段需要劃定CAR (Cache As RAM)的位置跟大小. 除非特別指定, CAR通常等量拆半.
A. HOB(Hand-off block), 待會緊接著PEI模組彼此交換資料之用
B. Stack, 執行C語言程式編譯的PEI模組群需要一塊堆疊空間
最後跳往PEI的頭(entry point)結束這回合
2. PEI 階段
從這個階段之後都是用C做為主要編寫語言(99.9%).
這個階段主要任務是
A. 完成記憶體初始化(就是知道裝多大的RAM)
B. 把壓縮過的DXE模組群解壓縮到RAM
C. 跳往DXE的頭(entry point)結束這回合
PEI模組群的執行速度差異極大, 跟是否曾經執行過且保留在在Cache有關.
剩下的DXE之後就不談了.
舉個例子好了, 假定PEI模組群要2.5MB, CAR畫0.5MB, 其他功能保留0.5MB.
這樣的配置在3/4MB Cache的CPU上面會發生開機速度差異
+