1. 許可權級別
系統核心層:ring0,應用層:ring3
cpu存在4個級別由高到底:r0(核心)、r1(驅動)、r2(驅動)、r3(應用)
作業系統的設計者為了簡單,並未使用r1,r2
xp系統體系結構圖:
2. 記憶體空間布局
x86系統記憶體布局圖:
x86系統上最大定址空間為4gb
windows記憶體共包含4個部分:null空間,應用層空間,非法區域,核心空間
x64系統記憶體布局圖:
x64系統上最大定址空間理論上為16pb(2^64次方),但根本用不完
windows最多支援2^44次方定址空間,16tb
linux最多支援2^64次方定址空間,256tb
3. windows與核心啟動過程
包含以下階段:
cpu啟動自檢階段
開啟電源時,cpu從bios中載入自檢指令,執行這些指令進行自檢操作,同時在螢幕上顯示資訊
初始化啟動階段
自檢完成後,根據cmos的設定,bios載入啟動盤,將主引導記錄mbr中的引導**載入記憶體,並執行。mbr中的引導**搜尋mbr中的分割槽表,找出活動分割槽,將第乙個扇區的中的引導**載入記憶體,第乙個扇區的中的引導**檢測當前使用的檔案系統,查詢ntldr檔案,找到之後啟動它,此後bios將控制權交給ntldr,由ntldr完成作業系統的啟動工作(windows 7使用的是bootmgr)
boot載入階段
對ntldr進行如下設定
①設定記憶體模式。如果是x86處理器,並且是32位系統,則設定「32-bit flat memory mode」;如果是x64處理器,並且是64位作業系統,則設定為64位記憶體模式
②啟動乙個簡單的檔案系統,以定位boot.ini、ntoskrnl、hal等啟動檔案
③讀取boot.ini檔案
檢測和配置硬體階段
這個階段會檢查和配置一些硬體裝置,如系統韌體、匯流排和介面卡、顯示介面卡、鍵盤、通訊埠、磁碟、輸入裝置、並口、isa匯流排上執行的裝置等
核心載入階段
ntldr將首先載入windows核心ntoskrnl.exe和硬體抽象層hal。hal會對硬體底層的特徵進行隔離,並為作業系統提供統一的呼叫介面。接下來ntldr從登錄檔的
hkey_local_machine\system\currentcontrolset鍵下讀取這台機器安裝的驅動程式,然後依次載入驅動程式。初始化底層裝置驅動,在登錄檔的
hkey_local_machine\system\currentcontrolset\services鍵下查詢」start「鍵的值為0和1的裝置驅動
strat鍵的值可以為0、1、2、3、4數值越小,啟動越早
0:核心剛剛初始化,此時載入的都是和系統核心有關的重要驅動程式
1:稍微晚一點
2:從登入介面出現時開始載入
3:在需要的時候手動載入
4:禁止架子啊
windows會話管理啟動
當驅動程式載入完成後,核心會啟動會話管理器(smss.exe),是作業系統第乙個建立的使用者模式程序,作用如下:
登入階段
windows子系統啟動的winlogon.exe系統服務提供對windows使用者的登入和登出的支援
tips:windows 7和windows xp啟動過程的區別?
tips:bios+mbr與uefi+gpt的區別?
bios+mbr是傳統的啟動方式,磁碟邏輯位址lea是32位的,最多支援2tb的磁碟。
uefi是bios的替換方案,本身相當於乙個微型的作業系統,磁碟邏輯位址lea是64位的。uefi具有檔案系統的能力,能夠直接讀取fat分割槽中的檔案。uefi下不需要主引導記錄,不需要活動分割槽,不需要任何工具,只要將安裝檔案複製到乙個fat32分割槽或u盤中,通過這個分割槽或u盤即可安裝和啟動windows
直接在uefi環境下執行的程式以.efi結尾4. windows r0與r3通訊本章後面的部分目前無法看懂,需要看完《windows核心程式設計》才能看懂
加密與解密(第四版)第1章 基礎知識
unicode 使用2位元組對文字進行編碼,也稱為寬位元組 小端序 高位位元組放入低位址,低位位元組放入高位址 x86架構cpu採用 大端序 低位位元組放入低位址,高位位元組放入高位址 網路協議傳輸採用 win16 用於16位的windows的api windows 1.0 windows 3.0 ...
VC 技術內幕(第四版)筆記(第14章)
第十四章 可重用框架視窗類 1,可重用基類的設計 為某個工程所設計的類應該能夠被提取出來 使它進一步一般化後被應用於其他的應用程式。2,一些重要函式 1 cframewnd activateframe virtual void activateframe int ncmdshow 1 以ncmdsh...
VC 技術內幕(第四版)筆記(第14章)
第十四章 可重用框架視窗類 1,可重用基類的設計 為某個工程所設計的類應該能夠被提取出來 使它進一步一般化後被應用於其他的應用程式。2,一些重要函式 1 cframewnd activateframe virtual void activateframe int ncmdshow 1 以ncmdsh...