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