計算機啓動過程

今天被室友問起計算機的啓動過程,突然想起大一的時候做過一個ppt,講計算機的維修,那裏面詳細的講述了計算機的啓動過程。當時,沒有博客所以也就沒有寫出來。現在,有博客了,就想把它博客化了。

關於計算機是如何啓動的這個話題,總讓我有一種很古老的感覺,雖然,直到今日PC依然以這樣的方式來啓動。只能說,現在的程序越寫越高層,這樣底層的事情確實無需關心。結果也就是像這方面的內容在網絡上並不好找,很多資料也不是很詳細。但是,總有一些喜歡“考古”的人,比如我,就喜歡看這些古老的東西。在此分享一下我所知道的。但難免有我不知道的,或理解錯誤的。

計算機上電

當我們按下電源開關時,電源就開始向主板和其它設備供電,此時電壓還不太穩定,主板上的控制芯片組會向CPU發出並保持一個RESET(重置)信號,讓CPU內部自動恢復到初始狀態,但CPU在此刻不會馬上執行指令。當芯片組檢測到電源已經開始穩定供電了(當然從不穩定到穩定的過程只是一瞬間的事情),它便撤去RESET信號(如果是手工按下計算機面板上的Reset按鈕來重啓機器,那麼鬆開該按鈕時芯片組就會撤去RESET信號),CPU馬上就從地址FFFF0H處開始執行指令,從前面的介紹可知,這個地址實際上在系統BIOS的地址範圍內,無論是Award BIOS還是AMI BIOS,放在這裏的只是一條跳轉指令,跳到系統BIOS中真正的啓動代碼處。(這裏有個小小的bug,CPU從0xFFFF_FFF0開始執行,0xFFFF_FFF0位置是將BIOS中的ROM中映射到那裏,那裏其實也就是一條跳轉指令,它會跳轉到1M一下的地址來執行。實際情況可能更加複雜。BIOS的ROM其實只映射到了最高的內存地址上,而且它的大小可能超過了64K(據說是3M差不多),也就是底下的1M空間是不夠它映射的。如果是這樣,那麼它爲什麼要跳到下面去執行呢?它執行的又是什麼呢?之所以要跳到下面去執行是爲了兼容8086的機器,因爲它的BIOS就是在1M以下的地址。它執行的也是BIOS中的代碼,只不過在機器開啓的時候,他就已經將BIOS中的一部分代碼映射到了1M以下的地址上,但是不是全部BIOS代碼。跳到這個代碼執行後,這部分的代碼會將BIOS中的代碼從最高地址空間的BIOS代碼拷貝到1M以下來執行。這裏還有一個技術叫shadow memory。本來很多1M以下的內存地址空間的都是映射到ROM上的。但是,ROM的讀速度是比較慢的。BIOS的代碼中會將它這部分的地址空間映射到一段RAM,拷貝代碼到它上面,將其改爲只讀。)總之,它會表現的像8086那樣啓動,所以,就算是想象成之前說的那種簡單的啓動模式,也沒有什麼太大的問題。

加電後自檢

系統BIOS的啓動代碼首先要做的事情就是進行POST(Power-On Self Test,加電後自檢),POST的主要任務是檢測系統中一些關鍵設備是否存在和能否正常工作,例如內存和顯卡等設備。由於POST是最早進行的檢測過程,此時顯卡還沒有初始化,如果系統BIOS在進行POST的過程中發現了一些致命錯誤,例如沒有找到內存或者內存有問題(此時只會檢查640K常規內存),那麼系統BIOS就會直接控制喇叭發聲來報告錯誤,聲音的長短和次數代表了錯誤的類型。在正常情況下,POST過程進行得非常快,我們幾乎無法感覺到它的存在,POST結束之後就會調用其它代碼來進行更完整的硬件檢測。

BIOS

先跳開介紹一下bios。

BIOS全名叫(basic input output system)即基本輸入/輸出系統,是計算機中最基礎的而最重要的程序。它爲計算機提供最低級的、最直接的硬件控制,計算機的原始操作都是依照固化在BIOS裏的內容來完成的。


BIOS是由Firmware(固件)和ROM(Read Only Memory,只讀存儲器)芯片組成的。Firmware 是一個軟件,但與普通軟件完全不同,它是固化在集成電路內部的程序代碼,集成電路的功能就是由這些程序決定的。ROM是這些程序的載體。也就是Firmware被寫入(也叫固化)到ROM中。(例子:CIH)

CMOS和BIOS關係

CMOS的本意是互補金屬氧化物半導體存儲器,是一種大規模應用於集成電路芯片製造的原料。在計算機中是主板上的一塊可讀寫的RAM芯片,用來保存當前系統的硬件配置和用戶對某些參數的設置。CMOS由主板的電池供電(還供電主板實時時鐘)。它只有數據保存功能。早期的CMOS設置程序駐留在軟盤上,使用不方便。現在廠家將CMOS設置的程序做到了BIOS芯片中,開機按相應的鍵就可以進入CMOS設置(同時也叫做BIOS設置)。

