設置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

按下電源后的幾秒鐘,CPU 在干嘛?

編程技術宇宙 2022/11/11 20:43:08 責編:子非

本文來自微信公眾號:編程技術宇宙 (ID:xuanyuancoding),作者:軒轅之風 O

來電了

“來電了,來電了,起來干活了”,一大早,我還在睡夢中就被吵醒了。

我是 CPU 一號車間的阿 Q,好久不見,不知道大家有沒有想我呢?

“今天不是星期六嗎?怎么還要工作”,我有些不開心,本以為能睡一個懶覺,誰知道大周末的程序員還開機,這是來加班了嗎。

一邊抱怨,一邊還得趕緊起來干活。

來到我所在的工作車間,提取指令的小 A、分析指令的小胖和負責結(jié)果回寫的老 K 都已經(jīng)到了,就差執(zhí)行指令的我了。

我們幾個各就各位,做起了準備工作。

“小 A,報告一下各個寄存器的值”,我囑咐小 A,這是我們每天開始工作前必做的檢查項。

每次一通電,咱們的電路就會啟動自檢工作,把所有的寄存器全部重置,如果哪里有異常的話,就會把錯誤記錄到 EAX 寄存器中,如果發(fā)現(xiàn) EAX 的值不是 0,那可就大事不好了。

“報告,寄存器已確認:”

EAX,EBX, ECX, ESI, EDI, EBP, ESP: 0x00000000

EFLAGS: 0x00000002

CS: 0xF000

EIP: 0xFFF0

······

看起來沒什么問題,尤其是 CS 和 IP 這兩個寄存器,決定著一會兒該從哪里開始執(zhí)行代碼呢。

我們是一個 64 位的 CPU,平時都是工作在保護模式下,使用虛擬地址來訪問內(nèi)存,由廠里的內(nèi)存管理單元 MMU 負責給轉(zhuǎn)換成真實的物理地址。

不過在剛剛開機的這會兒功夫,虛擬地址翻譯所需要的頁目錄、頁表這些信息都還沒準備好,MMU 還沒法工作,這時候我們只能使用 16 位的寄存器,工作在實地址模式下,使用段 + 基址的方式來跟內(nèi)存打交道,最多只能使用 1MB 的內(nèi)存空間,實在是有點局促。

開始執(zhí)行

“大家都準備好了嗎,打起精神來,要準備開始今天的工作了哦!”

“Q 哥,這剛剛通電,內(nèi)存條那家伙應該還是一片空白吧,咱們要去執(zhí)行哪里的指令???”,小 A 問到。

“這你不用擔心,在主板上,咱們 CPU 隔壁不遠處有個叫 BIOS 的伙計,是一個 ROM 芯片,咱們已經(jīng)跟他約定好了,一通電他就映射到地址空間中,你盡管按照 CS:IP(0xF000:0xFFF0)指向的地方開始取指令就對了,他會安排好的”

“原來是這樣”,小 A 點了點頭,似懂非懂的樣子。

正式開始干活了,小 A 熟練的從 F000:FFF0 處,也就是 0xFFFF0 處取到了第一條指令:jmp xxxx

好家伙,上來就是一個大跳轉(zhuǎn),我們一下來到了 BIOS 那家伙地盤的中央,開始執(zhí)行他準備的程序了。

接下來執(zhí)行的這一堆指令我已經(jīng)做過無數(shù)次了,對主板上各單位進行檢測,看看有沒有異常情況,還有初始化我們工作需要的中斷向量表等等,我早已經(jīng)輕車熟路了。

“哥幾個忙著吶”,我們正忙的熱火朝天,發(fā)現(xiàn)有人在門口圍觀,回頭看去,原來是隔壁二號車間、五號車間、八號車間的幾個家伙。

“你們幾個這么閑,要不來幫我們干會兒活?”

“哎,你想得美,你們一號核是引導處理器(BSP),待遇比我們好,這開機啟動的活兒我們怎么能搶呢?”,二號車間的虎子陰陽怪氣的說到。

真是羨慕他們,比我們 1 號車間上班時間晚,每次都可以多睡會兒。

MBR

我繼續(xù)執(zhí)行 BIOS 中的代碼,一切檢查完畢,沒什么異常,要準備啟動操作系統(tǒng)大佬了。

接下來,我檢查了 BIOS 中配置的啟動順序,排在第一位的是硬盤兄弟。

于是我把硬盤老哥第 0 盤第 0 道第 1 扇區(qū)的內(nèi)容讀取到了內(nèi)存中的 0x7C00 位置,他們把這玩意叫做主引導記錄 MBR,一共 512 個字節(jié)。

聽硬盤那哥們說,這是操作系統(tǒng)老大在安裝的時候,寫到他那里的。

他還告訴我,這個位置很重要,曾經(jīng)就有病毒占據(jù)了這個位置,最后沒辦法只好重裝系統(tǒng)。

MBR

讀取到了 MBR 后,還得檢查最后兩個字節(jié)必須是 0x55 和 0xAA,看起來沒什么問題,是一個合法的 MBR,我們又跳到了 0x7C00 的位置開始執(zhí)行。

操作系統(tǒng)

終于來到操作系統(tǒng)的地盤兒了,在操作系統(tǒng)的指示下,我們切換了工作模式,開始在保護模式下工作了!

剛剛切換到保護模式下,MMU 仍然沒法做地址翻譯工作,我們還是只有直接使用物理地址跟內(nèi)存聯(lián)系,所以得趕緊把頁目錄和頁表準備妥當才行。

忙活了一陣子之后,總算把需要的東西都弄好了,我激動的打開了內(nèi)存分頁的開關,通知 MMU 部門開始工作,現(xiàn)在我們可以使用虛擬地址訪問內(nèi)存了,這感覺棒多了!

這時,一旁圍觀的二號車間、五號車間、八號車間那幾個家伙見狀趕緊遛了回去,因為他們知道,馬上就該他們工作了。

我們繼續(xù)執(zhí)行操作系統(tǒng)的代碼,給咱們 CPU 其他所有核都準備好了數(shù)據(jù)和指令,創(chuàng)建了多個線程出來,把他們也叫起來一起工作,咱們這個八核 CPU 終于全面開動起來,一下子熱鬧了不少。

再后來,不知執(zhí)行了多少指令,創(chuàng)建了多少線程,才把操作系統(tǒng)老大完整的運行了起來,成功完成了這一次的啟動。

這就是通電后,我們 CPU 開始工作的日常,我已經(jīng)記不清這是第多少次啟動了,也不知道,我們還能啟動多少次???

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關文章

關鍵詞:內(nèi)存

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機APP應用 魔方 最會買 要知