Linux學習記錄 (1)計算機初始化啟動過程

2021-08-16 18:12:17 字數 4088 閱讀 7000

為什麼我們把 「啟動」 稱作 「boot」 ?boot原來的意思是靴子,」啟動」與靴子有什麼關係呢? 原來,這裡的boot是bootstrap(鞋帶)的縮寫,它來自一句諺語:

『pull oneself up by one』s bootstraps』

字面意思是」拽著鞋帶把自己拉起來」,這當然是不可能的事情。最早的時候,工程師們用它來比喻,計算機啟動是乙個很矛盾的過程:必須先執行程式,然後計算機才能啟動,但是計算機不啟動就無法執行程式!

早期真的是這樣,必須想盡各種辦法,把一小段程式裝進記憶體,然後計算機才能正常執行。所以,工程師們把這個過程叫做」拉鞋帶」,久而久之就簡稱為boot了;

計算機啟動分兩個階段

不同的作業系統其啟動的流程自然有所區別,所以啟動的過程也可以按照作業系統啟動前後,分兩個階段來介紹:計算機初始化啟動過程 和 作業系統啟動過程;

上個世紀70年代初,」唯讀記憶體」(read-only memory,縮寫為rom)發明,開機程式被刷入rom晶元,計算機通電後,第一件事就是讀取它。

這塊晶元裡的程式叫做」基本輸入輸出系統」(basic input/output system),簡稱為bios。

它是被固化在計算機rom晶元上的一組程式。它是微機系統軟、硬體之間的乙個可程式設計介面,通過跳線開關和系統配帶的驅動程式盤,可以對rom進行重寫,方便地實現bios公升級。

按下電源開關,電源就開始向主機板和其它裝置供電,此時電壓還不穩定;

主機板控制晶元組會向cpu發出乙個reset訊號,讓cpu復位初始化;

主板晶元組檢測到電源已經開始穩定供電了(當然從不穩定到穩定的過程只是一瞬間的事情),它便撤去reset訊號(如果是手工按下計算機面板上的reset按鈕來重啟機器,那麼鬆開該按鈕時晶元組就會撤去reset訊號);

cpu馬上就從位址ffff:0000h處開始執行指令,這個位址在系統bios的位址範圍內,無論三大bios廠商2,放在這裡的只是一條跳轉指令,跳到bios系統中真正的啟動**處。

系統bios的啟動**首先進行post(加電後自檢)。

post主要檢測系統中一些關鍵裝置是否存在和能否正常工作,例如記憶體和顯示卡等裝置;

由於post在初始化顯示卡之前,此時顯示卡還沒有初始化,如果系統bios在進行post的過程中發現了一些致命錯誤,例如沒有找到記憶體或者記憶體有問題(此時只會檢查640k常規記憶體),那麼系統bios就會直接控制喇叭發聲來報告錯誤,聲音的長短和次數代表了錯誤的型別

在正常情況下,post過程進行得非常快,幾乎無法感覺到它的存在。post結束之後就會呼叫其它**來進行更完整的硬體檢測。

接下來系統bios將查詢顯示卡的bios

存放顯示卡bios的rom晶元的起始位址通常設在c0000h處,系統bios在這個地方找到顯示卡bios之後就呼叫它的初始化**,由顯示卡bios來初始化顯示卡

此時多數顯示卡都會在螢幕上顯示出一些初始化資訊,介紹生產廠商、圖形晶元型別等內容,不過這個畫面幾乎是一閃而過。

系統bios接著會查詢其它裝置的bios程式,找到之後同樣要呼叫這些bios內部的初始化**來初始化相關的裝置

查詢完所有其它裝置的bios之後,系統bios將顯示出它自己的啟動畫面,其中包括有系統bios的型別、序列號和版本號等內容。

接著系統bios將檢測和顯示cpu的型別和工作頻率,測試所有的ram,並同時在螢幕上顯示記憶體測試的進度。

可以在cmos設定中自行決定使用簡單耗時少或者詳細耗時多的測試方式。

記憶體測試通過之後,系統bios將開始檢測系統中安裝的一些標準硬體裝置,包括硬碟、cd-rom、串列埠、並口和軟碟機等裝置,另外絕大多數較新版本的系統bios在這一過程中還要自動檢測和設定記憶體的定時引數、硬碟引數和訪問模式等。

標準裝置檢測完畢後,系統bios內部支援即插即用的**將開始檢測和配置系統中安裝的即插即用裝置。每找到乙個裝置之後,系統bios都會在螢幕上顯示出裝置的名稱和型號等資訊,同時為該裝置分配中斷、dma通道和i/o埠等資源。

到這一步為止,所有硬體都已經檢測配置完畢了,多數系統bios會重新清屏並在螢幕上方顯示出乙個**,其中概略地列出了系統中安裝的各種標準硬體裝置,以及它們使用的資源和一些相關工作引數。