BIOS設置

BIOS報警聲音大全

  • AWARD的BIOS報警聲:
  • 次數 內涵
  • 1短: 系統正常啓動。這是我們每天都能聽到的,也表明機器沒有任何問題。
  • 2短: 常規錯誤,請進入CMOS Setup,重新設置不正確的選項。
  • 1長1短: RAM或主板出錯。換一條內存試試,若還是不行,只好更換主板。
  • 1長2短: 顯示器或顯示卡錯誤。
  • 1長3短: 鍵盤控制器錯誤。檢查主板。
  • 1長9短: 主板Flash RAM或EPROM錯誤,BIOS損壞。換塊Flash RAM試試。
  • 不斷地響(長聲): 內存條未插緊或損壞。重插內存條,若還是不行,只有更換一條內存。
  • 不停地響: 電源、顯示器未和顯示卡連接好。檢查一下所有的插頭。
  • 重複短響: 電源問題。
  • 無聲音無顯示: 電源問題。

系統設備初始化:

回來繼續講啓動過程。

接下來系統BIOS將查找顯卡的BIOS。存放顯卡BIOS的ROM芯片的起始地址通常設在C0000H處,系統BIOS在這個地方找到顯卡BIOS之後就調用它的初始化代碼,由顯卡BIOS來初始化顯卡,此時多數顯卡都會在屏幕上顯示出一些初始化信息,介紹生產廠商、圖形芯片類型等內容,不過這個畫面幾乎是一閃而過。(對於筆記本而言,一般這個時候會有一張廠商的LOGO,將這些輸出都蓋掉了,所以什麼也看不到。但是,可以進bios設置,改掉這個。)系統BIOS接着會查找其它設備的BIOS程序,找到之後同樣要調用這些BIOS內部的初始化代碼來初始化相關的設備。

同時按下Shift+Pause即可將畫面停留,按任意鍵繼續

系統設備測試

CPU & RAM

查找完所有其它設備的BIOS之後,系統BIOS將顯示出它自己的啓動畫面,其中包括有系統BIOS的類型、序列號和版本號等內容。
接着系統BIOS將檢測和顯示CPU的類型和工作頻率,然後開始測試所有的RAM,並同時在屏幕上顯示內存測試的進度,我們可以在CMOS設置中自行決定使用簡單耗時少或者詳細耗時多的測試方式。



標準設備

內存測試通過之後,系統BIOS將開始檢測系統中安裝的一些標準硬件設備,包括硬盤、CD-ROM、串口、並口、軟驅等設備,另外絕大多數較新版本的系統BIOS在這一過程中還要自動檢測和設置內存的定時參數、硬盤參數和訪問模式等。

即插即用設備

標準設備檢測完畢後,系統BIOS內部的支持即插即用的代碼將開始檢測和配置系統中安裝的即插即用設備,每找到一個設備之後,系統BIOS都會在屏幕上顯示出設備的名稱和型號等信息,同時爲該設備分配中斷、DMA通道和I/O端口等資源。 


資源列表

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

更新ESCD

接下來系統BIOS將更新ESCD(Extended System Configuration Data,擴展系統配置數據)。ESCD是系統BIOS用來與操作系統交換硬件配置信息的一種手段,這些數據被存放在CMOS(一小塊特殊的RAM,由主板上的電池來供電)之中。通常ESCD數據只在系統硬件配置發生改變後纔會更新,所以不是每次啓動機器時我們都能夠看到“Update ESCD… Success”這樣的信息,不過,某些主板的系統BIOS在保存ESCD數據時使用了與Windows 9x不相同的數據格式,於是Windows 9x在它自己的啓動過程中會把ESCD數據修改成自己的格式,但在下一次啓動機器時,即使硬件配置沒有發生改變,系統BIOS也會把ESCD的數據格式改回來,如此循環,將會導致在每次啓動機器時,系統BIOS都要更新一遍ESCD,這就是爲什麼有些機器在每次啓動時都會顯示出相關信息的原因。

選擇設備啓動

ESCD更新完畢後,系統BIOS的啓動代碼將進行它的最後一項工作,即根據用戶指定的啓動順序從U盤、軟盤、硬盤、網絡或光驅啓動。這是BIOS代碼中的最後一個步驟。

磁盤邏輯結構

MBR

又跳開講點別的。

MBR,全稱爲Master Boot Record,即硬盤的主引導記錄。 爲了便於理解,一般將MBR分爲廣義和狹義兩種:廣義的MBR包含整個扇區(引導程序、分區表及分隔標識),也就是上面所說的主引導記錄;而狹義的MBR僅指引導程序而言。
硬盤的0柱面、0磁頭、1扇區稱爲主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區表DPT(Disk Partition table)和硬盤有效標誌(55AA)。在總共512字節的主引導扇區裏主引導程序(boot loader)佔446個字節,第二部分是Partition table區(分區表),即DPT,佔64個字節,硬盤中分區有多少以及每一分區的大小都記在其中。第三部分是magic number,佔2個字節,固定爲55AA。 


