從你按下開(kāi)關(guān)的那一刻起,計(jì)算機(jī)內(nèi)部發(fā)生了什么?
從你按下開(kāi)關(guān)的那一刻起,計(jì)算機(jī)內(nèi)部發(fā)生了什么?
by海闊天空--James

? ? ? ? 從你按下開(kāi)關(guān)的那一刻起,計(jì)算機(jī)內(nèi)部的各種硬件(如風(fēng)扇)開(kāi)始運(yùn)轉(zhuǎn);還有一些我們看不到的軟件也在有條不紊地運(yùn)作。
1.BIOS
? ? ? BIOS,是Basic In Out System(基本輸入輸出系統(tǒng))的縮寫(xiě)。在上個(gè)世紀(jì)70年代初,ROM——Read Only Memory("只讀內(nèi)存")發(fā)明,開(kāi)機(jī)程序被刷入ROM芯片,計(jì)算機(jī)通電后,第一件事就是讀取它。

1.1POST
? ? ? ? BIOS程序首先檢查,計(jì)算機(jī)硬件能否滿(mǎn)足運(yùn)行的基本條件,這叫做POST,是Power On Self Test(硬件自檢)的縮寫(xiě)。
? ? ? ? 如果硬件出現(xiàn)問(wèn)題,主板會(huì)發(fā)出不同含義的蜂鳴,啟動(dòng)中止。如果沒(méi)有問(wèn)題,屏幕就會(huì)顯示。使用舊機(jī)器的朋友們?cè)陔娔X開(kāi)機(jī)成功,POST通過(guò)的時(shí)候,可能會(huì)聽(tīng)到“滴”的一聲。
1.2.啟動(dòng)順序
? ? ? ? 硬件自檢完成后,BIOS要把控制權(quán)轉(zhuǎn)交給下一階段的啟動(dòng)程序。
? ? ? ?這時(shí),BIOS需要一個(gè)外部?jī)?chǔ)存設(shè)備的排序,它才能知道下一階段的啟動(dòng)程序在哪一個(gè)設(shè)備中。這種排序叫做"Boot Sequence"(啟動(dòng)順序)。
? ? ? 進(jìn)入BIOS的操作界面,“BOOT”選項(xiàng)中有一項(xiàng)就是"設(shè)置啟動(dòng)順序"。排在最前面的就是優(yōu)先轉(zhuǎn)交的。

2.MBR
? ? ? ? 上節(jié)說(shuō)到,BIOS按照"啟動(dòng)順序",把控制權(quán)轉(zhuǎn)交給了排在第一位的儲(chǔ)存設(shè)備。
? ? ? ? 這時(shí),計(jì)算機(jī)讀取該設(shè)備的第一個(gè)扇區(qū),也就是讀取最前面的512個(gè)字節(jié)。如果這512個(gè)字節(jié)的最后兩個(gè)字節(jié)是0x55和0xAA,表明這個(gè)設(shè)備可以用于啟動(dòng);如果不是,表明設(shè)備不能用于啟動(dòng),控制權(quán)于是被轉(zhuǎn)交給"啟動(dòng)順序"中的下一個(gè)設(shè)備。
? ? ? ?這最前面的512個(gè)字節(jié),就叫做"MBR"(Master Boot Record,“主引導(dǎo)記錄”)。有一些計(jì)算機(jī)病毒就是通過(guò)篡改MBR使得計(jì)算機(jī)無(wú)法啟動(dòng)的。
2.1MBR的結(jié)構(gòu)
? ? ? ?MBR只有512個(gè)字節(jié),放不了太多東西。它的主要作用是,告訴計(jì)算機(jī)到硬盤(pán)的哪一個(gè)位置去找操作系統(tǒng)。
MBR大致由三個(gè)部分組成:
?。?) 第1-446字節(jié):調(diào)用操作系統(tǒng)的機(jī)器碼
?。?) 第447-510字節(jié):分區(qū)表
?。?) 第511-512字節(jié):主引導(dǎo)記錄簽名
2.2分區(qū)表
? ? ? ? 考慮到每個(gè)區(qū)可以安裝不同的操作系統(tǒng),MBR必須知道將控制權(quán)轉(zhuǎn)交給哪個(gè)區(qū)。
? ? ? ? 分區(qū)表的長(zhǎng)度只有64個(gè)字節(jié),里面又分成四項(xiàng),每項(xiàng)16個(gè)字節(jié)。所以,一個(gè)硬盤(pán)最多只能分四個(gè)一級(jí)分區(qū),又叫做"主分區(qū)"。
每個(gè)主分區(qū)的16個(gè)字節(jié),由6個(gè)部分組成:
?。?) 第1個(gè)字節(jié):如果為0x80,就表示該主分區(qū)是激活分區(qū),控制權(quán)要轉(zhuǎn)交給這個(gè)分區(qū)。
?。?) 第2-4個(gè)字節(jié):主分區(qū)第一個(gè)扇區(qū)的物理位置
?。?) 第5個(gè)字節(jié):主分區(qū)類(lèi)型
?。?) 第6-8個(gè)字節(jié):主分區(qū)最后一個(gè)扇區(qū)的物理位置
(5) 第9-12字節(jié):該主分區(qū)第一個(gè)扇區(qū)的邏輯地址
?。?) 第13-16字節(jié):主分區(qū)的扇區(qū)總數(shù)
3.硬盤(pán)啟動(dòng)!
? ? ? 這時(shí),計(jì)算機(jī)的控制權(quán)就要轉(zhuǎn)交給硬盤(pán)中的某個(gè)分區(qū)了。共分為兩種情況。
3.1情況1:VBR
? ? ? ?四個(gè)主分區(qū)里面,只有一個(gè)是激活的。計(jì)算機(jī)會(huì)讀取激活分區(qū)的第一個(gè)扇區(qū),叫做"VBR"(Volume Boot Record,卷引導(dǎo)記錄)。
? ? ? VBR會(huì)告訴計(jì)算機(jī)操作系統(tǒng)在分區(qū)里的位置。然后,計(jì)算機(jī)就會(huì)加載操作系統(tǒng)。
3.2情況2:Boot Loader
? ? ? ? 在這種情況下,計(jì)算機(jī)讀取MBR前面446字節(jié)的機(jī)器碼之后,不再把控制權(quán)轉(zhuǎn)交給某一個(gè)分區(qū),而是運(yùn)行事先安裝的"boot loader"(啟動(dòng)管理器),由用戶(hù)選擇啟動(dòng)哪一個(gè)操作系統(tǒng)。

