附錄1


開機過程

這裡還是以簡單的DOS為例:

  1. 第一步當然是打開電源開關啦﹐傳統的AT型PC的電源開關就直接連在機器前面按鈕。而現在較新型的ATX型PC其開關則是屬於Soft Switch形式﹐其實電路已經接通在主機板上面的了﹐ATX開關只是發出一個啟動電源的命令就可以開啟電腦了。甚至您還可以通過設定CMOS讓鍵盤或鼠標甚至是MODEM來開機呢﹗

  2. 然後電源供應單元(Power Supply Unit)會先自我進行一次測試﹐當所有的電流和電壓可以接受了﹐然後會發送一個Power Good 信號給主機板。通常這只需要0.1到0.5秒的時間而已。

  3. 這時微處理器的時間控制晶片接收到 Power Good的信號﹐這會令其停止繼續向微處理器發出重啟(reset)信號﹐否則微處理器則一直會處於重啟狀態。

  4. 接著微處理器開始執行 ROM BIOS 內碼﹐並且是由記憶體的FFFF:0000地址開始。這個範圍距離最末端的可用ROM空間只有16 bytes大小﹐它包含有一個JMP(jump)指令切換到實際的ROM BIOS起始位址。

  5. ROM BIOS會對中央硬體進行測試以確定系統可以工作﹐如果有任何問題則會通過系統的喇叭發出一個信號表示顯像(video)系統還未準備就緒。

  6. 如果順利的話﹐BIOS會對圖像ROM從C000:0000到C780:0000這地址範圍作一次掃描﹐尋找顯示卡的ROM BIOS程式。如果此ROM BIOS被發現的話﹐還會安裝檢測程序進行測試。如果檢測通過﹐ROM就會被啟動﹐其ROM的內碼則會對顯示卡進行初始設定﹐螢幕上則這時會出現游標(cursor)。如果檢測失敗﹐或許看到的會是: C000 ROM Error 。

  7. 如果BIOS未能發現顯示卡的ROM﹐它會使用主機板ROM裡面的顯示驅動器(driver)嘗試對顯示硬體進行初始設定並出現游標。

  8. 主機板的ROM BIOS會把記憶體中從 C800:0000到DF80:0000以2K的增值範圍撥給任何其它插卡使用。如果還有其它的ROM被發現的話﹐ 檢測手續也會被執行的。

  9. 如果對這些ROM模組檢測失敗的話﹐就會出現諸如這樣的錯誤信息: XXXX ROM Error。

    這個 XXXX 地址表示的是那些未能通過檢測的ROM模組之區段(segment) 範圍地址

  10. ROM BIOS然後會檢查 一個位於記憶體範圍0000:0472的字值看看是進行冷開機(Cold Boot)還是進行暖開機(Warm Boot)。如果字值為1234就代表暖開機﹐則會略過記憶體的檢測過程。除此之外的其它字值都會進行冷開機及完整的POST(Power On Self Test)。

  11. 如果是冷開機﹐在POST過程中發現的任何錯誤都會用聲音和圖像組合形式顯示錯誤信息。參考主機板手冊的說明﹐您就知道不同的聲音代表什麼錯誤﹐比如是連續的BB聲﹐可能是代表了記憶體有錯誤。如果一切正常﹐系統只發出一個B聲。

  12. 然後ROM會搜索磁碟A﹕(也就是第一個軟碟)的boot sector (Cylinder 0, head 0, sector 1)還記得在儲存裝置的知識嗎﹖這個其實是磁碟最前面的第一磁區﹐看看有沒有DOS的開機標籤。這個磁區會被載入記憶體(還記得電腦只工作於記憶體嗎﹖)的0000:7C00範圍並會被測試。如果有磁碟發現但這個磁區不能讀取﹐又或者根本沒有磁碟﹐BIOS就會繼續下一步驟。

  13. 如果從磁碟A: 載入的DOS啟動標籤﹐其第一個byte處於06h之下﹐或者是超過或等於06h但首9個字都為相同的資料式樣﹐就會顯示這個錯誤信息: 602-Diskette Boot Record Error。

  14. 如果找到的磁碟已經被是DOS進行過格式化(format)或系統化(sys)處理﹐而指定的系統檔案非目錄前面的首兩個﹐又或者在載入他們的時候出現問題﹐則會出現這樣的信息: Non-System disk or disk error, Replace and press any key when ready (相信這個不陌生吧﹖)

  15. 如果找到的磁碟已經被是DOS3.3或之前版本進行過格式化(format)或系統化(sys)處理﹐而啟動磁區不完整(corrupt)﹐您或者會看到: Disk Boot failure

  16. 如果從磁碟A: 沒有讀取到DOS標籤﹐BIOS則會轉向硬碟重複上面的幾個步驟。如果磁區找到並載入了記憶體﹐會進行標記(signature)測試。

  17. 如果最後的兩個(標記)byte不等於55AAh﹐軟體中斷18h (Int 18h)則可以被大多數的系統呼叫。在一個原廠IBM的PS/2系統上面﹐會提示您插入磁片並按 F1 鍵﹔在非PS/2系統上面﹐則會執行應該磁帶BASIC的中斷﹐並提示 OK。
    至於其它IBM的兼容系統﹐由於沒有磁帶BASIC的ROM BIOS,則會顯示諸如 Non-System disk or disk error的信息。

    雖然不同廠家的BIOS顯示的錯誤信息都會不同﹐但造成這樣的錯誤信息可能是因為從沒有做過partition(還記得前面說過即使是使用單一分區也要partition嗎﹖)或者是MBR不完整。

  18. MBR (Master Boot Record﹐在硬碟的Cylinder 0, Head 0, Sector 1)程式搜索其分區表(partition table)。如果發現有一個byte是代表另一個延伸分區(extened partition)的﹐程式就會將延伸分區的啟動磁區載入。在延伸分區裡面也會有其自己表格用來搜索另一個延伸分區﹐並同樣會載入其啟動磁區﹐並重複著相同的動作直到在也沒有延伸分區為止。

  19. 然後MBR搜索其分區表看看哪個分區被標記成啟動分區(active partition)。

  20. 在IBM系統上面﹐如果沒有分區被標明active﹐則會呼叫磁帶BASIC。在大多數的兼容系統上面﹐則會顯示一些錯誤信息﹐如果您看到諸如 Press a key to reboot﹐就很可能是沒有active partition了。

  21. 如果MBR的表格不正確或有問題﹐則會顯示 Invalid partition table。

  22. 如果啟動分區被發現處於主分區(master partition)裡面﹐則會將其驅動磁區載入同時進行測試。

  23. 如果在經過5次嘗試依然未能成功讀取啟動磁區﹐則會顯示 Error loading operating system。

  24. 如果起點磁區的標記不是合法的55AAh﹐則會顯示 Missing operating system。

  25. 驅動磁區程式檢查根目錄﹐看看有沒有前面所述的io.sys和msdos.sys檔案﹐如果格式不對或失敗﹐則會顯示Non-system disk or disk error 或 Disk Boot failure 等信息。

  26. 如果能正確讀取則執行之﹐並載入記憶體裡面。其初始碼會啟動設備驅動程式﹐審定器材狀態﹐重啟磁碟系統﹐重啟和初始化所附設備﹐和測試系統的預設值。

  27. 然後完整的DOS檔案系統開始工作﹐再將控制交回給IO初始碼。

  28. 然後IO初始碼會多次讀取config.sys(windows系統還會讀取system.dat登錄檔案)。

  29. 如果config.sys的設備敘述是依出現順序第一次處理﹐同時其命名的設備驅動程式有被載入和執行的話﹐安裝(install)敘述會按照出現順序進行處理﹐同時被命名和執行。殼程式(shell)敘述也會被處理和載入其它指定命令處理器和特定的參數。如果config.sys沒有包含shell敘述﹐ 預設的command.com處理器則會以預設敘述被載入。載入的命令處理器這時會取替起始碼(因為它到這裡已經完成使命了)。

  30. 如果autoexec.bat存在﹐command.com會將之載入和運行。等在autoexec.bat裡面的命令都被執行了﹐DOS提示符就會出現(除非autoexec.bat呼叫了另外的應用程式或殼程式﹐使用者可以在沒有提示符的情況下操作)。

  31. 如果沒有autoexec.bat﹐command.com則執行其本身所附的DATE和TIME命令﹐顯示版權信息﹐和提示符。
    在Windows95﹐winboot.sys會自動載入himem.sys, ifshlp.sys和setver.exe﹐最後載入win.com﹐Windows正式啟動。

簡單歸納開機順序為﹕

  1. 開啟電源並進行POST﹐有問題會回應錯誤信息

  2. 如果A:有磁碟並能啟動則啟動之﹐如果不能啟動則回應Non-system disk信息

  3. 如果A:沒有磁碟則嘗試啟動硬碟﹐不能啟動則根據不同情況回應錯誤信息

  4. 如果能成功啟動﹐會先讀取IO.SYS、MSDOS.SYS和COMMAND.COM

  5. 然後讀取CONFIG.SYS和AUTOEXEC.BAT(如果它們存在的話)

  6. 然後讀取Windows的設定檔並載入Windows

 

 


© 2000 Netman 網中人
Last Updated: March 28, 2000