免費(fèi)網(wǎng)站建設(shè)ppt模板關(guān)鍵詞優(yōu)化是什么工作
theme: channing-cyan
兩種啟動(dòng)方式
傳統(tǒng)啟動(dòng)方式(LEGACY+MBR)
指?jìng)鹘y(tǒng)BIOS啟動(dòng)方式,存在一些不足:比如最大只支持2TB磁盤(pán),磁盤(pán)最多四個(gè)分區(qū),且不支持圖形操作
UEFI+GPT方式
是新式的啟動(dòng)方式,逐步取代傳統(tǒng)啟動(dòng)方式
相對(duì)于Legacy+mbr, 優(yōu)點(diǎn)在啟動(dòng)更快(不要開(kāi)機(jī)自檢),最多可支持128個(gè)磁盤(pán)分區(qū)最大可支持18EB硬盤(pán)支持圖形操作
整體過(guò)程
- 打開(kāi)計(jì)算機(jī)電源,計(jì)算機(jī)首先從BIOS開(kāi)始啟動(dòng)
- BIOS對(duì)硬件進(jìn)行檢測(cè),CPU從起始地址為0xFFF0處開(kāi)始執(zhí)行程序。BIOS自檢的內(nèi)容主要包括CPU、內(nèi)存、硬盤(pán)等設(shè)備和即插即用設(shè)備。
- 按BIOS中的設(shè)置將硬盤(pán)的主引導(dǎo)扇區(qū)(第一個(gè)扇區(qū))加載到0x7C00,接著啟動(dòng)硬盤(pán)上安裝的引導(dǎo)程序LILO或GRUB來(lái)引導(dǎo)Linux。
- Linux首先進(jìn)行內(nèi)核的引導(dǎo),主要完成磁盤(pán)引導(dǎo)、機(jī)器狀態(tài)數(shù)據(jù)讀取、從實(shí)模式到保護(hù)模式的切換、數(shù)據(jù)段寄存器加載及中斷描述符表設(shè)置等。
- 進(jìn)行系統(tǒng)初始化,執(zhí)行init程序。init程序調(diào)用rc.sysinit和rc等程序,而rc.sysinit和rc在完成系統(tǒng)初始化和運(yùn)行服務(wù)后返回init。
- 啟動(dòng)mingetty,打開(kāi)終端供用戶登錄系統(tǒng)。
這樣就完成了從開(kāi)機(jī)到登錄的整個(gè)啟動(dòng)過(guò)程。
詳細(xì)過(guò)程
BIOS
展示
主板上的BIOS芯片
作用
BIOS,Basic Input/Output System,基本輸入輸出系統(tǒng)。早期的 BIOS 存儲(chǔ)在內(nèi)存的 ROM 中,不會(huì)斷電消失;現(xiàn)在大多存儲(chǔ)在內(nèi)存的閃存(Flash Memory)中。
-
CPU 加電后會(huì)首先執(zhí)行 BIOS 程序,其中 POST(Power-On Self-Test)加電自檢程序是執(zhí)行的第一個(gè)例行程序,主要是對(duì) CPU、內(nèi)存等硬件設(shè)備進(jìn)行檢測(cè)和初始化。
-
BIOS 中斷調(diào)用即 BIOS 中斷服務(wù)程序,是計(jì)算機(jī)系統(tǒng)軟、硬件之間的一個(gè)可編程接口。開(kāi)機(jī)時(shí),BIOS 會(huì)通知 CPU 各種硬件設(shè)備的中斷號(hào),并提供中斷服務(wù)程序。軟件可以通過(guò)調(diào)用 BIOS 中斷對(duì)軟盤(pán)驅(qū)動(dòng)器、鍵盤(pán)及顯示器等外圍設(shè)備進(jìn)行管理。
-
BIOS 會(huì)根據(jù)在 CMOS 中保存的配置信息來(lái)判斷使用哪種設(shè)備啟動(dòng)操作系統(tǒng),并將 CPU 移交給操作系統(tǒng)使用。
流程
-
在CPU加電之后,會(huì)把CPU所有寄存器的值設(shè)為默認(rèn)值,除了CS寄存器的值改為0xFFFF,其他寄存器的值都為0,這樣,根據(jù)CS 和 IP的值就可以找到指令的物理地址0xFFFF:0x0000,也就是0xFFFF0。
-
這時(shí)CPU就開(kāi)始執(zhí)行在這個(gè)位置開(kāi)始執(zhí)行,這里存放的一條無(wú)條件跳轉(zhuǎn)指令JMP,跳轉(zhuǎn)到BIOS的真正啟動(dòng)代碼處。
-
BIOS首先先進(jìn)行POST(Power-On Self Test,加電后自檢)POST的主要檢測(cè)系統(tǒng)中一些關(guān)鍵設(shè)備是否存在和能否正常工作,例如內(nèi)存和顯卡等設(shè)備;如果硬件出現(xiàn)問(wèn)題,主板會(huì)發(fā)出不同含義的蜂鳴,啟動(dòng)中止。如果沒(méi)有問(wèn)題,屏幕就會(huì)顯示出CPU、內(nèi)存、硬盤(pán)等信息。
-
BIOS 程序在執(zhí) 行一些必要的開(kāi)機(jī)自檢和初始化后,會(huì)將自己復(fù)制到從 0xA0000 開(kāi)始的物理內(nèi)存中并繼續(xù)執(zhí)行
-
然后,BIOS 開(kāi)始搜尋可引導(dǎo)的存儲(chǔ)設(shè)備(即根據(jù)用戶指定的引導(dǎo)順序從軟盤(pán)、硬盤(pán)或是可移動(dòng)設(shè)備)。如果找到,則將存儲(chǔ)設(shè)備中的引導(dǎo)扇區(qū)讀入物理內(nèi)存 0x7C00 處,并跳轉(zhuǎn)到 0x7C00 繼續(xù)執(zhí)行,從而將 CPU 交給引導(dǎo)扇區(qū)中的 Boot 程序
引導(dǎo)(Boot)程序
引導(dǎo)順序
可以在BIOS配置引導(dǎo)設(shè)備,接下來(lái)以最常見(jiàn)的硬盤(pán)啟動(dòng)為例進(jìn)行說(shuō)明。
主引導(dǎo)扇區(qū)
硬盤(pán)被格式化之后被劃分為固定容量(一般是512B)的數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊被稱為一個(gè)扇區(qū)(sector)。
硬盤(pán)的第一個(gè)扇區(qū)被稱為主引導(dǎo)扇區(qū)(0磁頭0磁道1扇區(qū),bootsector),它在所有的系統(tǒng)分區(qū)之前不屬于任何系統(tǒng)分區(qū)。主引導(dǎo)扇區(qū)由主引導(dǎo)記錄(Master Boot Record,MBR)、磁盤(pán)分區(qū)表(Disk Partition Table,DPT)和引導(dǎo)記錄標(biāo)識(shí)(Boot Record ID)3個(gè)部分組成:
- MBR占用主引導(dǎo)扇區(qū)的前446個(gè)字節(jié)(bootloader),存放系統(tǒng)主引導(dǎo)程序,負(fù)責(zé)從活動(dòng)分區(qū)中裝載并運(yùn)行系統(tǒng)引導(dǎo)程序。
- DPT占用64個(gè)字節(jié),記錄磁盤(pán)的基本分區(qū)信息。磁盤(pán)分區(qū)表分為4個(gè)分區(qū)項(xiàng),每項(xiàng)16字節(jié),分別記錄每個(gè)主分區(qū)的信息,因此最多可以有4個(gè)主分區(qū)。其中只有一個(gè)活動(dòng)分區(qū)(Active Partition)
- Boot Record ID占用2個(gè)字節(jié)。對(duì)于合法的引導(dǎo)扇區(qū),它等于0xAA55,這是判別引導(dǎo)扇區(qū)是否合法的標(biāo)志
流程
-
BIOS此時(shí)去讀取硬盤(pán)驅(qū)動(dòng)器的第一個(gè)扇區(qū)(MBR,512字節(jié)),然后執(zhí)行里面的代碼。實(shí)際上這里BIOS并不關(guān)心啟動(dòng)設(shè)備第一個(gè)扇區(qū)中是什么內(nèi)容,它只是負(fù)責(zé)讀取該扇區(qū)內(nèi)容、并執(zhí)行。至此,BIOS的任務(wù)就完成了,此后將系統(tǒng)啟動(dòng)的控制權(quán)移交到MBR部分的代碼。
-
MBR代碼從磁盤(pán)分區(qū)表找到活動(dòng)分區(qū),通過(guò)BIOS將活動(dòng)分區(qū)的啟動(dòng)扇區(qū)讀入內(nèi)存,并跳轉(zhuǎn)到啟動(dòng)扇區(qū)的起始位置。
-
硬盤(pán)的MBR裝載分區(qū)引導(dǎo)扇區(qū),分區(qū)引導(dǎo)扇區(qū)也稱DBR,DBR是程序。
-
DBR裝入內(nèi)存后,即開(kāi)始執(zhí)行該引導(dǎo)程序段。
Boot loader
比較流行的引導(dǎo)加載程序(Boot loader)是LILO和Grub,Grub比LILO更好,所以只聊Grub。
GRUB(Grand Unified Boot Loader)擁有強(qiáng)大的交互式命令界面,支持網(wǎng)絡(luò)引導(dǎo)。GRUB負(fù)責(zé)裝入內(nèi)核并引導(dǎo)Linux系統(tǒng)。此外,還可以引導(dǎo)其他操作系統(tǒng),如FreeBSD、DOS和Windows系列。
GRUB包含兩個(gè)階段:Stage 1和Stage2。Stage1被安裝到磁盤(pán)的MBR,它直接加載Stage2并執(zhí)行跳轉(zhuǎn)。Stage2主要功能是為了加載其他操作系統(tǒng)。Stage2首先把系統(tǒng)切換到保護(hù)模式,設(shè)置好C語(yǔ)言運(yùn)行環(huán)境。系統(tǒng)執(zhí)行時(shí)首先查找配置文件(如grub.conf和menu.lst)。如果沒(méi)有,則執(zhí)行一個(gè)Shell,并等待用戶輸入命令。當(dāng)用戶輸入boot命令時(shí),將控制權(quán)轉(zhuǎn)移給操作系統(tǒng)。
加載內(nèi)核(Kernel)
當(dāng)Stage 2 bootloader已經(jīng)被加載到內(nèi)存中,文件系統(tǒng)被識(shí)別到,并且默認(rèn)的內(nèi)核鏡像和initrd鏡像被加載到內(nèi)存中。
內(nèi)核鏡像已經(jīng)準(zhǔn)備好,并且控制權(quán)從Stage 2 bootloader傳遞過(guò)來(lái),啟動(dòng)過(guò)程的Kernel階段就可以開(kāi)始了。內(nèi)核鏡像并非直接可以運(yùn)行,而是一個(gè)被壓縮過(guò)的,系統(tǒng)讀取內(nèi)存映像,并進(jìn)行解壓縮操作。此時(shí),屏幕一般會(huì)輸出“Uncompressing Linux”的提示。當(dāng)解壓縮內(nèi)核完成后,屏幕輸出“OK, booting the kernel”。
init
內(nèi)核初始化的最后一步就是啟動(dòng) pid
為 1
的 init
進(jìn)程,這個(gè)進(jìn)程是系統(tǒng)的第一個(gè)進(jìn)程,它負(fù)責(zé)產(chǎn)生其他所有用戶進(jìn)程。
-
init
以守護(hù)進(jìn)程方式存在,是所有其他進(jìn)程的祖先。init
進(jìn)程非常獨(dú)特,能夠完成其他進(jìn)程無(wú)法完成的任務(wù)。 -
init
系統(tǒng)能夠定義、管理和控制init
進(jìn)程的行為。它負(fù)責(zé)組織和運(yùn)行許多獨(dú)立的或相關(guān)的始化工作(因此被稱為init
系統(tǒng)),從而讓計(jì)算機(jī)系統(tǒng)進(jìn)入某種用戶預(yù)訂的運(yùn)行模式。 -
僅僅將內(nèi)核運(yùn)行起來(lái)是毫無(wú)實(shí)際用途的,必須由
init
系統(tǒng)將系統(tǒng)代入可操作狀態(tài)。比如啟動(dòng)外殼shell
后,便有了人機(jī)交互,這樣就可以讓計(jì)算機(jī)執(zhí)行一些預(yù)訂程序完成有實(shí)際意義的任務(wù)。
總結(jié)
最終,Linux啟動(dòng)過(guò)程如下圖所示:
資料
- bios
- 【博客419】cpu實(shí)模式與保護(hù)模式
- 操作系統(tǒng)啟動(dòng)過(guò)程
- 操作系統(tǒng)啟動(dòng)過(guò)程
- 【操作系統(tǒng)】操作系統(tǒng)的啟動(dòng)都干了些什么
- BIOS加電自檢的過(guò)程是怎樣的
- 淺談操作系統(tǒng)-啟動(dòng)過(guò)程
- 關(guān)于硬盤(pán)主引導(dǎo)扇區(qū)的結(jié)構(gòu)及功能全面釋疑
- 怎樣設(shè)置BIOS電腦啟動(dòng)順序?
- 硬盤(pán):主分區(qū)、擴(kuò)展分區(qū)、邏輯分區(qū)、活動(dòng)分區(qū)、系統(tǒng)分區(qū)、啟動(dòng)分區(qū)、引導(dǎo)扇區(qū)、MBR解析
- LINUX 啟動(dòng)過(guò)程
- 深入LINUX啟動(dòng)過(guò)程
- LINUX啟動(dòng)過(guò)程詳解
- 解讀LINUX啟動(dòng)過(guò)程
- LINUX啟動(dòng)過(guò)程
最后
大家如果喜歡我的文章,可以關(guān)注我的公眾號(hào)(程序員麻辣燙)
我的個(gè)人博客為:https://shidawuhen.github.io/
往期文章回顧:
- 設(shè)計(jì)模式
- 招聘
- 思考
- 存儲(chǔ)
- 算法系列
- 讀書(shū)筆記
- 小工具
- 架構(gòu)
- 網(wǎng)絡(luò)
- Go語(yǔ)言