根據bios中對啟動順序的設定,bios自己會依次掃瞄各個引導裝置,然後第乙個被掃瞄到具有引導程式(bootloader)的裝置就被作為要啟動的引導裝置。

開啟bios的操作介面,裡面有一項就是」設定啟動順序」,如 phonix bios 的設定:

呼叫int 19h啟動自舉程式(啟用作業系統的入口點)

bios按照」啟動順序」,把控制權轉交給排在第一位的儲存裝置。

這一步實現起來的步驟比較多,前面的bios通過讀取並執行啟動裝置的mbr中的bootloader,而bootloader要實現的功能就是提供乙個選單給使用者,讓使用者去選擇要啟動的系統或不同的核心版本,然後把使用者選擇的核心版本載入至ram中的特定空間,接著在ram中解壓、展開,而後把系統控制權移交給核心。

這時,計算機讀取該裝置的第乙個扇區,也就是讀取最前面的512個位元組。如果這512個位元組的最後兩個位元組是0x55和0xaa,表明這個裝置可以用於啟動;如果不是,表明裝置不能用於啟動,控制權於是被轉交給」啟動順序」中的下乙個裝置。

這最前面的512個位元組,就叫做」主引導記錄」(master boot record,縮寫為mbr)。

grub是bootloader中的一種,就grub來說,為了打破在mbr中只有446bytes用於存放bootloader這一限制,所以這一步的實現是這樣的:grub是通過分成三個階段來實現載入核心這一功能的,這三個階段分別是:stage1, stage1.5以及stage2。其中:

概述:假如要啟動的是硬碟裝置,首先我們的硬體平台主機板bios必須能夠識別硬碟,然後bios才能載入硬碟中的bootloader,而bootloader自身載入後就能夠直接識別當前主機上的硬碟裝置了;

不過,能夠識別硬碟裝置不代表能夠識別硬碟裝置中的檔案系統,因為檔案系統是額外附加的一層軟體組織的檔案結構,所以要對接一種檔案系統,就必須要有對應的能夠識別和理解這種檔案系統的驅動,這種驅動就稱為檔案系統驅動。

而stage1.5就是向grub提供檔案系統驅動的,這樣stage1就能訪問stage2及核心所在的分割槽(/boot)了。

bios即基本輸入/輸出系統,它是被固化在計算機rom晶元上的一組程式。它是微機系統軟、硬體之間的乙個可程式設計介面,通過跳線開關和系統配帶的驅動程式盤,可以對rom進行重寫,方便地實現bios公升級。 ↩

award bios、ami bios 和 phonix bios,開發bios是一件技術含量很高的工作,從業人員也少;一流主機板廠商的bios研發人員,年薪往往是以七位數字來計算的! ↩

cmos是一塊可讀寫的ram晶元,儲存系統當前的硬體配置情況和使用者的設定引數;bios中裝有乙個程式稱為「系統設定程式」,設定cmos中的引數;cmos由電池供電,斷電後資料會丟失;前16位元組用於儲存時間. ↩

主引導記錄(mbr,main boot record)是位於磁碟最前邊的一段引導(loader)**。它負責磁碟作業系統(dos)對磁碟進行讀寫時分區合法性的判別、分割槽引導資訊的定位,它由磁碟作業系統(dos)在對硬碟進行初始化時產生的。 ↩

1 Linux學習筆記 計算機概論

1 計算機組成 輸入單元 輸出單元 cpu內部的控制單元 算數邏輯單元以及主記憶體 還有外部儲存裝置 最重要的是cpu和記憶體,也是最容易理解錯誤的。cpu 為乙個具有特定功能的晶元,裡頭含有微指令集,如果你想要讓主機進行什麼特異的功能,就得要參考這顆 cpu 是否有相關內建的微指令集才可以。由於 ...

linux學習 計算機基礎理論1

計算機的主要組成為 cpu 和 記憶體。cpu負責計算 記憶體負責儲存計算資料。cpu中有控制器 運算器 和快取 控制器 充當領導角色 領導是大神,指揮計算機工作的每一步 運算器充當員工角色 而快取從當二者的秘書 記憶體相當於公司院內的倉庫 外存 硬碟相當於公司在外面租的倉庫 所以想要用硬碟的資料就...

計算機原理學習(1)

又有兩年沒有寫blog了,這2年從做windows phone 到 android c 慢慢的很多觀念也有所改變了。以前一心想做c 相關的工作,現在卻感覺,什麼語言都無所謂了。公司專案挺忙,加班比較多,不忙的時候又想休息休息。所以blog又荒廢了好久。也很少有時間早學習,加上年紀越來越大,學習動力和...