|
今天來(lái)聊聊操作系統(tǒng)是如何啟動(dòng)起來(lái)的。和我們寫的helloworld程序一樣,操作系統(tǒng)本身也是一個(gè)程序,被編譯后作為文件保存在磁盤上。
2p3ila5ctsf640831019.png (60.9 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
2p3ila5ctsf640831019.png
2024-9-14 18:55 上傳
我們的程序是被操作系統(tǒng)加載到內(nèi)存運(yùn)行的,在前一篇文章《程序是怎么一步步運(yùn)行起來(lái)的》中有過(guò)講解:
hdndgzlymtp640831119.png (40.16 KB, 下載次數(shù): 4)
下載附件
保存到相冊(cè)
hdndgzlymtp640831119.png
2024-9-14 18:55 上傳
既然普通程序是被操作系統(tǒng)加載運(yùn)行起來(lái)的,那么操作系統(tǒng)又是被誰(shuí)加載到內(nèi)存運(yùn)行起來(lái)的?
3ynpkkl2xzr640831219.png (41.39 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
3ynpkkl2xzr640831219.png
2024-9-14 18:55 上傳
想知道問(wèn)題的答案,我們要從內(nèi)存說(shuō)起。內(nèi)存只有在加電后寫入數(shù)據(jù)才能保存信息:
m2o2dwjb5aa640831319.png (50.59 KB, 下載次數(shù): 2)
下載附件
保存到相冊(cè)
m2o2dwjb5aa640831319.png
2024-9-14 18:55 上傳
內(nèi)存斷電后這些信息就丟失了:
e4o3sue4z1u640831419.png (21.17 KB, 下載次數(shù): 4)
下載附件
保存到相冊(cè)
e4o3sue4z1u640831419.png
2024-9-14 18:55 上傳
當(dāng)計(jì)算機(jī)啟動(dòng)時(shí)內(nèi)存中一片荒蕪,顯然CPU不能執(zhí)行來(lái)自內(nèi)存中的指令:
oxqlwt2o3p5640831519.png (40.27 KB, 下載次數(shù): 6)
下載附件
保存到相冊(cè)
oxqlwt2o3p5640831519.png
2024-9-14 18:55 上傳
那么在你按下開(kāi)機(jī)按鍵時(shí)CPU執(zhí)行來(lái)自哪里的指令呢?答案是來(lái)自ROM或其它非易失性內(nèi)存:
jghfqpknuqd640831619.png (40.3 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
jghfqpknuqd640831619.png
2024-9-14 18:55 上傳
這些存儲(chǔ)設(shè)備中保存了一小段指令,計(jì)算機(jī)啟動(dòng)時(shí)CPU會(huì)執(zhí)行這一小段程序。CPU怎么知道這段程序保存在哪里呢?答案是CPU會(huì)從一個(gè)提前設(shè)置好的位置開(kāi)始執(zhí)行指令,在IA-32架構(gòu)在CPU會(huì)從0xffff0這個(gè)位置開(kāi)始執(zhí)行這段程序。這一小段程序就是我們熟悉的BIOS(Basic Input/Output System),更現(xiàn)代的是UEFI(Unified Extensible Firmware Interface)。
bhe2wtbwo1g640831719.png (310.65 KB, 下載次數(shù): 7)
下載附件
保存到相冊(cè)
bhe2wtbwo1g640831719.png
2024-9-14 18:55 上傳
BIOS這段程序有什么作用呢?這段程序用來(lái)檢查硬件,各個(gè)硬件是否能正常工作等,CPU、內(nèi)存、硬盤等,也就是所謂的自檢,如果恰好你拆過(guò)機(jī)器忘記把內(nèi)存條裝回去,那么這一小段程序就會(huì)檢測(cè)出系統(tǒng)中沒(méi)有安裝內(nèi)存并給出告警提示。
gz34w1gn00m640831819.jpg (136.14 KB, 下載次數(shù): 7)
下載附件
保存到相冊(cè)
gz34w1gn00m640831819.jpg
2024-9-14 18:55 上傳
BIOS程序除了檢查硬件之外在最后一步有一項(xiàng)重要的工作就是識(shí)別出操作系統(tǒng)保存在了哪里,也就是找到所謂的啟動(dòng)設(shè)備,這一般都是磁盤。找到啟動(dòng)設(shè)備后開(kāi)始把磁盤前512字節(jié)的數(shù)據(jù)拷貝到內(nèi)存,這512字節(jié)就是所謂的MBR:
rnri2pnghb3640831919.png (44.08 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
rnri2pnghb3640831919.png
2024-9-14 18:55 上傳
其中包含了:一段程序,這段程序的目的是加載其它程序,因此也被稱之為boot loader磁盤分區(qū)表,識(shí)別磁盤的各個(gè)分區(qū)此時(shí)BIOS執(zhí)行完畢,CPU開(kāi)始執(zhí)行MBR中的這段boot loader程序:
ixyt0gg1cn0640832019.png (46.99 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
ixyt0gg1cn0640832019.png
2024-9-14 18:55 上傳
這段程序的目的是根據(jù)磁盤分區(qū)表加載一個(gè)更大的boot loader。
uhdtlkw20xr640832119.png (55.1 KB, 下載次數(shù): 4)
下載附件
保存到相冊(cè)
uhdtlkw20xr640832119.png
2024-9-14 18:55 上傳
這個(gè)更大的boot loader功能更加強(qiáng)大復(fù)雜,如果你安裝的是多操作系統(tǒng),那么當(dāng)這個(gè)更大的boot loader開(kāi)始執(zhí)行時(shí)會(huì)給你一個(gè)選項(xiàng),在這里可以用戶可以選擇啟動(dòng)哪個(gè)操作系統(tǒng)。
oi5ww1mrlrt640832219.png (132.44 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
oi5ww1mrlrt640832219.png
2024-9-14 18:55 上傳
在這里可以看到MBR中的boot loader程序加載了一個(gè)更大的boot loader程序,也因此這兩個(gè)boot loader分別被稱之為First stage boot loader和second stage boot loader,也就是一階段引導(dǎo)程序和二階段引導(dǎo)程序。
1002amjh2ay640832319.png (45.66 KB, 下載次數(shù): 6)
下載附件
保存到相冊(cè)
1002amjh2ay640832319.png
2024-9-14 18:55 上傳
你可能會(huì)有疑問(wèn),為什么要有多階段引導(dǎo)程序呢?為什么不能一階段引導(dǎo)程序直接加載操作系統(tǒng)呢?原因就在于MBR這個(gè)512字節(jié)的引導(dǎo)程序功能過(guò)于簡(jiǎn)陋,只能把磁盤中一段連續(xù)的數(shù)據(jù)copy到內(nèi)存,加載操作系統(tǒng)這種多文件組成的大型程序需要解析文件結(jié)構(gòu),因此需要另一段功能更為強(qiáng)大的程序也就是二階段引導(dǎo)程序的幫助。二階引導(dǎo)最終識(shí)別出操作系統(tǒng)所在的位置并把操作系統(tǒng)加載到內(nèi)存中。
mtytfqmrxls640832419.png (47.72 KB, 下載次數(shù): 3)
下載附件
保存到相冊(cè)
mtytfqmrxls640832419.png
2024-9-14 18:55 上傳
此時(shí)CPU才開(kāi)始真正執(zhí)行操作系統(tǒng),操作系統(tǒng)和我們寫的程序一樣也有一個(gè)初始化的過(guò)程,這個(gè)過(guò)程的最后會(huì)創(chuàng)建出一系列用戶態(tài)進(jìn)程,此時(shí)操作系統(tǒng)系統(tǒng)啟動(dòng)完畢可以接受用戶的輸入。
dchhvcil5hd640832519.jpg (154.65 KB, 下載次數(shù): 6)
下載附件
保存到相冊(cè)
dchhvcil5hd640832519.jpg
2024-9-14 18:55 上傳
雙擊圖標(biāo)或者在命令行下輸入指令時(shí)操作系統(tǒng)開(kāi)始把我們寫的程序加載到內(nèi)存運(yùn)行,這個(gè)過(guò)程就是在前一篇文章《程序是怎么一步步運(yùn)行起來(lái)的》當(dāng)然在現(xiàn)代使用UEFI的現(xiàn)代系統(tǒng)中就不需要MBR中的一階引導(dǎo)程序了。以上就是操作系統(tǒng)啟動(dòng)的基本過(guò)程。end
一口Linux
關(guān)注,回復(fù)【1024】海量Linux資料贈(zèng)送
精彩文章合集
文章推薦
?【專輯】ARM?【專輯】粉絲問(wèn)答?【專輯】所有原創(chuàng)?【專輯】linux入門?【專輯】計(jì)算機(jī)網(wǎng)絡(luò)?【專輯】Linux驅(qū)動(dòng)?【干貨】嵌入式驅(qū)動(dòng)工程師學(xué)習(xí)路線?【干貨】Linux嵌入式所有知識(shí)點(diǎn)-思維導(dǎo)圖 |
|