OBR

OBR(OS Boot Record)即操作系統引導扇區,通常位於硬盤的0柱面1磁頭1扇區(這是對於DOS來說的,對於那些以多重引導方式啓動的系統則位於相應的主分區/擴展分區的第一個扇區),是操作系統可直接訪問的第一個扇區,它也包括一個引導程序和一個被稱爲BPB(BIOS Parameter Block)的本分區參數記錄表。其實每個邏輯分區都有一個OBR,其參數視分區的大小、操作系統的類別而有所不同。引導程序的主要任務是判斷本分區根目錄前兩個文件是否爲操作系統的引導文件(例如MSDOS或者起源於MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一個文件讀入內存,並把控制權交予該文件。BPB參數塊記錄着本分區的起始扇區、結束扇區、文件存儲格式、硬盤介質描述符、根目錄大小、FAT個數、分配單元(Allocation Unit,以前也稱之爲簇)的大小等重要參數。OBR由高級格式化程序產生(例如DOS 的Format.com)。

也有叫DBR(Disk Boot Record),PBR(Partition Boot Record),都是差不多的概念。

分區問題

主分區,也稱爲主磁盤分區,和擴展分區、邏輯分區一樣,是一種分區類型。主分區中不能再劃分其他類型的分區,因此每個主分區都相當於一個邏輯磁盤(在這一點上主分區和邏輯分區很相似,但主分區是直接在硬盤上劃分的,邏輯分區則必須建立於擴展分區中)。
實際上在早期的硬盤分區中並沒有主分區、擴展分區和邏輯分區的概念,每個分區的類型都是現在所稱的主分區。由於硬盤僅僅爲分區表保留了64個字節的存儲空間,而每個分區的參數佔據16個字節,故主引導扇區中總計只能存儲4個分區的數據。也就是說,一塊物理硬盤只能劃分爲4個邏輯磁盤。在具體的應用中,4個邏輯磁盤往往不能滿足實際需求。爲了建立更多的邏輯磁盤供操作系統使用,引入了擴展分區和邏輯分區,並把原來的分區類型稱爲主分區。 在擴展分區中,邏輯分區通過鏈表的方式連接在一起。

整個磁盤的結構


啓動磁盤

繼續回來啓動過程,這裏以最常用的的磁盤作爲啓動設備爲例。

BIOS中最後一項,就是將控制權交給第一啓動盤的MBR中的引導程序,(此處爲磁盤,因爲磁盤也有可能有多個,所以bios設置裏面還需要設置哪個磁盤是第一啓動盤。)引導程序會在分區表中尋找活動分區,並將控制權交給活動分區的第一個扇區的引導程序(boot Loader),也就是上面的DBR中的boot loader。boot Loader 會執行相應的代碼,不同操作系統不相同。

不同bootloader的加載方式

ntldr(使用在NT5(win 2000,XP))

OBR中的引導程序(boot Loader)會尋找並加載根目錄下的ntldr,ntldr會打開根目錄下的boot.ini,boot.ini中有各種操作系統的位置和選擇項。當選擇NT 5系列的操作系統時,ntldr會去加載相應windows的內核,否則會將控制權交給相應的文件。

下面是一個boot.ini的例子。

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /usepmtimer 

bootmgr(使用在NT6(Win vista Win7))

Bootloader會到分區中尋找bootmgr,並將控制權交給它,bootmgr會到bcd文件中尋找多系統引導的信息,並顯示出來。如果選擇win nt6.x那麼bootmgr就會將控制權交給winload.exe 讓他加載系統內核。若是選擇早期window,那麼就將控制權交給ntldr,繼續nt 5的引導過程。

grub or lilo(使用在Linux)

linux中一般使用grub或者lilo來進行linux操作系統的加載。

一種是grub或者lilo直接接管了MBR,也就是他將程序寫到MBR裏面去,一開始就運行了,就運行了它的程序,然後它會去加載相應的配置文件,然後讓你選擇進入那個操作系統。如果,選擇windows,它會將控制權交給windows分區的OBR。如果是linux,它會加載linux的內核和ramdisk。在裝ubuntu的時候,默認它就是這麼幹的,然後我們既可以用windows,也可用linux。

另一種是grub或者lilo只接管OBR,那麼也就是系統的MBR會去調用它,如果它在激活分區。調用之後,就和上面說的一樣了。這樣一種加載方式方式叫做chain load,鏈式加載。

操作系統內核啓動

接下來就是操作系統內核得到了控制權,然後就…………

  

啓動過程概覽(以win7爲例)


參考

因爲年代久遠,已經找不到當時使用到的參考文檔了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章