1. 程式人生 > >第七章——Windows核心基礎-核心理論基礎(記憶體空間佈局,Windows與核心啟動過程)

第七章——Windows核心基礎-核心理論基礎(記憶體空間佈局,Windows與核心啟動過程)

1.記憶體空間佈局     X86系統支援32位定址,因此支援2^32=4GB的虛擬記憶體空間,windwos系統的記憶體主要分為核心空間和應用層空間 每部分佔2GB,其中包括一個64KB的NULL空間以及非法區域。 windows記憶體的邏輯地址分為兩部分: 段選擇符和偏移地址,CPU在進行地址翻譯的時候,先通過分段機制計算出一個線性地址,在通過頁表機制將線性地址對映到實體地址,再從實體記憶體中讀取資料和指令 X64的記憶體佈局與X86的記憶體佈局類似,X64下存在一些空洞,並且X64的最大定址空間為2^64KB的定址空間
但是實際上X64的空間太大,很多沒有用到。X64下一般只支援到40多位     2.Windows與核心啟動過程 windows啟動步驟如下:      ⑴啟動自檢階段             開啟電源時,計算機先從BIOS中載入指令,然後進行一系列的自檢操作,進行硬體的初始化檢測(硬碟,鍵盤等等),同時在螢幕上顯示資訊    
     ⑵初始化啟動階段                自檢完成後,根據CMOS設定,BIOS載入啟動盤,將主引導記錄(MBR)中的引導程式碼載入記憶體執行,接著,啟動過程由MBR執行,啟動程式碼搜尋MBR中的分割槽表         找到活動分割槽,將第一個扇區中的引導程式碼載入記憶體,引導程式碼檢測當前使用的檔案系統,查詢ntldr檔案,找到之後將啟動它,BIOSde 控制權交給ntldr,由ntlad完成操
        作系統的啟動工作(windows7是bootmgr)          ⑶Boot載入階段             這裡啟動分割槽載入ntldr,然後對ntldr進行如下設定                 ①設定記憶體模式,如果是32位作業系統,設定32-bit flat memory, 64位反之                 ②啟動一個簡單的檔案系統,定位boot.ini. ntoskrnl.Hal等啟動檔案                 ③讀取boot.ini檔案          ⑷檢測和配置硬體階段             在這個階段會檢查和配置一些硬體裝置,顯示介面卡,鍵盤,磁碟,滑鼠等等          ⑸核心載入階段             ntldr將首先載入windows核心Ntoskrnl.exe和硬體抽象層(HAL).HAL會對硬體底層的特徵進行隔離,為作業系統提供統一介面,接下來 ntldr從登錄檔讀取驅動程式,         依次載入驅動,初始化底層裝置驅動,在登錄檔中找start鍵的值為0和1的裝置驅動 ,start鍵的值為0.1.2.3.4,數值越小,啟動越早。0表示核心剛剛初始化,此時載入的都是與系統核心有關的重要驅動程式。1表示稍晚一些 ,2是從登入介面出現的時候,3表示需要手動載入,4表示禁止載入                                          ⑹windows的會話管理啟動         驅動程式記載完成,核心會啟動會話管理器,這是smss.exe的程式,是windows系統中第一個建立的程序,作用:         1.建立系統環境變數         2.載入win32k.sys 它是windows子系統的核心模式部分         3.啟動csrss.exe ,它是windows子系統的使用者模式部分         4.啟動winlogon.exe(後面解釋)         5.建立虛擬記憶體頁面檔案         6.執行上次重啟前未執行的重新命名工作          ⑺登陸階段         windows子系統啟動的winlogon.exe系統服務提供對windows使用者的登陸和登出,可以完成如下操作:         1.啟動服務子系統(services.exe) 也稱服務控制管理器 SCM         2.啟動本地安全授權(LSA)過程         3.顯示登陸介面         登陸過程中對使用者的賬號密碼傳遞給LSA後,通過之後,使用者就可以操作windows系統      win7和XP在啟動過程中的區別
  • BIOS通過自檢後,將MBR載入記憶體並執行,引導程式碼找到管理器Bootmgr
  • Bootmgr尋找活動分割槽Boot資料夾中的啟動配置資料BCD檔案,讀取對應的語言啟動選單,然後再螢幕上顯示多作業系統選擇畫面
  • 選擇win7後,Bootmgr就會讀取系統檔案 winload(在system資料夾中)
  • 此時系統的執行權都交給winload, winload載入win7的核心,硬體,服務等等,然後載入桌面資訊,從而啟動系統        
  新一代的系統引導方式UEFI和GPT
    上面說的系統引導與啟動,主要藉助BIOS和MBR完成系統的引導和啟動,具有一定的侷限性,侷限性:磁碟邏輯塊地址是32位,最多表示2^32個扇區,
而且每個扇區大小一般都是512位元組,所以最多支援2^32*521=2*2^20位元組(2TB)在BIOS中,啟動作業系統之前必須從硬碟上讀取扇區中讀取啟動程式碼,然後從分割槽中引導啟動作業系統,對扇區的操作遠不上分割槽中檔案的操作那樣簡單     為了打破BIOS和MBR引導的侷限,新的UEFI和GPT。
UEFI:統一的可擴充套件韌體介面。在UEFI中,用於表示LBA的地址還是64位,突破了BIOS和MBR分割槽容量問題,UEFI本身就是一個作業系統,具有檔案系統,能夠直接讀取FAT中的檔案,可以將windwos安裝程式做成efi型別的應用程式,然後放到任意分割槽直接執行,在UEFI中不需要引導操作,不需要活動分割槽,只需要在FAT32分割槽活在U盤中,通過這個分割槽或者U盤啟動windows     與MBR分割槽表比,GPT(全區唯一標識分割槽表)對分割槽數量沒有限制,但是windows還是將GPT將分割槽限制到128個,GPT可管理磁碟大小達到18EB,因此只有基於UEFI平臺的主機板才支援GPT分割槽引導啟動