按下電源之後
按下電源鍵之後
我們在按下電源鍵後,電腦要經過這麼幾個階段才能為我們正常使用。
預引導階段:
從我們按下電源鍵到操作系統開始啟動,這段時間稱為預引導階段。當我們按下電源鍵後,CPU開始執行存放在BIOS(基本輸入輸出系統)中的指令。(BIOS,Basic Input Output System基本輸入輸出系統,它是一組固化到計算機內主板上一個ROM晶元上的程序,它保存著計算機最重要的基本輸入輸出的程序、系統設置信息、開機後自檢程序和系統自啟動程序。 其主要功能是為計算機提供最底層的、最直接的硬體設置和控制。它與計算機安裝的操作系統無關。)BIOS程序首先檢查計算機硬體能否滿足運行的基本條件,即「硬體自檢」(POST)。
POST 負責完成如下系統和檢測功能:
- 執行硬體初始化檢測,比如測試當前內存總數
- 校驗啟動操作系統所必須的設備,比如硬碟
- 從位於主板上的CMOS中檢索系統設置
如果硬體出現問題,主板會發出不同含義的蜂鳴,啟動終止。如果沒有問題,屏幕就會顯示出CPU、內存、硬碟等信息。
如果硬體沒有問題,那麼BIOS就會進入下一階段的程序。這時,BIOS需要知道,下一階段的啟動程序到底存放在哪一個設備當中。也就是說BIOS需要有一個外部存儲設備的排序,排在前面的設備就是優先轉交控制權的設備。這種排序叫做啟動排序,也就是我們平時進入BIOS界面時能看到的Boot Sequence。
BIOS中啟動順序的界面如下圖。
如果我們沒有進行特殊操作的話,那麼BIOS就會按照這個啟動順序將控制權交給下一個存儲設備。我們在使用U盤光碟之類的裝系統時就是在這裡將啟動順序改變了,將本來要移交給硬碟的控制權交給了U盤或者光碟。
第一存儲設備被激活後,計算機讀取第一存儲設備的第一扇區,也就是讀取最前面的512個位元組(MBR)。如果這512個位元組的最後兩個位元組是0x55和0xAA,表明這個設備可以啟動;如果不是,表明設備不能用於啟動,控制權移交給下一個存儲設備。我們找到可用的MBR後,計算機從MBR中載入並初始化NTLDR文件以解析Boot.ini文件。到這裡,計算機的預引導階段就結束了。
(主引導記錄MBR是位於磁碟最前邊的一段引導代碼。它負責磁碟操作系統對磁碟進行讀寫時分區合法性的判別、分區引導信息的定位,它由磁碟操作系統在對硬碟進行初始化時產生的。硬碟的主引導記錄MBR是不屬於任何一個操作系統的,它先於所有的操作系統而被調入內存,並發揮作用,然後才將控制權交給主分區內的操作系統,並用主分區信息表來管理硬碟。
NTLDR,系統載入程序,存在於系統盤的根目錄,用於解析Boot.ini文件裝載操作系統。它是一個隱藏的只讀的系統文件。
Boot.ini中「Timeout=」用來控制啟動菜單顯示的時間,如果你在規定的時間內未選擇操作系統,系統將啟動默認的操作系統。默認的顯示時間是 30 秒,你可以修改「=」後面的數值來改變啟動菜單顯示的時間。「default=」用來控制默認的啟動系統,「=」後面是操作系統的啟動目錄,partition(1)所指的就是第1個分區,通常也就是c:盤,WINDOWS就是你的系統文件夾。)
引導階段:
當計算機載入MBR後,計算機會從MBR中知道當前硬碟的文件格式、硬碟分區情況、系統盤存放位置等信息,然後控制權將被移交給了系統盤所在的分區。如果硬碟上裝有多個系統的話,那麼控制權移交之前還會出現操作系統的選擇頁面。
選擇操作系統後,我們還需進行硬體檢測,將收集到的計算機硬體信息列表並返回到NTLDR,以便後面將計算機的硬體信息寫入註冊表中。接著,計算機進入配置選擇階段。如果計算機含有多個硬體配置文件列表,那麼可以選擇你所需要的硬體。否則計算機將直接使用默認的配置文件載入系統。引導階段結束,接下來就是載入內核階段。
載入內核階段:
在載入內核階段中,NTLDR將載入NTOKRNL.EXE內核程序,然後NTLDR將載入硬體抽象層(HAL.dll),接著系統將載入註冊表中的「HKEY_MACHINESystem」鍵值,這時NTLDR將讀取「HKEY_MACHINESystemselect」鍵值來決定哪一個ControlSet將被載入。所載入的ControlSet將包含設備的驅動程序程序以及需要載入的服務。再接著NTLDR載入註冊表「HKEY_LOCAL_MACHINESystemservice」下的start鍵值為0的底層設備驅動。當ControlSet的鏡像CurrentControlSet被載入時,NTLDR將把控制權傳遞給NTOSKRNL.EXE,至此引導過程將結束。
(如果在啟動的時候按F8,將會在啟動菜單中看到多種啟動模式,)
這個階段是前一個階段的延續,是下一個階段的開始。從預引導階段就開始運行的NTLDR在這裡繼續發揮著一個藥引的作用,將內核一步步地喚醒。這個階段結束時,內核就被喚醒了,下個階段就是系統內核完全載入活動身體的時候了。
初始化內核階段:
我們經常開機,也經常提到內核,但是開機之後什麼時候算是內核正式開始運行了呢?當我們看到微軟那風騷的logo的時候,就代表著我們的內核正在活動筋骨準備運行啦。
前面,計算機已經進行了硬體檢測,並且數據被保存在了KEY_LOCAL_MACHINEHARDWARE鍵。現在,內核通過引用我們前面的HKEY_LOCAL-MACHINEsystemcurrent的默認值複製control set創建了Clone ControlSet。Clone control set配置是計算機數據的備份,不包括啟動中的改變,也不會被修改。
載入內核階段中,計算機載入了設備驅動程序。這裡,內核再初始化這些驅動程序。然後內核掃描HKEY_LOCAL_MACHINEsystemcurrentcontrolsetservices中start鍵值為1的驅動程序並載入初始化。
如果在這個過程中有錯誤產生,那麼內核將會根據errorcontrol中的鍵值來決定如何處理。Errorcontrol鍵值為1時,錯誤普通,計算機系統將忽略這個錯誤並執行下一步;當值為2時,計算機系統將會根據lastknowngoodcontrolset中的內容重新啟動;當值為3時,錯誤標誌為危機/關鍵,初次遇到時,系統將會用lastknowngoodcontrol set重新啟動,如果重新啟動任然失敗,系統將會報告啟動失敗,錯誤信息被顯示,系統停止啟動。
當這些做完後,session manager將會啟動控制所有的輸入輸出設備機訪問顯示屏幕的win32和winlogon進程,至此,初始化內核階段完畢。
(大家可以看看自己的註冊表,來看看我們的內核所依賴的鍵值。註冊表存在於系統盤的systems文件夾下,打開regedit.exe就是,也可以通過運行,輸入regedit來打開。)
登錄階段:
上面,計算機背後的工作已經準備好了,可以進行露臉的登錄工作了。說起登錄,我們都會有所了解,但是登錄並不僅僅是我們常見的賬號密碼登錄。
首先,來看看我們平常的互動式登錄。我們平常的登錄就是輸入賬號密碼,然後提交給系統。系統會通過資料庫信息對比來決定給不給予許可權和給予什麼樣的許可權。
(你可以改動註冊表中的legalnoticecaption來設定登錄界面的窗口標題,也可以改動legalnoticetext中的數據來定義歡迎窗口中的文字。)
除了這種我們看得到的登錄之外,系統在後台會在需要服務時會進行服務的登錄。就像我們經常在任務管理器裡面看到的服務信息。
圖中的winlogon服務就是通過系統許可權來登錄的,而winWord則是通過user許可權來登錄的。
完成登錄之後,我們的計算機已經啟動並且認可了我們的許可權,我們可以大大方方地使用它了。
在linux系統中,基本的內容也差不多。在linux系統的計算機中,控制權轉交給操作系統後,先載入/boot目錄下面的kernel。內核載入完成後,第一個運行的程序是/sbin/init。它根據配置文件產生的init進程。Init進程是linux系統啟動後的第一個進程,進程編號為1,其他進程都由這個進程衍生出來。然後init進程掛載系統的各個模塊,直至執行/bin/login程序,出現登錄頁面,等待用戶輸入用戶名和密碼。
(註:此文適用範圍僅是老版系統,並不完全適用於當前主流操作系統。(文中的圖片僅是我在win7環境下為輔助說明所截,並不代表文中的內容適用於win7等當前主流操作系統))
推薦閱讀:
※電腦開機之後滴滴響是怎麼回事?
※馨儀人工耳蝸開機日記
※win10開機時提示該設備處於離線狀態,請使用在此設備上最近使用過的密碼登錄。是怎麼回事?密碼進不去?
※最近有什麼病毒能使開機變慢?