對於經典的 bios 技術,整個啟動過程主要分為四個階段。
計算機的主機板上有一塊 rom 晶元,開機程式被刷入晶元,計算機通電後,第一件事就是讀取它。這塊晶元裡的程式叫做「基本輸入輸出系統」(basic input/output system),簡稱為 bios。在 bios 內有底層 i/o 軟體,包括讀鍵盤、寫螢幕、磁碟 i/o 以及其他過程。如今,它被儲存在快閃儲存器中,是非易失性的,當 bios 中發現錯誤時,可以由作業系統進行更新。
硬體自檢
bios 程式首先檢查,計算機硬體能否滿足執行的基本條件,這叫做「硬體自檢」(power-on self-test),縮寫為 post。
如果硬體出現問題,主機板會發出不同含義的蜂鳴,啟動中止。如果沒有問題,螢幕就會顯示出 cpu、記憶體、硬碟等資訊。
啟動順序
硬體自檢完成後,bios 把控制權轉交給下一階段的啟動程式。
這時,bios 需要知道,「下一階段的啟動程式」具體存放在哪乙個裝置。也就是說,bios 需要有乙個外部儲存裝置的排序,排在前面的裝置就是優先轉交控制權的裝置。這種排序叫做「啟動順序」(boot sequence)。
開啟 bios 的操作介面,裡面有一項就是「設定啟動順序」。
bios 按照「啟動順序」,把控制權轉交給排在第一位的儲存裝置。
這時,計算機讀取該裝置的第乙個扇區,也就是讀取最前面的 512 個位元組。如果這 512 個位元組的最後兩個位元組是 0x55 和 0xaa,表明這個裝置可以用於啟動;如果不是,表明裝置不能用於啟動,控制權於是被轉交給「啟動順序」中的下乙個裝置。
這最前面的 512 個位元組,就叫做「主引導記錄」(master boot record,縮寫為 mbr)。
主引導記錄的結構
「主引導記錄」只有 512 個位元組,放不了太多東西。它的主要作用是,告訴計算機到硬碟的哪乙個位置去找作業系統。
主引導記錄由三個部分組成:
(1)第 1-446 位元組:呼叫作業系統的機器碼。
(2)第 447-510 位元組:分割槽表(partition table)。
(3)第 511-512 位元組:主引導記錄簽名(0x55 和 0xaa)。
其中,第二部分「分割槽表」的作用,是將硬碟分成若干個區。
分割槽表硬碟分割槽有很多好處。考慮到每個區可以安裝不同的作業系統,「主引導記錄」因此必須知道將控制權轉交給哪個區。
分割槽表的長度只有 64 個位元組,裡面又分成四項,每項 16 個位元組。所以,乙個硬碟最多只能分四個一級分割槽,又叫做「主分割槽」。
每個主分割槽的 16 個位元組,由 6 個部分組成:
(1)第 1 個位元組:如果為 0x80,就表示該主分割槽是啟用分割槽,控制權要轉交給這個分割槽。四個主分割槽裡面只能有乙個是啟用的。
(2)第 2-4 個位元組:主分割槽第乙個扇區的物理位置(柱面、磁頭、扇區號等等)。
(3)第 5 個位元組:主分割槽型別。
(4)第 6-8 個位元組:主分割槽最後乙個扇區的物理位置。
(6)第 13-16 位元組:主分割槽的扇區總數。
最後的四個位元組(「主分割槽的扇區總數」),決定了這個主分割槽的長度。也就是說,乙個主分割槽的扇區總數最多不超過 2 的 32 次方。
這時,計算機的控制權就要轉交給硬碟的某個分割槽了,這裡又分成三種情況。
情況a:卷引導記錄
上一節提到,四個主分割槽裡面,只有乙個是啟用的。計算機會讀取啟用分割槽的第乙個扇區,叫做「卷引導記錄」(volume boot record,縮寫為 vbr)。
「卷引導記錄」的主要作用是,告訴計算機,作業系統在這個分割槽裡的位置。然後,計算機就會載入作業系統了。
情況b:擴充套件分割槽和邏輯分割槽
隨著硬碟越來越大,四個主分割槽已經不夠了,需要更多的分割槽。但是,分割槽表只有四項,因此規定有且僅有乙個區可以被定義成「擴充套件分割槽」(extended partition)。
所謂「擴充套件分割槽」,就是指這個區裡面又分成多個區。這種分割槽裡面的分割槽,就叫做「邏輯分割槽」(logical partition)。
計算機先讀取擴充套件分割槽的第乙個扇區,叫做「擴充套件引導記錄」(extended boot record,縮寫為 ebr)。它裡面也包含一張 64 位元組的分割槽表,但是最多只有兩項(也就是兩個邏輯分割槽)。
計算機接著讀取第二個邏輯分割槽的第乙個扇區,再從裡面的分割槽表中找到第三個邏輯分割槽的位置,以此類推,直到某個邏輯分割槽的分割槽表只包含它自身為止(即只有乙個分割槽項)。因此,擴充套件分割槽可以包含無數個邏輯分割槽。
但是,似乎很少通過這種方式啟動作業系統。如果作業系統確實安裝在擴充套件分割槽,一般採用下一種方式啟動。
情況c:啟動管理器
在這種情況下,計算機讀取「主引導記錄」前面 446 位元組的機器碼之後,不再把控制權轉交給某乙個分割槽,而是執行事先安裝的「啟動管理器」(boot loader),由使用者選擇啟動哪乙個作業系統。
linux 環境中,目前最流行的啟動管理器是 grub。
控制權轉交給作業系統後,作業系統的核心首先被載入記憶體。
以 linux 系統為例,先載入 /boot 目錄下面的 kernel。核心載入成功後,第乙個執行的程式是 /sbin/init。它根據配置檔案(debian 系統是 /etc/initab)產生 init 程序。這是 linux 啟動後的第乙個程序,pid 程序編號為 1,其他程序都是它的後代。
然後,init 執行緒載入系統的各個模組,比如視窗程式和網路程式,直至執行 /bin/login 程式,跳出登入介面,等待使用者輸入使用者名稱和密碼。
至此,全部啟動過程完成。
cxuan-os-修改第二版.pdf
計算機啟動過程
計算機按下開機按鍵到啟動到作業系統的過程中,計算機到底經歷了哪些步驟呢 1 按下power bottom之後,計算機會經過一系列的上電過程 power squence 最後然讓cpu reset.cpu reset 表示主機板電已經上好了並且cpu開始工作 2 cpu開始工作時候緊接著就通過sb或者...
計算機啟動過程
從開啟電源到開始操作,計算機的啟動是乙個非常複雜的過程。我一直搞不清楚,這個過程到底是怎麼回事,只看見螢幕快速滾動各種提示.這幾天,我查了一些資料,試圖搞懂它。下面就是我整理的筆記。零 boot的含義 先問乙個問題,啟動 用英語怎麼說?回答是boot。可是,boot原來的意思是靴子,啟動 與靴子有什...
計算機啟動過程
對intel8086加電或復位的時候,cs 0xffff,ip 0x0000,處理機執行指令的時候是從低位址到高位址,這個位址距離記憶體頂部0xfffff,只差16個位元組,要是ip值超過0x000f,它與cs形成的實體地址就會因為溢位,而變回0x0001 所以在這個位址 cs 0xffff,ip ...