windows 系統總體結構

windows總體結構的關鍵系統組件,如下圖,它並沒有顯示各種驅動程序的的層次。

                                           windows結構簡圖


用戶模式和內核模式用線分割開來,上方代表用戶模式進程,線下組件代是內核模式的操作系統服務。用戶模式的線程在一個受保護的進程地址空間中執行(當它們在內核模式執行時,可訪問系統空間)。因此,系統支持進程,服務進程,用戶應用程序,環境子系統都有各自的私有進程地址空間。

四種基本的用戶模式的進程簡要描述如下:

系統支持進程:固定的(或硬件指定的)系統支持進程,如登錄和會話管理器,並不是windows的服務,他們不是由服務控制管理器來啓動的。

服務進程:服務進程宿納的是windows服務,服務的運行通常要獨立於用戶登錄。許多windows服務器應用,如sql server也包含了一些以windows服務方式來運行的組件。

用戶應用程序:有6種類型,windows 32位,windows 64位,windows3.1 16位,ms-dos 16位,posix 32位或os/2 32位。

環境子系統:實現了操作系統環境的支持部分,這裏的環境指操作系統展示給用戶或程序員的個性化部分。windows nt最初有3個環境子系統,windows、posix、os/2,windows xp以後基本的產品中只有windows子系統隨產品發佈。


在windows下,用戶程序並不直接調用原始的windows操作系統服務,相反,他們通過一個或多個子系統動態鏈接庫(DLLs)來發起調用。子系統DLL的角色是,將一個文檔化的函數轉化爲一些恰當的內部(通常未文檔化)windows系統服務調用。這個轉化過程可能會——也可能不會——向正在爲用戶應用程序提供服務的環境子系統進程發送一個消息。


內核模式組件包含下列部分:

windows執行體:包含基本的操作系統服務,如內存管理、進程線程管理、安全性、I/O、網絡和跨進程通信。

windows內核:由一組低層次的操作系統功能構成,如線程調度,中斷和異常分發,以及多處理器同步。他也提供了一組例程和基本對象,執行體的其餘部分利用這些例程和對象實現更高層次的功能。

設備驅動程序:既包括硬件設備驅動程序,也包括文件系統和網絡驅動程序。其中,硬件設備驅動程序將用戶的I/O函數調用轉換爲特定的硬件設備I/O請求。

硬件抽象層:是一層特殊的代碼,把內核、設備驅動程序、windows執行體的其餘部分,跟與平臺相關的硬件差異隔離開來。

窗口和圖形系統:實現了圖形用戶界面函數,比如對窗口的處理,用戶界面控件,以及繪製等。

下圖列出系統核心組件文件名:


可移植性(支持多種硬件體系結構和平臺)

兩種方法實現可移植性:

第一,windows分層設計,系統低層部分是與處理器體系結構相關,或與平臺相關,這些部分被隔離到獨立的模塊中,所以系統的高層部分可以不考慮體系結構之間的差別,也不用關心硬件平臺的差異。兩個關鍵組件爲系統提供了可移植性,他們是內核和硬件抽象層。與體系結構相關的功能在內核中實現,如線程環境切換;在同一體系結構中,不同系統間有差異的功能則在硬件抽象層實現,比如不同的主板。

第二,windows絕大部分代碼用C編寫,少部分是C++。只有那些需要直接與系統硬件通信的部分(中斷陷阱處理器),或者對性能極度敏感的操作系統部分(環境切換),才使用彙編語言編寫。不僅在內核和硬件抽象層有彙編代碼,而且在系統其他核心部分也有彙編代碼,如實現了互鎖指令的例程,以及本地調用設施中的一個模塊。既可能在windows子系統內核模式部分,也可能在某些用戶模式庫中,如ntdll.dll中的進程啓動代碼。


對稱多處理器

多任務是指在多個執行線程之間共享同一個處理器的操作系統技術。當計算機擁有多個處理器的時候,她可以同時執行多個線程。因此,單處理器操作系統只不過是看起來好像同時執行多個線程,但多處理器系統可以真正做到同一時刻處理多個線程,每個處理器上執行一個線程。

windows是一個對稱多處理操作系統,在這些處理器中沒有主次之分,系統和用戶線程可以被調度到任何一個處理器上運行,且所有處理器共享同一內存地址空間。

而非對稱多處理器系統中,系統選擇其中一個處理器來運行操作系統內核代碼,而其他處理器只運行用戶代碼,如下圖。

                                                                          對稱與非對稱的比較


所支持的處理器數目取決於windows版本,不同版本內核或硬件抽象層文件有差異。安裝的時候,安裝程序將正確的文件選擇出來,拷貝到本地的"\windows\system32"目錄中。爲確定哪些文件應該被拷貝,可參見文件"\windows\repair\setup.log",他列出了所有要被拷貝到本地系統磁盤的文件,以及將他們從發佈介質上拷貝到哪個目錄中。


可伸縮性

多處理器的一個關鍵問題是可伸縮性。多處理器系統中,競爭資源和其他性能問題比在單處理器系統中複雜得多,必須在系統設計的時候考慮清楚。windows集以下幾個特性於一身,對其成功起到至關重要作用。

● 能在任一個可用的處理器上運行操作系統代碼,也可以同時在多個處理器上運行系統代碼;

● 在單個進程內執行多個線程,這些線程可以在不同處理器上並行執行;

● 內核內部以及設備驅動程序和服務器進程內部的細粒度同步,使得多個組件可以在多個處理器上並行執行;

● 諸如I/O完成端口之類的編程機制,使得可以實現高效的多線程服務器進程,並且這樣的程序在多處理器系統上有很好的伸縮性。

並且,windows的可伸縮性在不斷進步,以適應更多變化。


疑問,系統編碼用C/C++/彙編,那麼在被引導入內存之前通過什麼手段將系統代碼編譯爲二進制機器碼?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章