版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、WindowsWindows內核原理與實現(xiàn)內核原理與實現(xiàn)曹飛操作系統(tǒng)概述Windows概述進程和線程內存管理I/O系統(tǒng)管理文件系統(tǒng)管理系統(tǒng)服務操作系統(tǒng)是一種特殊的軟件管理硬件資源的軟件,建立抽象層為上層應用提供服務計算機系統(tǒng)的資源管理 計算資源 存儲資源 其他資源(I/O)為應用程序提供執(zhí)行環(huán)境 首先,對應用程序的任務抽象(進程和線程) 其次,每個應用程序有相對獨立的執(zhí)行空間 最后,多任務的情況下公平執(zhí)行(同步)Windows系統(tǒng)結構內核結構、關鍵組件、子系統(tǒng)、系統(tǒng)進程和系統(tǒng)線程Windows內核的基本概念處理器模式、中斷和異常、同步Windows引導過程計算機的啟動、內核加載、內核初始化、用
2、戶登錄會話把所有與硬件相關聯(lián)的代碼邏輯隔離到一個專門的模塊中,從而使上面的層次盡可能做到獨立于硬件平臺在Windows 中,HAL 是一個獨立的動態(tài)鏈接庫提供了一些例程供其他內核模塊或設備驅動程序調用,這使得一個驅動程序可以運行在支持同樣的設備在各種硬件平臺上HAL服務包括對設備寄存器的訪問、總線獨立的設備尋址、中斷處理和復位、DMA傳輸、定時器和實時時鐘的控制、底層的自旋鎖(Spin Lock)和多處理機同步、BIOS接口以及CMOS配置內存。HAL沒有提供對特殊I/O設備(如鍵盤、鼠標、硬盤和內存管理單元)的抽象或服務內核模塊ntoskrnl.exe 中的下層部分(上層部分為執(zhí)行體),最接
3、近于HAL 層,負責線程調度和中斷、異常的處理每個處理器上的線程切換也是由內核來完成,它按照調度規(guī)則讓處理器放棄當前線程,選擇下一個要執(zhí)行的線程Windows 的內核按照面向對象的思想來設計,它管理兩種類型的對象:分發(fā)器對象(dispatcher object)和控制對象。分發(fā)器對象實現(xiàn)了各種同步功能,這些對象的狀態(tài)會影響線程的調度;控制對象被用于控制內核的操作,但是不影響線程的調度,它包括異步過程調用(APC)、延遲過程調用(DPC),以及中斷對象等。執(zhí)行體是內核模塊ntoskrnl.exe 的上層部分,包含5種函數(shù):可在用戶模式下調用(通過API);無法通過API調用的用戶模式函數(shù);內核模
4、式下調用;執(zhí)行體之間相互調用;一個組建的內部函數(shù);內核層和執(zhí)行體層的分工是,內核層實現(xiàn)操作系統(tǒng)的基本機制,而所有的策略決定則留給執(zhí)行體;執(zhí)行體中的對象絕大多數(shù)封裝了一個或者多個內核對象,并且通過某種方式(比如對象句柄)暴露給應用程序執(zhí)行體API 函數(shù)接收的參數(shù)來自于各種應用程序,因此,為了確保系統(tǒng)的健壯性,以及抵抗來自用戶模式的惡意攻擊,所有的執(zhí)行體API 函數(shù)必須保證參數(shù)的有效性;必須在恰當?shù)臅r刻檢查參數(shù)的值,若是指針的話,還必須保證調用者可以訪問指針所指的內存在內核中除了內核模塊ntoskrnl.exe 和HAL 以外,其他的模塊幾乎都以設備驅動程序的形式存在Windows 操作系統(tǒng)中的設
5、備驅動程序,并不一定對應于物理設備;驅動程序既可以創(chuàng)建虛擬設備,也可以完全與設備無關,而僅僅是內核的擴展模塊(內核擴展驅動程序、文件系統(tǒng)驅動程序)設備驅動程序是可以動態(tài)加載到系統(tǒng)中的模塊,其文件擴展名為.sys,其格式是標準的PE 文件格式。驅動程序中的代碼運行在內核模式下,盡管它們可以直接操縱硬件,但理想的情況是,調用HAL 中的函數(shù)與硬件打交道Windows 為 應 用 程序 提 供 了多 種 網 絡API,允許應 用 軟 件設 計 人 員根 據(jù) 他 們的 需 求 適當選擇Windows 套接字,簡稱Winsock,它實現(xiàn)并擴展了BSD 套接字標準WinInet,這是一個高層網絡API,它
6、支持多個協(xié)議,包括Gopher、FTP 和HTTP;Microsoft Internet Explorer 使用WinInet 來完成數(shù)據(jù)傳輸命名管道(named pipe)和郵件槽(mailslot),用于不同進程之間進行通信RPC,這是網絡編程的一個標準,往往是分布式系統(tǒng)基礎設施的重要組件;RPC 建立在其他的網絡API 基礎之上,比如命名管道和Winsock按照Windows NT 最初的設計,它支持三個環(huán)境子系統(tǒng):OS/2、POSIX 和Windows(或稱Win32 );Windows 子系統(tǒng)是必須要運行的,沒有Windows 系統(tǒng)無法運行,而其他兩個子系統(tǒng)則被配置成按需啟動;Win
7、dows 子系統(tǒng)中既有用戶模式部分,也有內核模式部分。內核模式部分的核心是win32k.sys,雖然它的形式是一個驅動程序,但實際上它并不處理I/O 請求;用戶模式部分包括Windows 子系統(tǒng)進(csrss.exe)以及一組動態(tài)鏈接庫(DLL);kernel32.dll、user32.dll、gdi32.dll 和advapi.dll(通過ntdll.dll來調用)Windows 子系統(tǒng)的用戶界面管理有一個層次結構,通常應用程序只是在一個默認的桌面上運行;交互式窗口站中通常有三個桌面:登錄桌面、默認桌面和屏幕保護桌面;在每個桌面中,都有一個頂級窗口列表,這些窗口往往可以相互重疊,有系統(tǒng)菜單、
8、最大化/最小化按鈕和滾動條等;Windows 子系統(tǒng)會話有一個RIT(Raw Input Thread)線程,負責從輸入設備讀取原始的輸入事件,然后生成消息,寄送到正確的線程消息隊列中;Windows 的圖形引擎也是在Windows 子系統(tǒng)中提供的;提供了一套與設備無關的編程接口,即GDI,這使得應用程序可以適應各種底層顯示設備的差異;應用程序與圖形設備驅動程序之間的通信足夠高效,從而即使在頻繁輸出和刷新圖形元素的情況下,Windows 也能夠為用戶提供良好的視覺效果;Windows 子系統(tǒng)定義了一個穩(wěn)定的圖形體系結構,以便于第三方的圖形設備硬件廠商可以方便地將他們的視頻顯示器和打印設備集成到
9、Windows中;Windows 子系統(tǒng)的圖形系統(tǒng),除了支持GDI,還提供了對DirectX 的顯示支持,包括DirectDraw 和Direct3D,因而允許像游戲、多媒體播放器等應用軟件繞過GDI 圖形引擎,直接操縱顯示器硬件,從而獲得更快的顯示速度,并且避免屏幕抖動Windows內核除了接受來自應用程序的系統(tǒng)服務調用,它自己也有一些線程用于各種用途,這些線程運行在一個特殊的進程環(huán)境中,稱為System 進程;System 進程的線程被稱為系統(tǒng)線程,其中有一組系統(tǒng)輔助線程(system worker thread),它們代表操作系統(tǒng)或者其他的應用進程來完成一些特殊的工作;系統(tǒng)輔助線程實際上
10、是一個線程池,Windows 在系統(tǒng)初始化時創(chuàng)建了一定數(shù)量的輔助線程,而且,隨著輔助線程的負載的變化,執(zhí)行體也會動態(tài)地創(chuàng)建一些輔助線程,以滿足系統(tǒng)負載的變化需求;Windows 有一組系統(tǒng)進程對于整個系統(tǒng)的運行來說是必不可少的系統(tǒng)空閑進程(Idle),該進程的ID 為0,其中每個處理器或核對應有一個線程System 進程,該進程的ID 為4,包含了內核模式系統(tǒng)線程,系統(tǒng)輔助線程,以及執(zhí)行體和驅動程序通過PsCreateSystemThread 創(chuàng)建的線程,都在System 進程中Windows 子系統(tǒng)進程(csrss.exe), Windows 子系統(tǒng)進程負責為用戶提供一個子系統(tǒng)環(huán)境,包括提供
11、控制臺窗口的功能,以及創(chuàng)建或刪除進程和線程在Intel x86 處理器上,段描述符有一個2 位長度的特權級:0 表示最高特權級,3 表示最低特權級;Windows 只使用0 和3 兩種特權級,通常特權級0 表示CPU 處于內核模式(kernel mode),3 表示用戶模式(user mode),在任何時刻,處理器總是位于這兩種模式之一;處理器有許多指令只有在特權級0 的模式下才可以使用;處理器位于用戶模式時,它處于一種相對隔離的狀態(tài):能夠執(zhí)行的指令是受限制的,能夠訪問的內存也是受限制的;戶模式代碼觸發(fā)了異常,則控制流進入到內核模式,內核中的異常處理函數(shù)可以決定該控制流是否繼續(xù)執(zhí)行;用戶模式代
12、碼在執(zhí)行時,被一個中斷打斷(軟中斷或硬中斷),則控制流進入特權模式,等中斷處理例程完成以后,控制流恢復到用戶模式下;執(zhí)行特殊的模式切換指令,例如Intel x86 的sysenter 指令,從用戶模式切換到內核模式中斷(interrupt)是處理器與外部設備打交道的重要途徑,指當出現(xiàn)需要時,CPU暫時停止當前程序的執(zhí)行轉而執(zhí)行處理新情況的程序和執(zhí)行過程異常(exception)則是處理器的正常指令流在執(zhí)行過程中產生的一些特殊事件,需要緊急處理才能繼續(xù)原來的指令流都會打斷一個正常的指令流,但區(qū)別在于,中斷的發(fā)生與當前指令流并無實質聯(lián)系,而異常則是當前指令流執(zhí)行的直接結果中斷是異步的,而異常是同步
13、的Intel x86 處理器內部使用同一套陷阱機制來處理中斷和異常,它利用IDT(Interrupt Descriptor Table,中斷描述符表),將每個中斷或異常與一個處理該中斷或異常的服務例程聯(lián)系起來Windows 在此硬件機制的基礎上,又提供了一種更為靈活的軟件機制,允許設備驅動程序為特定的中斷向量添加它的中斷服務例程(ISR,Interrupt ServiceRoutine)中斷控制器(如APIC)允許設定每一個硬件中斷的優(yōu)先級Windows定了一套軟件中斷優(yōu)先級,稱為中斷請求級別(IRQL,Interrupt Request Level)IRQL為0 表示普通線程,稱為PASSI
14、VE_LEVEL ; IRQL為1 表示異步過程調用(APC,Asynchronous Procedure Call),稱為APC_LEVEL; IRQL 為2 也被稱為DISPATCH/DPC級別;326 是設備IRQL,2731 是一些特殊的硬件中斷,包括時鐘中斷、電源中斷、處理器間中斷等,它們都是硬件中斷異常是程序指令流執(zhí)行過程中的同步處理過程,既可以由處理器硬件產生,也可以由指令流軟件產生Windows 為所有需要處理的異常都提供了異常處理器(exception handler,即異常處理例程)內核模式和用戶模式的代碼都有可能發(fā)生異常,根據(jù)發(fā)生異常時處理器模式的不同,Windows 的
15、異常分發(fā)(exception dispatch)過程也有所不同由于多處理器、多核或者中斷等各種并發(fā)性因素的存在,同樣的代碼有可能被并發(fā)執(zhí)行,而數(shù)據(jù)也可能被并發(fā)訪問對 于 可 能 被 并 發(fā) 訪 問 的 數(shù) 據(jù) 進 行 必 要 的 同 步(synchronization)根據(jù)執(zhí)行環(huán)境中的IRQL 值大于APC_LEVEL 或者等于PASSIVE_LEVEL,可以將同步機制分為“不依賴于線程調度的同步機制”和“基于線程調度的同步機制”兩大類當IRQL 大于APC_LEVEL 時,Windows 提供了一些方便的同步保護機制,供內核自身或設備驅動程序使用提升IRQL,當處理器在某個IRQL 上運行時
16、,它只能被更高IRQL的中斷打斷互鎖操作,可以實現(xiàn)基本的對整數(shù)操作的保護,確保一個操作以原子方式進行,指令級保護無鎖的單鏈表, Windows 利用64位互鎖指令來實現(xiàn)無鎖的單鏈表數(shù)據(jù)結構,并且可支持多核、多處理器環(huán)境自旋鎖(spin lock),本質上是一種忙等待當一個線程的執(zhí)行條件不滿足時,該線程進入等待狀態(tài),系統(tǒng)將控制權交給其他滿足執(zhí)行條件但沒有得到處理器資源的線程;以后,當該線程的執(zhí)行條件滿足時,它又有機會繼續(xù)執(zhí)行Windows 使用等待塊(wait block)來描述“一個線程正在等待一個分發(fā)器對象變成有信號狀態(tài)”當一個分發(fā)器對象變成有信號狀態(tài)時,系統(tǒng)循著此對象的等待塊鏈表,就知道該
17、解除哪個或哪些線程,即喚醒它們預 引 導 階 段內核加載內核初始化用戶登錄BIOS,包括自診斷程序、CMOS設置程序(BIOS設置信息)、系統(tǒng)自動裝載程序和主要I/O驅動程序和中斷服務;啟 動 順 序 , 按 照CMOS設置的啟動順序,讀取第一個設備的第一個扇區(qū),如果最后兩個字節(jié)是0 x55和0 xAA表示該設備可以啟動;如果不是,則依次讀取下一個設備,直到找到啟動設備;否則報錯;MBR,主引導記錄,包括引導代碼(引導程序啟動,操作系統(tǒng)的選擇)和引導數(shù)據(jù)(磁盤分區(qū)表,記錄每個分區(qū)的位置、大小、類型);讀入引導扇區(qū)后,把控制權交給引導扇區(qū)的代碼;主引導記錄主引導記錄由三個部分組成: 1 第1-4
18、46字節(jié):調用操作系統(tǒng)的機器碼;2第447-510字節(jié):分區(qū)表(Partition table),分區(qū)表的長度只有64個字節(jié),里面又分成四項,每項16個字節(jié)(主分區(qū)最多只有4個)。所以,一個硬盤最多只能分四個一級分區(qū),又叫做”主分區(qū)”;3第511-512字節(jié):主引導記錄簽名(0 x55和0 xA)引導扇區(qū),引導分區(qū)的第一個扇區(qū);Windows操作系統(tǒng)的真正入口點;大小可能不夠,讀入其他扇區(qū)的代碼,并跳轉到下個扇區(qū)的代碼區(qū)Ntldr,windows加載程序由兩個部分組成:實模式代碼,首先獲得控制權的代碼區(qū);標準的PE文件,os loader;實模式代碼,完成須在16位實模式下的工作(清除鍵盤緩沖
19、區(qū)),為切換到32位保護模式做好工作;之后將處理器切換到保護模式;Os loader,首先將物理內存管理起來;構造頁目錄和頁表(開啟虛擬地址轉譯功能,頁面映射機制);執(zhí)行其他的初始化工作(包括I/O設備初始化,小文件系統(tǒng)驅動等);讀取boot.ini文件;檢查是否有有效的hiberfil.sys,如果沒有則選擇加載選擇的操作系統(tǒng)加載并執(zhí)行 NTDETECT.COM程序,利用系統(tǒng)的BIOS來查詢系統(tǒng)的基本設備和配置信息(系統(tǒng)的時間和日期、總線的類型、磁盤信息,并寫入到HKLMHARDWAREDESCRIPTION鍵下面)加載內核模塊映像文件,默認為ntoskrnl.exe,hal文件,默認為ha
20、l.dll加載注冊表的SYSTEM儲巢,WINDOWS system32 configsystem文件;通過該儲巢的設置信息,加載被標記為“引導-啟動”的設備驅動程序,以及必要的文件系統(tǒng)驅動程序系統(tǒng)所需的模塊都已經加載到內存中系統(tǒng)所需的模塊都已經加載到內存中( (內核、內核、halhal、必要的驅動、必要的驅動) )內核加載完成后,控制權轉交給ntoskrnl的入口函數(shù),KiSystemStartup為了解決在初始化過程中的相互依賴性問題,內核的初始化分兩個階段進行,稱為階段0 和階段1大多數(shù)內核組件的初始化函數(shù)相應地帶有一個整數(shù)參數(shù),以指明一次調用是階段0 初始化還是階段1 初始化,而有些組
21、件的初始化函數(shù)通過檢查一個全局變量InitializationPhase 的值來判斷當前處于哪個階段階段0 初始化的目的是,將階段1 初始化所要用到的基本數(shù)據(jù)結構建立起來中斷被禁止,因此處理器可以順序地執(zhí)行自己的初始化邏輯初始化處理器的狀態(tài)-為當前處理器初始化其HAL 中的PCR 和處理器間中斷向量-執(zhí)行內核初始化-蛻變?yōu)榭臻e線程階段0 初始化完成以后,系統(tǒng)的線程調度器開始工作進程管理器在階段0 初始化過程(PspInitPhase0)中,除了初始化其內部的狀態(tài)變量,它也為初始進程創(chuàng)建一個進程對象,并將其命名為“Idle”。另外,它還創(chuàng)建了“System”進程,以及一個系統(tǒng)線程,此系統(tǒng)線程的開
22、始例程為Phase1Initialization 函數(shù);KiInitializeKernel 函數(shù)返回以后,KiSystemStartup 啟動中斷,將當前的中斷請求級別(IRQL,Interrupt Request Level)降低到DISPATCH_LEVEL,從而允許線程調度器選擇新的線程;階段1 初始化是在System 進程的一個系統(tǒng)線程中運行的;階段1初始化是內核的完全初始化,它占據(jù)了系統(tǒng)初始化過程中相當一部分時間Windows 內核在階段1 初始化的最后,啟動了一個用戶模式進程會話管理器子系統(tǒng)(smss)它是可信的,這意味著它可以做一些其他用戶進程無法做的事情,比如創(chuàng)建安全令牌它直接建立在Windows 內核的基礎上,只使用Windows內核提供的系統(tǒng)服務,而不依賴于任何一個環(huán)境子系統(tǒng)(啟動Windows 子系統(tǒng)本身正是smss 的任務之一)調用系統(tǒng)服務NtInitializeRegistry 來初始化注冊表啟動登錄進程(winlogon.exe),創(chuàng)建初始的窗口站(WinSta0),并且為該窗口站創(chuàng)建一個桌面
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程測量勞動合同
- 出口貨物報關代理合同
- 正式公司轉讓合同格式
- 2024年廣告位合同范本
- 2024貸款還款協(xié)議書
- 家庭裝修項目協(xié)議書樣本
- 2024年單位租車協(xié)議書樣本
- 建設工程地基處理協(xié)議書
- 權威委托代理合同范文大全
- 房屋拆遷合同經典版本
- 2024年中國教育出版?zhèn)髅郊瘓F有限公司招聘筆試參考題庫附帶答案詳解
- 《動畫設計與制作》課件
- 2024醫(yī)院消防安全培訓
- 人教版九年級英語上冊閱讀理解10篇(含答案)
- 11月9日小學生消防安全教育課件
- 《電工新技術介紹》課件
- 2024年興業(yè)銀行杭州分行招聘筆試參考題庫含答案解析
- 群眾文化活動服務投標方案(技術標)
- 銷售工作心得字
- DB21-T 3651-2022 規(guī)模肉牛場生物安全防控技術規(guī)范
- 《尿道狹窄切開術》
評論
0/150
提交評論