王曉東
摘 要:實(shí)驗(yàn)教學(xué)是操作系統(tǒng)原理課程教學(xué)的一項(xiàng)重要內(nèi)容,重點(diǎn)之一是實(shí)驗(yàn)教學(xué)環(huán)境的建設(shè)。本文簡(jiǎn)述了在實(shí)驗(yàn)教學(xué)環(huán)節(jié)中引入EOS的經(jīng)驗(yàn)和方法,并且解釋了在建設(shè)實(shí)驗(yàn)環(huán)境時(shí)可能遇到的一些問(wèn)題。
關(guān)鍵詞:操作系統(tǒng);實(shí)驗(yàn);EOS;建設(shè)
一、引言
操作系統(tǒng)原理是計(jì)算機(jī)相關(guān)專業(yè)很重要的一門專業(yè)理論課程,做好操作系統(tǒng)實(shí)驗(yàn),對(duì)學(xué)生理解并掌握操作系統(tǒng)的基本理論和算法有很大的幫助。如果建設(shè)了一個(gè)完善的操作系統(tǒng)原理實(shí)驗(yàn)環(huán)境,再以此為基礎(chǔ)設(shè)計(jì)具體的操作系統(tǒng)原理實(shí)驗(yàn)項(xiàng)目,會(huì)顯得事半功倍,也有利于學(xué)生全面了解操作系統(tǒng)編程的方法。經(jīng)過(guò)考察調(diào)研,結(jié)合學(xué)校實(shí)際情況,選擇了EOS教學(xué)軟件來(lái)構(gòu)建操作系統(tǒng)原理實(shí)驗(yàn)環(huán)境。
EOS由國(guó)內(nèi)的一家科技公司開(kāi)發(fā),是一個(gè)可以在Intel X86平臺(tái)上運(yùn)行的、面向教學(xué)的開(kāi)源操作系統(tǒng)。為了讓EOS適合于教學(xué),EOS被設(shè)計(jì)得十分小巧,并且盡量保持架構(gòu)簡(jiǎn)單,但是EOS仍然涵蓋了系統(tǒng)引導(dǎo)、進(jìn)程管理、內(nèi)存管理、設(shè)備管理、文件系統(tǒng)等重要的操作系統(tǒng)概念。EOS完全由匯編語(yǔ)言和C語(yǔ)言編寫,開(kāi)放了全部源代碼,同時(shí)在源代碼中添加了大量的注釋,讓閱讀和理解源代碼更加容易。EOS操作系統(tǒng)提供的API(應(yīng)用編程接口)與Windows基本一致,在編寫EOS應(yīng)用程序時(shí)可以直接調(diào)用這些API函數(shù),使得EOS系統(tǒng)編程可以和Windows系統(tǒng)編程較好地銜接與融合。
二、集成實(shí)驗(yàn)環(huán)境
EOS有配套的IDE(Integrated Development Environment)實(shí)驗(yàn)環(huán)境。該IDE環(huán)境可以直接在Windows操作系統(tǒng)上安裝和卸載,用戶界面和操作習(xí)慣與Visual Studio完全類似,而學(xué)生C語(yǔ)言編程就是在Visual Studio環(huán)境下完成的,所以可以迅速上手。這樣就避免了由于手工構(gòu)建實(shí)驗(yàn)環(huán)境所帶來(lái)的學(xué)習(xí)成本,從而可以將主要精力放在對(duì)操作系統(tǒng)原理和EOS源代碼的分析與理解上。使用該IDE環(huán)境提供的強(qiáng)大功能可以方便、迅速地編輯、編譯和調(diào)試EOS源代碼,編輯功能可以用來(lái)閱讀和修改EOS源代碼;編譯功能可以將EOS源代碼編譯為二進(jìn)制文件(包括引導(dǎo)程序和內(nèi)核);調(diào)試功能可以將編譯好的二進(jìn)制文件寫入一個(gè)軟盤鏡像(或軟盤),然后讓虛擬機(jī)(或裸機(jī))運(yùn)行此軟盤中的EOS,并對(duì)其進(jìn)行遠(yuǎn)程調(diào)試。IDE環(huán)境提供的調(diào)試功能十分強(qiáng)大,包括設(shè)置斷點(diǎn)、單步調(diào)試,以及在中斷發(fā)生時(shí)顯示對(duì)應(yīng)位置的C語(yǔ)言源代碼、查看或修改表達(dá)式的值、顯示調(diào)用堆棧和指令對(duì)應(yīng)的匯編代碼等功能。靈活運(yùn)用各種調(diào)試功能,這對(duì)學(xué)生分析EOS的源代碼有很大幫助。
IDE環(huán)境除了提供以上的主要功能外,還提供了一些工具軟件。使用Floppy Image Editor工具提供的可視化用戶界面,學(xué)生可以像編輯軟盤驅(qū)動(dòng)器中的軟盤一樣來(lái)編輯軟盤鏡像文件,從而可以在Windows操作系統(tǒng)中直接觀察到EOS操作系統(tǒng)對(duì)軟盤的修改。IDE環(huán)境與多種免費(fèi)的第三方虛擬機(jī)軟件進(jìn)行了無(wú)縫融合,主要的虛擬機(jī)包括Bochs和Virtual PC,學(xué)生在調(diào)試時(shí)可以使用這些虛擬機(jī)來(lái)運(yùn)行EOS操作系統(tǒng)。
EOS操作系統(tǒng)與IDE環(huán)境共同組成了操作系統(tǒng)原理集成實(shí)驗(yàn)環(huán)境,學(xué)生在做操作系統(tǒng)實(shí)驗(yàn)時(shí),通過(guò)使用IDE環(huán)境編輯、編譯和調(diào)試EOS源代碼,從而觀察操作系統(tǒng)的運(yùn)行過(guò)程,理解操作系統(tǒng)的一些常用算法。
三、從源代碼到可運(yùn)行的操作系統(tǒng)
無(wú)論是EOS操作系統(tǒng)內(nèi)核還是EOS應(yīng)用程序,開(kāi)始時(shí)它們都只是一些源代碼文件,當(dāng)編譯器、鏈接器、軟盤鏡像編輯器等工具對(duì)這些源代碼文件進(jìn)行逐步轉(zhuǎn)化后,就變成了可以在虛擬機(jī)上運(yùn)行的EOS操作系統(tǒng)內(nèi)核與EOS應(yīng)用程序。雖然IDE環(huán)境可以使用以上的各種工具自動(dòng)地完成上述轉(zhuǎn)化過(guò)程,但是學(xué)生還是應(yīng)該弄清楚上述過(guò)程內(nèi)部的細(xì)節(jié),這對(duì)于他們理解操作系統(tǒng)原理是有很大幫助的。操作系統(tǒng)和應(yīng)用程序之間一個(gè)重要的紐帶就是API,操作系統(tǒng)通過(guò)開(kāi)放API為應(yīng)用程序提供服務(wù),應(yīng)用程序通過(guò)使用這些API實(shí)現(xiàn)其功能。在操作系統(tǒng)和應(yīng)用程序運(yùn)行時(shí),API可能只是一個(gè)簡(jiǎn)單的調(diào)用和被調(diào)用的關(guān)系,但是在編寫操作系統(tǒng)的源代碼時(shí),必須要解決如何才能開(kāi)放API的問(wèn)題。在編寫應(yīng)用程序的源代碼時(shí),又必須要解決如何才能使用API的問(wèn)題。SDK是Software Development Kit的縮寫,即軟件開(kāi)發(fā)工具包。操作系統(tǒng)通過(guò)向程序員提供SDK來(lái)開(kāi)放其API,開(kāi)發(fā)者在為操作系統(tǒng)編寫應(yīng)用程序時(shí),通過(guò)使用SDK來(lái)調(diào)用API。所以如果學(xué)生要為操作系統(tǒng)開(kāi)發(fā)應(yīng)用程序,就需要首先獲得操作系統(tǒng)的SDK。
SDK一般采用文件的形式并結(jié)合特定的編程語(yǔ)言,向程序員提供系統(tǒng)的API,有些SDK還會(huì)提供相關(guān)的文檔、編程范例和工具軟件等。SDK為了向程序員提供系統(tǒng)API,往往會(huì)包含頭文件、導(dǎo)入庫(kù)文件和動(dòng)態(tài)鏈接庫(kù)文件。頭文件一般會(huì)被放在SDK中的Include文件夾中,它的主要作用是導(dǎo)出系統(tǒng)使用的一些數(shù)據(jù)類型(例如系統(tǒng)中使用的結(jié)構(gòu)體類型)和API函數(shù)的聲明,在為系統(tǒng)開(kāi)發(fā)應(yīng)用程序時(shí),往往需要使用和頭文件相同或兼容的編程語(yǔ)言來(lái)編寫源代碼文件。并且只有在源代碼文件中包含了這些頭文件后,才能使用系統(tǒng)提供的數(shù)據(jù)類型和API函數(shù)。在IDE環(huán)境將EOS操作系統(tǒng)內(nèi)核源代碼文件生成二進(jìn)制文件時(shí),會(huì)將boot.asm文件生成為boot.bin文件(軟盤引導(dǎo)程序),將loader.asm文件生成為loader.bin文件(加載程序),將其它的源代碼文件生成為kernel.dll文件和libkernel.a文件。其中kernel.dll文件是EOS操作系統(tǒng)的內(nèi)核,EOS操作系統(tǒng)的API函數(shù)就是從此文件導(dǎo)出的,所以在生成此文件的同時(shí)還要生成導(dǎo)入庫(kù)文件libkernel.a,當(dāng)EOS應(yīng)用程序的可執(zhí)行文件與此導(dǎo)入庫(kù)文件鏈接后,就可以調(diào)用kernel.dll文件導(dǎo)出的API函數(shù)了。在IDE環(huán)境啟動(dòng)執(zhí)行EOS操作系統(tǒng)時(shí),會(huì)將boot.bin、loader.bin和kernel.dll三個(gè)二進(jìn)制文件寫入軟盤鏡像文件中,然后讓虛擬機(jī)來(lái)執(zhí)行軟盤中的EOS操作系統(tǒng)。
在編寫EOS應(yīng)用程序的源代碼之前,必須首先獲得EOS SDK文件夾。然后在EOS應(yīng)用程序的頭文件eosapp.h中,包含SDK/INC文件夾中的三個(gè)頭文件。實(shí)際上eosapp.h只需要包含eos.h文件即可,因?yàn)樵趀os.h文件中已經(jīng)包含了eosdef.h和error.h文件。在IDE環(huán)境將EOS應(yīng)用源代碼文件生成二進(jìn)制文件時(shí),鏈接器會(huì)將由eosapp.c文件和C運(yùn)行時(shí)庫(kù)源代碼文件生成的目標(biāo)文件與SDK/BIN文件夾中的導(dǎo)入庫(kù)文件libkernel.a一同鏈接,生成EOS應(yīng)用程序的可執(zhí)行文件eosapp.exe。在IDE環(huán)境運(yùn)行EOS應(yīng)用程序時(shí),會(huì)將SDK/BIN文件夾中的boot.bin、loader.bin和kernel.dll寫入軟盤鏡像,這樣EOS操作系統(tǒng)才能夠啟動(dòng)運(yùn)行。同時(shí)會(huì)將EOS應(yīng)用程序的可執(zhí)行文件eosapp.exe和一個(gè)內(nèi)容為“eosapp.exe”的文本文件autorun.txt寫入軟盤鏡像,這樣在EOS操作系統(tǒng)成功啟動(dòng)后,操作系統(tǒng)會(huì)自動(dòng)運(yùn)行autorun.txt文件中記錄的應(yīng)用程序可執(zhí)行文件eosapp.exe。
四、結(jié)語(yǔ)
以上主要介紹了EOS操作系統(tǒng)和與其配套的集成實(shí)驗(yàn)環(huán)境,引入EOS建設(shè)操作系統(tǒng)原理課程的實(shí)驗(yàn)環(huán)境,實(shí)踐證明其效果還是較為理想的。教師可以精心設(shè)計(jì)基于EOS環(huán)境的操作系統(tǒng)實(shí)驗(yàn),提高操作系統(tǒng)原理課程的教學(xué)質(zhì)量。
參考文獻(xiàn):
[1] 龐麗萍. 操作系統(tǒng)原理(第四版)[M].武漢: 華中科技大學(xué)出版社, 2008.