來到我所在的工作車間,提取指令的小A、分析指令的小胖和負(fù)責(zé)結(jié)果回寫的老K都已經(jīng)到了,就差執(zhí)行指令的我了。
我們幾個(gè)各就各位,做起了準(zhǔn)備工作。
“小A,報(bào)告一下各個(gè)寄存器的值”,我囑咐小A,這是我們每天開始工作前必做的檢查項(xiàng)。
每次一通電,咱們的電路就會(huì)啟動(dòng)自檢工作,把所有的寄存器全部重置,如果哪里有異常的話,就會(huì)把錯(cuò)誤記錄到EAX寄存器中,如果發(fā)現(xiàn)EAX的值不是0,那可就大事不好了。
“報(bào)告,寄存器已確認(rèn):”
EAX,EBX, ECX, ESI, EDI, EBP, ESP: 0x00000000
EFLAGS: 0x00000002
CS: 0xF000
EIP: 0xFFF0
······
看起來沒什么問題,尤其是CS和IP這兩個(gè)寄存器,決定著一會(huì)兒該從哪里開始執(zhí)行代碼呢。
我們是一個(gè)64位的CPU,平時(shí)都是工作在保護(hù)模式下,使用虛擬地址來訪問內(nèi)存,由廠里的內(nèi)存管理單元MMU負(fù)責(zé)給轉(zhuǎn)換成真實(shí)的物理地址。
不過在剛剛開機(jī)的這會(huì)兒功夫,虛擬地址翻譯所需要的頁目錄、頁表這些信息都還沒準(zhǔn)備好,MMU還沒法工作,這時(shí)候我們只能使用16位的寄存器,工作在實(shí)地址模式下,使用段+基址的方式來跟內(nèi)存打交道,最多只能使用1MB的內(nèi)存空間,實(shí)在是有點(diǎn)局促。
開始執(zhí)行“大家都準(zhǔn)備好了嗎,打起精神來,要準(zhǔn)備開始今天的工作了哦!”
“Q哥,這剛剛通電,內(nèi)存條那家伙應(yīng)該還是一片空白吧,咱們要去執(zhí)行哪里的指令啊?”,小A問到。
“這你不用擔(dān)心,在主板上,咱們CPU隔壁不遠(yuǎn)處有個(gè)叫BIOS的伙計(jì),是一個(gè)ROM芯片,咱們已經(jīng)跟他約定好了,一通電他就映射到地址空間中,你盡管按照CS:IP(0xF000:0xFFF0)指向的地方開始取指令就對(duì)了,他會(huì)安排好的”
“原來是這樣”,小A點(diǎn)了點(diǎn)頭,似懂非懂的樣子。
正式開始干活了,小A熟練的從F000:FFF0處,也就是0xFFFF0處取到了第一條指令:jmp xxxx
好家伙,上來就是一個(gè)大跳轉(zhuǎn),我們一下來到了BIOS那家伙地盤的中央,開始執(zhí)行他準(zhǔn)備的程序了。
接下來執(zhí)行的這一堆指令我已經(jīng)做過無數(shù)次了,對(duì)主板上各單位進(jìn)行檢測(cè),看看有沒有異常情況,還有初始化我們工作需要的中斷向量表等等,我早已經(jīng)輕車熟路了。
“哥幾個(gè)忙著吶”,我們正忙的熱火朝天,發(fā)現(xiàn)有人在門口圍觀,回頭看去,原來是隔壁二號(hào)車間、五號(hào)車間、八號(hào)車間的幾個(gè)家伙。
“你們幾個(gè)這么閑,要不來幫我們干會(huì)兒活?”
“哎,你想得美,你們一號(hào)核是引導(dǎo)處理器(BSP),待遇比我們好,這開機(jī)啟動(dòng)的活兒我們?cè)趺茨軗屇兀俊保?hào)車間的虎子陰陽怪氣的說到。
真是羨慕他們,比我們1號(hào)車間上班時(shí)間晚,每次都可以多睡會(huì)兒。
MBR我繼續(xù)執(zhí)行BIOS中的代碼,一切檢查完畢,沒什么異常,要準(zhǔn)備啟動(dòng)操作系統(tǒng)大佬了。
接下來,我檢查了BIOS中配置的啟動(dòng)順序,排在第一位的是硬盤兄弟。
于是我把硬盤老哥第0盤第0道第1扇區(qū)的內(nèi)容讀取到了內(nèi)存中的0x7C00位置,他們把這玩意叫做主引導(dǎo)記錄MBR,一共512個(gè)字節(jié)。
聽硬盤那哥們說,這是操作系統(tǒng)老大在安裝的時(shí)候,寫到他那里的。
他還告訴我,這個(gè)位置很重要,曾經(jīng)就有病毒占據(jù)了這個(gè)位置,最后沒辦法只好重裝系統(tǒng)。

