Windows 的體系結(jié)構(gòu)分析環(huán)境reactos0.3.1 ,i386體系] 了解了windows的體系結(jié)構(gòu)才知道reactos到底要干什么,以及如何干,因為reactos的目標(biāo)是兼容windows。 下面是windows的體系結(jié)構(gòu): 這是整個windows的體系結(jié)構(gòu)的總覽。從圖上可以看出系統(tǒng)被分成內(nèi)核模式和用戶模式。 內(nèi)核模式的構(gòu)成文件是系統(tǒng)的核心文件她包含:
HAL使得reactOS 內(nèi)核可以運行在不同的x86母板上。HAL為內(nèi)核抽象母板的特定代碼也許是對不同母板定義一種抽象的接口,向上提供一種標(biāo)準(zhǔn)的接口調(diào)用,這樣不同的母板就不需要改變內(nèi)核,思想上有點像驅(qū)動程序的設(shè)計,不過用在另外一個地方(具體的實現(xiàn)目前還不知道,以后邊看代碼邊了解)。 2.ntoskrnl(內(nèi)核) 內(nèi)核又分成兩層,第一層有的稱為核心層(core)提供非常原始且基本的服務(wù),如多處理器的同步、線程調(diào)度、中斷分派等等。第二層是執(zhí)行體(EXECUTIVE)內(nèi)核執(zhí)行體提供了系統(tǒng)的服務(wù),這里的服務(wù)不是指windows服務(wù)管理器看到的那種服務(wù),而是一些系統(tǒng)函數(shù)。而這些函數(shù)被劃分成不同的類別: 具備虛擬存儲的內(nèi)存管理:采用分段和分頁以及虛擬內(nèi)存的方式管理內(nèi)存的使用。
ReactOS因為兼容windows,因此在設(shè)計上也提供相同的功能,只是實現(xiàn)方法有所不同而已。 3.設(shè)備驅(qū)動程序 4.文件系統(tǒng)驅(qū)動程序 文件系統(tǒng)驅(qū)動程序也是核心態(tài)可加載模塊(以.SYS為擴(kuò)展名system32\drivers),文件系統(tǒng)其實是強(qiáng)加給存儲硬件的一種文件存放規(guī)則。某類文件系統(tǒng)其實就是按照他的文件存取規(guī)則在存儲器上組織文件的信息。比如FAT32 按照FAT32的存儲規(guī)則來存放文件ext2又按照ext2的文件規(guī)則存放文件。 文件系統(tǒng)按照I/O管理的接口標(biāo)準(zhǔn)來實現(xiàn)一組存儲規(guī)則,同時文件系統(tǒng)也可以將信息按照自己的存儲方式請求I/O管理單元,讓I/O管理單元通過這個設(shè)備的設(shè)備驅(qū)動程序?qū)⑿畔⒋娣诺皆撛O(shè)備上。 這樣的方式使得文件系統(tǒng)只負(fù)責(zé)存儲規(guī)則的定義。而驅(qū)動程序去處理硬件的調(diào)度(比如如何移動磁頭臂,采用什么調(diào)度算法等)而I/O管理僅僅是他們之間的協(xié)調(diào)員,至于如何協(xié)調(diào),I/O管理向外定義了自己的標(biāo)準(zhǔn)。 5.圖形設(shè)備驅(qū)動 這個設(shè)備有點獨特,從圖上來看,(這個圖是windows 2000的體系結(jié)構(gòu)圖)好像只有內(nèi)核模式設(shè)備驅(qū)動也就是win32k.sys才能啟動。圖形設(shè)備驅(qū)動其實和其他的設(shè)備驅(qū)動程序我想也不會有太大的差別(以后看代碼在了解)。 不過有一點可以了解,那就是圖形設(shè)備驅(qū)動是由win32k來驅(qū)動的,估計提供的也是硬件驅(qū)動。 6.win32k 這個東西應(yīng)該是windows所說的win32子系統(tǒng)的內(nèi)核部分(原生子系統(tǒng),其他的子系統(tǒng)是可以分割的),如果沒有這個子系統(tǒng)windows就不能運行?(好像微軟是這么說的,原因好像是win32 的文檔化的 API都是通過這個子系統(tǒng)實現(xiàn)的,據(jù)說最初的子系統(tǒng)都通過CSRSS來實現(xiàn),這個東西最初好像包含至少3個子系統(tǒng),1.win32,2.OS/2,3.POSIX,隨著win32的羽翼逐漸豐滿,在發(fā)行時就不再包含其他兩個。但是還是依然叫CSRSS,慢慢看代碼才知道,這些都是道聽途說)。 win32k也被劃分成兩個部分,第一個是USER32,第二個是GDI32, ReactOS的win32K估計基本上都是通過wine移植過來的。 USER32: 包含了windows管理的操作吧,比如如何創(chuàng)建窗口,顯示窗口,隱藏窗口,移動窗口排列窗口z軸,對擁有窗口的Z軸排序,Region(可視區(qū)域)操作,鼠標(biāo)集中測試等。 GDI32: 包含圖形設(shè)備的繪制操作(這些操作也可以叫服務(wù)),比如畫點,畫線,位圖操作等,GDI會將一些復(fù)雜的繪圖操作轉(zhuǎn)變成簡單的繪制請求發(fā)送給圖形驅(qū)動程序(如果這個圖形驅(qū)動程序不支持復(fù)雜繪制)還有就是一些設(shè)備無關(guān)的位圖操作,有的可以保存在內(nèi)存或文件,而如果將設(shè)備無關(guān)的位圖輸出的話就會被轉(zhuǎn)換成設(shè)備相關(guān)的位圖然后再輸出。 |
|
|