使用老機器和筆記本電腦的朋友,恐怕最難以忍受的是慢得讓人發瘋的系統啟動過程吧。即使試遍了各種優化秘籍,使用了所有優化軟件,但Windows XP還是慢悠悠的開機,慢騰騰的關機,讓人沮喪不已。今天就給大家講解下WINDOWS啟動和關機內幕,學了本教程後,看看能否讓你的開關機有所加速.
WINDOWS的啟動流程
第一:NTLDR的作用過程
1.首先機器POST----BIOS----MBR----BOOT SECTOR----os的引導程序 WINDOWS的引導程序是NTLDR注意這個文件其實是個可執行文件,這裡機器主要做的工作是:CPU從16的實模式到32的保護模式,啟用CPU的頁機制,如果磁盤是SCSI,則加載Ntbootdd.sys來訪問磁盤,否則用INT13來訪問。這裡假如機器沒找到Ntldr這個文件,在FAT文件系統下,機器顯示"BOOT: Couldn't find NTLDRP",而在NTFS下顯示"NTLDR is missing"(這個沒有具體實驗過,是書上這麼說的)
2.NTLDR裝載後就先CLS屏幕,首先檢查根目錄下有沒有合法的Hiberfil.sys,這個文件的作用是機器休眠的時候把內存中的所有信息保存到hiberfil.sys這個文件中,這個文件的大小始終和系統的物理內存大小一致。如果希望回收這個空間,請打開“控制面板”下的“電源管理”,選擇“休眠”選項卡,去掉“啟用休眠”這一復選項的選中標記,系統會自動消除hiberfil.sys文件。如果有就快速啟動到上次機器休眠的狀態。
3.接著處理Boot.ini,如果有多個的啟動項,那就顯示啟動菜單(如果只有一個默認的項,那就是我們立即就可以看到WINDOWS的啟動狀態條了) 處理BOOT.ini WINDOWS自帶的一個工具Bootcfg.exe,可以用這個工具修改,當然也可以自己用記事本打開boot.ini來修改,boot.ini的一些參數會保存在注冊表HKLM\System\CurrentControlSet\Control\SystemStartOptions下。關於 boot.ini裡面的參數大家可以去查閱資料。
4.下面就是NTLDR調用執行Ntdetect.com,作用是檢測的一些基本設備和配置信息 信息包括:CMOS裡的時間日期信息,總線類型,磁盤的大小,類型,數目,輸入設備的信息,並口的信息,顯卡的類型,這些信息收集後保存在HKLM\ HARDWARE\DESCRIPTION下面。接著就2000版本下顯示“Starting Windows”進程條,而在xp,2003下是顯示WINDOWS的LOGO
5.在顯示進程條的過程中,機器實際上是在加載系統相應的內核和HAL文件,一般是Ntoskrnl.exe 和Hal.dll這2個文件,如果這個過程中發現找不到文件,則會顯示"Windows could not start because the following file was missing or corrupt"這個信息。然後讀取注冊表SYSTEM HIVE(Windows\System32\Config\System),來決定需要加載的設備驅動,這些設備驅動都在 SERVICE_BOOT_START (0)裡面
6.然後加載Ntoskrnl.exe,這樣NTLDR的使命就結束了。
第二 Ntoskrnl.exe的作用過程這裡主要分2個階段來初始化內核,最後創建the Session Manager subsystem (Smss)進程。
第三 Smss的作用過程
1.創建LPC port對象,為MSDOS定義符號連接,例如COM1、LPT1,假如安裝有Terminal Services,則創建\Sessions目錄
2.運行注冊表裡HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute定義的程序,一般默認的是運行Autochk
3.執行HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations表鍵中的延遲,刪除,改名操作
4.加載HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 初始化paging files和注冊表
5.創建系統環境變量,這些定義在HKLM\System\CurrentControlSet\Session Manager\Environment
6.加載和初始化WIN32子系統的內核模塊Win32k.sys
7. 創建WIN32子系統服務器進程,包括Csrss, 創建Winlogon進程。 這裡的2個進程其中一個出現異常,那系統都會中斷 上一頁12下一頁共2頁
第四 Winlogon Csrss過程
1.加載GINA模塊,默認為Msgina (\Windows\System32\Msgina.dll)
2.啟動服務進程Windows\System32\Services.exe
3.啟動Lsass(the local secyrity authentication subsystem)進程
4.Gina開始處理交互式登陸,登陸驗證成功後,Gina就運行HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\Userinit,Userinit.exe執行的順序為:首先處理HKCU\Software \Policies\Microsoft\Windows\System\Scripts 和HKLM\Software\Policies\Microsoft\Windows\System\Scripts這裡的腳本,然後處理組策略(假如有的話,運行\Windows\System32\Proquota.exe),最後運行HKCU\Software\Microsoft\ Windows NT\CurrentVersion\Winlogon\Shell裡的SHELL(如果不存在就運行HKLM\Software\Microsoft\ Windows NT\CurrentVersion\Winlogon\Shell裡的,一般這裡默認的是EXPLORER.exe),注意這裡也是最容易讓惡意軟件利用的地方。
5.最後就是啟動其他的啟動程序,服務。
WINDOWS的關機流程:
正常關機都是調用ExitWindowsEx這個函數,Csrss收到這個消息後,先給Winlogon所屬的窗口發關機消息,等 Winlogon處理完後,Csrss然後給每個有關機級別的進程發關機消息(2種消息 WM_QUERYENDSESSION/WM_ENDSESSION),這裡的等待時間在HKCU\Control Panel\Desktop\HungAppTimeout這裡設置,默認是5000 milliseconds,如果在這個時間范圍內有線程沒處理完,那就會彈出個窗口,讓用戶來結束,當然也可以設置讓系統自動結束,只要設置HKCU\ Control Panel\Desktop\AutoEndTasks 為 1就可以了,對於控制台應用程序,則Csrss發這個CTRL_LOGOFF_EVENT事件(服務進程是發CTRL_SHUTDOWN_ EVENT這個事件),同樣的流程,有個等待時間,設置在HKCU\Control Panel\Desktop\WaitToKillAppTimeout (默認為 20,000 milliseconds),接著同樣的處理系統進程,處理完後,Winlogon就調用NtShutdownSystem,這個函數在調用 NtSetSystemPowerState來處理驅動和其他的一些子系統。這樣整個關機過程就完成了。
通過上文的學習,我們都知道,系統關機時要進行一系列的操作,包括:關閉窗口、結束進程和服務、保存數據等等。快速關機是否省掉了某些步驟,這樣做又會不會對系統有所危害呢?你是不是都有所了解了呢?學了本教程後,是不是心裡就有了答案.
上一頁12 下一頁共2頁