版權(quán)聲明
:轉(zhuǎn)載時(shí)請(qǐng)以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
http://nokyo.blogbus.com/logs/33016889.html
什么是WRK
??? WRK的全稱是“Windows Research Kernel”,它是微軟為高校操作系統(tǒng)課程提供的可修改和跟蹤的操作系統(tǒng)教學(xué)平臺(tái)。它給出了Windows這個(gè)成功的商業(yè)操作系統(tǒng)的內(nèi)核大部分代碼,可以對(duì)其進(jìn)行修改、編譯,并且可以用這個(gè)內(nèi)核啟動(dòng)Windows操作系統(tǒng)。可讓學(xué)生將操作系統(tǒng)基本原理和商業(yè)操作系統(tǒng)內(nèi)核聯(lián)系起來(lái),進(jìn)一步加深對(duì)操作系統(tǒng)整體的理解。
WRK的特點(diǎn)功能介紹
??? 在本科的操作系統(tǒng)教學(xué)中,能夠提供一個(gè)展示真實(shí)操作系統(tǒng)是如何工作的環(huán)境是很重要的。但目前普遍使用的教學(xué)平臺(tái)大多是非真實(shí)的、模擬的環(huán)境,這可能使同學(xué)對(duì)操作系統(tǒng)的理解出現(xiàn)偏差。同時(shí)教學(xué)平臺(tái)要求在學(xué)生的理解和修改的基礎(chǔ)上能夠真實(shí)的運(yùn)行起來(lái),所以我們采用WRK作為操作系統(tǒng)課程的教學(xué)實(shí)踐平臺(tái)。WRK平臺(tái)隸屬于Windows Academic Program項(xiàng)目,是微軟公司將Windows Kernel的核心技術(shù)融入到高校的教學(xué)和科研中的產(chǎn)物。該平臺(tái)是基于Windows操作系統(tǒng)的真實(shí)內(nèi)核代碼進(jìn)行提煉、修改形成的。它在操作系統(tǒng)教學(xué)方面具有以下幾個(gè)突出的優(yōu)點(diǎn):
-
可運(yùn)行在真實(shí)的硬件平臺(tái)
??? WRK是建立在真實(shí)的NT內(nèi)核基礎(chǔ)上的,實(shí)現(xiàn)了線程調(diào)度、內(nèi)存管理、I/O管理、文件系統(tǒng)等操作系統(tǒng)所必須的組成部分。
??? 可以將編譯出的內(nèi)核放到裝有Windows 2003的機(jī)器上,通過(guò)增加啟動(dòng)項(xiàng),指定從WRK內(nèi)核啟動(dòng)。通過(guò)修改編譯時(shí)的選項(xiàng),可以支持X86和AMD64兩種架構(gòu)。
當(dāng)然,我們也可以使用虛擬機(jī)運(yùn)行WRK。可以防止修改過(guò)的代碼對(duì)真實(shí)的硬件和文件系統(tǒng)產(chǎn)生負(fù)面影響;也可以方便的通過(guò)串口進(jìn)行調(diào)試。
-
包含操作系統(tǒng)中很多概念的具體實(shí)現(xiàn)
??? 現(xiàn)代操作系統(tǒng)原理中包含了很多的概念,如線程、虛擬內(nèi)存、硬件抽象等等。一些模擬的操作系統(tǒng)由于各種原因無(wú)法將這些概念付諸實(shí)際,這樣就導(dǎo)致學(xué)生在學(xué)習(xí)的過(guò)程中,獲得的只是一些空洞的知識(shí)。WRK中將Windows的各種實(shí)現(xiàn)都展示了出來(lái)。
-
調(diào)試比較方便,隨機(jī)性使體驗(yàn)更加真實(shí)
??? 一般來(lái)說(shuō),操作系統(tǒng)內(nèi)核的調(diào)試需要兩臺(tái)計(jì)算機(jī)。一臺(tái)作為宿主機(jī),運(yùn)行需要調(diào)試的內(nèi)核;另一臺(tái)作為調(diào)試機(jī),運(yùn)行調(diào)試程序。兩臺(tái)機(jī)器通過(guò)串口進(jìn)行連接,傳送調(diào)試指令和調(diào)試數(shù)據(jù)。因?yàn)閃RK可以運(yùn)行在虛擬機(jī)上,我們可以通過(guò)一個(gè)命名管道連接虛擬機(jī)和物理機(jī)。將虛擬機(jī)作為宿主機(jī),而物理機(jī)器作為調(diào)試機(jī)來(lái)進(jìn)行調(diào)試。
??? 不確定性是操作系統(tǒng)所必須具有的特征。WRK運(yùn)行在真實(shí)的硬件平臺(tái)上,各種硬件中斷的隨機(jī)性和不確定性賦予了WRK天生的不確定性。當(dāng)然,這個(gè)不確定性對(duì)于我們也是具有兩面性的,一方面展示的真實(shí)操作系統(tǒng)的特征;另一方面,對(duì)于我們內(nèi)核的調(diào)試也具有不確定性。
-
結(jié)構(gòu)清晰,易于分模塊閱讀
WRK具有非常清晰的目錄結(jié)構(gòu),將所有代碼分布在16個(gè)文件夾中。如下表:
表格 1 WRK目錄列表
模塊目錄???? 模塊功能
cache\????? cache manager
config\????? registry implementation
dbgk\??????? user-mode debugger support
ex\???????????executive functions (kernel heap, synchronization, time)
fsrtl\?????????file system run-time support
io\??????????? I/O manager
ke\?????????? scheduler, CPU management, low-level synchronization
lpc\?????????? local procedure call implementation
mm\??????????virtual memory manager
ob\?????????? kernel object manager
ps\?????????? process/thread support
se\?????????? security functions
wmi\?????????Windows Management Instrumentation
inc\??????????NTOS-only include files
rtl\?????????? kernel run-time support
init\??????????kernel startup
??? WRK的代碼量相當(dāng)大,源代碼有47M。所以,隨著操作系統(tǒng)課程的進(jìn)行,同學(xué)可以有針對(duì)性的閱讀某一個(gè)模塊的代碼,能夠更好的理論聯(lián)系實(shí)際。
-
代碼質(zhì)量高
??? WRK是用C語(yǔ)言來(lái)實(shí)現(xiàn)的。這是考慮到了操作系統(tǒng)內(nèi)核效率的問(wèn)題。WRK代碼質(zhì)量很高,規(guī)范很好,可以通過(guò)閱讀提高自己的水平。
??? 下面介紹如何編譯WRK。
??? 1.用VMware安裝一個(gè)windows server 2003系統(tǒng)(以下所指系統(tǒng)如未加說(shuō)明均為該windows 2003虛擬機(jī))
??? 2.將WRK源碼拷貝到系統(tǒng)下C盤,將文件夾取名wrk(可以任意命名)
??? 3.將系統(tǒng)中的環(huán)境變量Path設(shè)置為 C:\wrk\tools\x86;%path%
??? 4.(在命令提示符中輸入)cd wrk\base\ntos
??? 5.(在命令提示符中輸入)nmake -nologo x86=
????????????? (內(nèi)核正在編譯...編譯完后在wrk\base\ntos\BUILD\EXE下生成內(nèi)核文件)
??? 6.將wrk\base\ntos\BUILD\EXE下的內(nèi)核文件拷貝到C:\windows\system32下
??? 7.(在命令提示符中輸入)在C:\windows\system32路徑下輸入link -dump -all hal.dll | findstr pdb命令,查看你的hal按照下面對(duì)照:
??? halacpi.dll -> halacpim.dll?? ; ACPI PIC-based PC [used by VirtualPC]
??? halaacpi.dll -> halmacpi.dll?? ; ACPI APIC-based PC
??? halapic.dll -> halmps.dll???? ; MPS
??? 8.進(jìn)入C:\wrk\WS03SP1HALS\x86目錄下,將相應(yīng)的hal文件夾下的文件(2個(gè))拷貝到C:\windows\system32下
??? 9.進(jìn)入C盤,將隱藏的文件boot.ini打開(kāi),在最后一行加入:
??????? multi(0)disk(0)rdisk(0)partition()\WINDOWS="test" /kernel=wrkx86.exe /hal=halmacpi.dll
??? 10.重新啟動(dòng),進(jìn)入新編譯好的內(nèi)核.
??? PS: 1.注意第9步中,發(fā)光的數(shù)字"2",該數(shù)值應(yīng)與原來(lái)最后一句中的一致(否則進(jìn)入系統(tǒng)時(shí)會(huì)出現(xiàn)沒(méi)有找到引導(dǎo)盤)
?????? ?? 2.如果還是進(jìn)入不了系統(tǒng),則下載win2003sp1ch進(jìn)行系統(tǒng)升級(jí).