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