3.3額外情況:Extended partition
? ? ? ? 分區(qū)表只有四項(xiàng),但四個(gè)主分區(qū)已經(jīng)不夠用了,需要更多的分區(qū),因此規(guī)定有且僅有一個(gè)區(qū)可以被定義成"Extended partition"(擴(kuò)展分區(qū))。
? ? ? ? 所謂"擴(kuò)展分區(qū)",就是指一個(gè)區(qū)里面又分成多個(gè)區(qū)。這種分區(qū)里面的分區(qū),就叫做"logical partition"(邏輯分區(qū))。
? ? ? ?計(jì)算機(jī)先讀取擴(kuò)展分區(qū)的第一個(gè)扇區(qū),叫做"EBR"(Extended Boot Record,擴(kuò)展引導(dǎo)記錄)。它里面也包含一張64字節(jié)的分區(qū)表,但是最多只有兩項(xiàng)(也就是兩個(gè)邏輯分區(qū))。計(jì)算機(jī)接著讀取第二個(gè)邏輯分區(qū)的第一個(gè)扇區(qū),再?gòu)睦锩娴姆謪^(qū)表中找到第三個(gè)邏輯分區(qū)的位置,以此類(lèi)推,直到某個(gè)邏輯分區(qū)的分區(qū)表只包含它自身為止(即只有一個(gè)分區(qū)項(xiàng))。因此,擴(kuò)展分區(qū)可以包含無(wú)數(shù)個(gè)邏輯分區(qū)。
? ? ? 之所以將這種情況列為額外情況,是因?yàn)樗坪鹾苌偻ㄟ^(guò)這種方式啟動(dòng)操作系統(tǒng)。如果操作系統(tǒng)確實(shí)安裝在擴(kuò)展分區(qū),一般采用第二種情況啟動(dòng)。
4.操作系統(tǒng)
? ? ? ? 控制權(quán)轉(zhuǎn)交給操作系統(tǒng)后,操作系統(tǒng)的內(nèi)核首先被載入內(nèi)存。然后,init線(xiàn)程加載系統(tǒng)的各個(gè)模塊,比如窗口程序和網(wǎng)絡(luò)程序,直至執(zhí)行/bin/login程序,跳出登錄界面,等待用戶(hù)輸入用戶(hù)名和密碼。
至此,全部啟動(dòng)過(guò)程完成。

如果這篇文章對(duì)各位觀(guān)眾朋友們有幫助的話(huà)可以一鍵三聯(lián)加關(guān)注,謝謝~