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