MBR
讀取到了MBR后,還得檢查最后兩個(gè)字節(jié)必須是0x55和0xAA,看起來沒什么問題,是一個(gè)合法的MBR,我們又跳到了0x7C00的位置開始執(zhí)行。
操作系統(tǒng)終于來到操作系統(tǒng)的地盤兒了,在操作系統(tǒng)的指示下,我們切換了工作模式,開始在保護(hù)模式下工作了!
剛剛切換到保護(hù)模式下,MMU仍然沒法做地址翻譯工作,我們還是只有直接使用物理地址跟內(nèi)存聯(lián)系,所以得趕緊把頁目錄和頁表準(zhǔn)備妥當(dāng)才行。
忙活了一陣子之后,總算把需要的東西都弄好了,我激動(dòng)的打開了內(nèi)存分頁的開關(guān),通知MMU部門開始工作,現(xiàn)在我們可以使用虛擬地址訪問內(nèi)存了,這感覺棒多了!

這時(shí),一旁圍觀的二號(hào)車間、五號(hào)車間、八號(hào)車間那幾個(gè)家伙見狀趕緊遛了回去,因?yàn)樗麄冎溃R上就該他們工作了。
我們繼續(xù)執(zhí)行操作系統(tǒng)的代碼,給咱們CPU其他所有核都準(zhǔn)備好了數(shù)據(jù)和指令,創(chuàng)建了多個(gè)線程出來,把他們也叫起來一起工作,咱們這個(gè)八核CPU終于全面開動(dòng)起來,一下子熱鬧了不少。
再后來,不知執(zhí)行了多少指令,創(chuàng)建了多少線程,才把操作系統(tǒng)老大完整的運(yùn)行了起來,成功完成了這一次的啟動(dòng)。
這就是通電后,我們CPU開始工作的日常,我已經(jīng)記不清這是第多少次啟動(dòng)了,也不知道,我們還能啟動(dòng)多少次···
原文標(biāo)題:按下電源后的幾秒鐘,CPU在干嘛?
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
電路
+關(guān)注
關(guān)注
173文章
6076瀏覽量
178418 -
cpu
+關(guān)注
關(guān)注
68文章
11279瀏覽量
225027
原文標(biāo)題:按下電源后的幾秒鐘,CPU在干嘛?
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
十進(jìn)制計(jì)算機(jī)硬件體系結(jié)構(gòu)及“獨(dú)值”量化邏輯運(yùn)算革命(一)
劃片機(jī)是干什么用的
工控機(jī)與普通計(jì)算機(jī)的核心差異解析
龍架構(gòu)計(jì)算機(jī)系統(tǒng)能力核心課程教學(xué)研討會(huì)圓滿舉行
【作品合集】賽昉科技VisionFive 2單板計(jì)算機(jī)開發(fā)板測(cè)評(píng)
加固計(jì)算機(jī)是用來干什么的?
工業(yè)計(jì)算機(jī)的重要性
基于飛騰CPU的安全計(jì)算機(jī)平臺(tái)研制項(xiàng)目通過試驗(yàn)評(píng)審
自動(dòng)化計(jì)算機(jī)經(jīng)過加固后有什么好處?
自動(dòng)化計(jì)算機(jī)的功能與用途
工業(yè)計(jì)算機(jī)與商用計(jì)算機(jī)的區(qū)別有哪些
工業(yè)計(jì)算機(jī)如何設(shè)計(jì)用于沖擊和振動(dòng)
一文帶你了解工業(yè)計(jì)算機(jī)尺寸
計(jì)算機(jī)網(wǎng)絡(luò)入門指南
NVIDIA 宣布推出 DGX Spark 個(gè)人 AI 計(jì)算機(jī)
計(jì)算機(jī)通電之后CPU都在干什么?
評(píng)論