介紹
操作系統(tǒng)老師說,平時面試學(xué)生或者畢業(yè)答辯的時候他都會問這個問題,可見這個問題對于計(jì)算機(jī)專業(yè)的學(xué)生來說是如此重要。那么,從打開計(jì)算機(jī)電源到計(jì)算機(jī)的屏幕顯示,中間經(jīng)歷了哪些過程呢?
啟動的英文是boot,來自于一個諺語
pull oneself up by one's bootstraps
通過拉自己的鞋帶把自己拽起
這個很明顯是矛盾的。工程師早期用這句諺語用來比喻早期的計(jì)算機(jī)開機(jī), 因?yàn)橛?jì)算機(jī)啟動需要運(yùn)行程序,而運(yùn)行程序又需要計(jì)算機(jī)啟動。這個是一個很矛盾的過程。直到后來開機(jī)程序被刷入ROM芯片后,這個開機(jī)的boot
大概過程是這樣的:
BIOS介紹:
BIOS(Basic Input/Output System)是基本輸入輸出系統(tǒng)的簡稱。BIOS 能為電腦提供最低級、最直接的硬件控制與支持,是聯(lián)系最底層的硬件系統(tǒng)和軟件系統(tǒng)的橋梁。為了在關(guān)機(jī)后使 BIOS 不會丟失,早期的 BIOS 存儲在 ROM 中,并且其大小不會超過 64KB;而目前的 BIOS 大多有 1MB 到 2MB,所以會被存儲在 閃存(Flash Memory)中。
BIOS 設(shè)置程序是被固化到電腦主板上地 ROM 芯片中的一組程序,其主要功能是為電腦提供最底層的、最直接的硬件設(shè)置和控制。 BIOS 通常與 硬件系統(tǒng)集成在一起(在計(jì)算機(jī)主板的 ROM 或EEPROM 中),所以也被稱為 固件
如何運(yùn)行
BIOS存放在一個斷電后不會丟失內(nèi)容的ROM中,這保證了“拽著鞋帶拉起自己”的這種情況不會發(fā)生。因?yàn)橄到y(tǒng)一上電或重置,處理器要執(zhí)行第一條指令的地址會被定位到BIOS存儲器,初始化開始運(yùn)行。在X86系統(tǒng)中,CPU加電后跳轉(zhuǎn)至BIOS的固定物理地址0xFFFF0。 打開計(jì)算機(jī)電源,計(jì)算機(jī)會首先加載BIOS,包含
CPU相關(guān)信息設(shè)備啟動順序信息硬盤信息內(nèi)存信息時鐘信息PhP特性...
硬件自檢(Power-On Self Test,POST) 如果硬件出現(xiàn)問題,主板會發(fā)出不同含義的蜂鳴 ,啟動中止。如果沒有問題,屏幕就會顯示出CPU 、內(nèi)存、硬盤等信息。BIOS在執(zhí)行完硬件自檢和初始化后,會將自己復(fù)制到從 0xA0000 開始的物理內(nèi)存中并繼續(xù)執(zhí)行。
BIOS 代碼包含診斷功能,以保證某些重要硬件組件,像是鍵盤、磁盤設(shè)備、輸出輸入端口等等,可以正常運(yùn)作且正確地初始化。
BIOS產(chǎn)生的問題
由于這些問題的存在,UEFI橫空出世
UEFI中文名為統(tǒng)一可擴(kuò)展固件界面(英語:Unified Extensible Firmware Interface,縮寫UEFI)是一種個人電腦系統(tǒng)規(guī)格,用來定義操作系統(tǒng)與系統(tǒng)硬件之間的軟件界面,作為BIOS的替代方案??蓴U(kuò)展固件接口負(fù)責(zé)加電自檢(POST),聯(lián)系操作系統(tǒng)以及提供連接作業(yè)系統(tǒng)與硬體的介面。
UEFI與BIOS的幾個區(qū)別
BIOS過程
UEFI過程
相對來說UEFI比BIOS少了一個硬件檢測
即使如此,本章啟動過程還是著重于分析利用BIOS啟動的過程。
MBR-全稱是Master Boot Record(主引導(dǎo)記錄或主開機(jī)記錄),是一個512byte的扇區(qū),位于磁盤的固定位置。之所以叫“主引導(dǎo)記錄”,是因?yàn)槠浯嬖谟隍?qū)動器開始部分的一個特殊扇區(qū),個扇區(qū)包含已安裝的操作系統(tǒng)啟動記載器和驅(qū)動器的邏輯分區(qū)信息。BIOS完成POST和初始化之后,會根據(jù)CMOS中設(shè)定的順序選擇引導(dǎo)的設(shè)備,這個設(shè)備可以是U盤可以是硬盤。若設(shè)置為硬盤,則BIOS就會讀取MBR。MBR里面包含了一段引導(dǎo)程序,一個分區(qū)表和Magic Number。
MBR的結(jié)構(gòu)
位置作用1-445字節(jié)調(diào)用操作系統(tǒng)的機(jī)器碼(Call OS)447-510字節(jié)分區(qū)表(Partition table)511-512字節(jié)主引導(dǎo)記錄簽名(只有兩個,0x55和0xAA,為Magic Number),如果不是這兩個幻數(shù),就認(rèn)為這是一個沒有被分區(qū)的硬盤。
分區(qū)表的長度只有64個字節(jié),里面分為四項(xiàng),每項(xiàng)為16個字節(jié)。所以一個硬盤只可以分四個一級分區(qū),又叫做“主分區(qū)”。每個主分區(qū)的16個字節(jié),結(jié)構(gòu)如下
位置(字節(jié))作用1如果第一個為0x80,表示該主分區(qū)是激活分區(qū)(active),控制權(quán)將轉(zhuǎn)交給此分區(qū)。幾個分區(qū)中只能有一個是激活分區(qū),其他都是非激活分區(qū)(inactive)。2-4主分區(qū)的第一個扇區(qū)物理位置(柱面、磁頭、扇區(qū)號等)5主分區(qū)的類型 分區(qū)類型符6-8主分區(qū)最后一個扇區(qū)的物理位置9-12主分區(qū)第一個扇區(qū)的邏輯位置13-16主分區(qū)的扇區(qū)總數(shù),決定了主分區(qū)的長度
其中第5字節(jié)分區(qū)類型符,有如下特定符
00H H —— 表示該分區(qū)未用 ( 即沒有指定 ) ;
06H H —— FAT 16 基本分區(qū);
0 0 BH —— FAT 32 基本分區(qū);
05H H —— 擴(kuò)展分區(qū);
07H H —— NTFS 分區(qū);
0 0 FH —— ( LBA 模式 ) 擴(kuò)展分區(qū) (83H H 為 Linux)
分出主分區(qū)后,其余的部分可以分成擴(kuò)展分區(qū),一般是剩下的部分全部分成擴(kuò)展分區(qū),也可以不全分,剩下的部分就浪費(fèi)了。擴(kuò)展分區(qū)不能直接使用,必須分成若干邏輯分區(qū)。所有的邏輯分區(qū)都是擴(kuò)展分區(qū)的一 部分 。
硬盤的容量 = 主分區(qū)的容量 + 擴(kuò)展分區(qū)的容量擴(kuò)展分區(qū)的容量 = 各個邏輯分區(qū)的容量之和
**Linux的Boot的過程 **
Boot Loader
又叫做 操作系統(tǒng)內(nèi)核加載器(OS kernel loader),一個在kernel運(yùn)行前運(yùn)行的一段小程序,通過這段程序可以初始化硬件設(shè)備,建立內(nèi)存空間的映射,將系統(tǒng)軟硬件環(huán)境帶到一個合適的狀態(tài),便于未來調(diào)用操作系統(tǒng)內(nèi)核。
Linux下引導(dǎo)加載程序常見兩種LILO和GNU GRUB
LILOGRUB無交互命令界面有交互命令界面不支持網(wǎng)絡(luò)引導(dǎo)支持錯誤配置MBR會讓系統(tǒng)無法引導(dǎo)如果配置文件錯誤,則默認(rèn)跳轉(zhuǎn)到GRUB命令行界面
GRUB 磁盤引導(dǎo)的過程如下
- stage1: grub 讀取磁盤第一個 512 字節(jié)(硬盤的0道0 面1扇區(qū),被稱為 MBR (主引導(dǎo)記錄), 也稱為bootsect )。 MBR 由一部分 bootloader 的引導(dǎo)代碼、分區(qū)表和魔數(shù)三部分組成。( 啟動的第二步 )- Stage1.5: 識別各種不同的文件系統(tǒng)格式。這使得 grub 識別到文件系統(tǒng)。- stage2: 加載系統(tǒng)引導(dǎo)菜單 (/boot/grub/ menu.lst或 grub.lst) ) ,加載內(nèi)核映像 (kernel image) 和 RAM磁盤 initrd (可選)。
運(yùn)行主引導(dǎo)程序的具體過程
BIOS將硬盤主引導(dǎo)記錄讀入7C00處,并將控制權(quán)交給主引導(dǎo)程序:
補(bǔ)充:MBR和引導(dǎo)扇區(qū)的關(guān)系
主要有兩個步驟:
以Linux系統(tǒng)為例,先載入/boot目錄下面的kernel。
內(nèi)核加載成功后,第一個運(yùn)行的程序是/sbin/init。它根據(jù)配置文件(Debian系統(tǒng)是/etc/initab)產(chǎn)生init進(jìn)程。這是Linux啟動后的第一個進(jìn)程,pid進(jìn)程編號為1,其他進(jìn)程都是它的后代。
然后,init線程加載系統(tǒng)的各個模塊,比如窗口程序和網(wǎng)絡(luò)程序,直至執(zhí)行/bin/login程序,跳出登錄界面,等待用戶輸入username和password。
至此,全部啟動過程完成。
聯(lián)系客服