張彬彬,岳 昆,張驥先
(云南大學 信息學院,云南 昆明 650500)
操作系統(tǒng)實驗內(nèi)容設(shè)置與成績評價探討
張彬彬,岳 昆,張驥先
(云南大學 信息學院,云南 昆明 650500)
操作系統(tǒng)實驗是操作系統(tǒng)課程的重要輔助,幫助學生從編碼層次理解操作系統(tǒng)原理。該文文結(jié)合教學需求和培養(yǎng)方向,探討了操作系統(tǒng)實驗的內(nèi)容設(shè)置和學生成績評價方法的設(shè)計。以預(yù)備實驗、驗證實驗、模擬實驗和探索實驗的形式組織實驗內(nèi)容,強調(diào)通過實驗理解原理,將代碼評審的形式引入學生成績評價。
操作系統(tǒng);實驗教學;實驗設(shè)計;成績評價
操作系統(tǒng)向下管理硬件資源,向上支撐應(yīng)用程序,是計算機系統(tǒng)中最基礎(chǔ)的軟件。操作系統(tǒng)的原理和方法,是學生構(gòu)建計算機科學知識體系的重要核心之一。現(xiàn)代操作系統(tǒng)作為一種大型的系統(tǒng)軟件,其設(shè)計思想和實現(xiàn)技術(shù),為學生學習軟件設(shè)計開發(fā)提供了重要借鑒。但是,由于操作系統(tǒng)結(jié)構(gòu)復雜,涉及范圍廣、概念多,單純由理論課程講授操作系統(tǒng)原理難免使學生感覺繁瑣和抽象。因此,大部分高校設(shè)置了操作系統(tǒng)實驗課程與理論課程配套,以實驗的形式幫助學生理解操作系統(tǒng)原理。
本文主要從設(shè)計操作系統(tǒng)實驗內(nèi)容和學生成績評價方法入手,探討如何使操作系統(tǒng)實驗更有效地輔助理論課程教學,幫助學生學習操作系統(tǒng)理論。在選擇實驗內(nèi)容時,由于教學時間有限,除了選取理論教學內(nèi)容中的重點和難點,還要考慮所選內(nèi)容對操作系統(tǒng)各個部分的覆蓋程度,以及實驗的形式是否有助于學生理解這些重點和難點。此外,要用合理的評價方法幫助學生明確實驗?zāi)繕?,提高學生學習積極性,才能充分發(fā)揮實驗課程的輔助效果。本文后續(xù)兩章分別討論實驗內(nèi)容的設(shè)置和成績評價體系的設(shè)計。
目前國內(nèi)外不同高校在操作系統(tǒng)實驗課程的內(nèi)容設(shè)置方面各有特色。對美國幾所高校操作系統(tǒng)課程設(shè)計的研究報告[1-2]顯示,美國哈佛大學、普林斯頓大學、加州大學伯克利分校、布朗大學、麻省理工學院等高校計算機專業(yè)的操作系統(tǒng)課程均要求學生基于小型操作系統(tǒng)框架(如NachOS、Weenix等),補充實現(xiàn)進程調(diào)度、虛擬存儲、文件系統(tǒng)、設(shè)備管理等機制和相應(yīng)的策略,以完成一個能夠獨立運行的實驗操作系統(tǒng)。
在國內(nèi)高校中,操作系統(tǒng)實驗通常有以下兩種做法。
1)將操作系統(tǒng)實驗作為一門較為獨立的課程,可以放在操作系統(tǒng)理論課程之后一個學期。要求學生基于仿真環(huán)境(如Bochs)開發(fā)一個可用的操作系統(tǒng)。通過編寫操作系統(tǒng)的核心代碼,學生能夠更好地理解操作系統(tǒng)。但是,這樣的實驗內(nèi)容對學生的設(shè)計能力和編程能力要求都很高,在這些高校的教學實踐中,仍然在探索分層教學的可能性[2-4]。
2)實驗課程與理論課程同步進行,學生按照理論課程的進度完成驗證和模擬實驗。主要包括3類典型的實驗:1)在用戶態(tài)編寫應(yīng)用程序模擬資源管理和調(diào)度的經(jīng)典算法[5-10];2)調(diào)用操作系統(tǒng)提供的接口,通過觀察程序執(zhí)行現(xiàn)象了解操作系統(tǒng)的功能[5-7];3)實現(xiàn)操作系統(tǒng)中的部分簡單模塊,如簡單的設(shè)備驅(qū)動程序[8]。
此外,也有一些高校針對當前的技術(shù)發(fā)展,進一步探索實驗平臺和實驗內(nèi)容,例如,利用An droid平臺完成操作系統(tǒng)實驗[11];在多核環(huán)境下與系統(tǒng)結(jié)構(gòu)等課程相結(jié)合,設(shè)計綜合創(chuàng)新實驗[12]。
按照本校計算機專業(yè)的培養(yǎng)定位,我們的操作系統(tǒng)實驗教學目前采用第二種教學形式:將操作系統(tǒng)實驗課與理論課開設(shè)在同一學期,使得實驗課能發(fā)揮輔助作用,從代碼級別幫助學生更好的理解操作系統(tǒng);我們選取了理論課程中要求學生重點掌握的內(nèi)容和學生較難理解的內(nèi)容設(shè)計了驗證實驗和模擬實驗,學生通過編寫應(yīng)用程序完成這些實驗,簡化了設(shè)計、編程和調(diào)試的復雜度,使得大部分學生能夠順利完成實驗,從而能有更多的精力消化實驗中涉及的原理。為了讓學生有機會接觸到真正的操作系統(tǒng)層次的開發(fā),我們還引入簡單的內(nèi)核編程作為探索實驗。此外,由于大部分學生在本課中是第一次接觸Linux操作系統(tǒng),我們設(shè)計了預(yù)備實驗,幫助學生熟悉Linux的常用操作。各部分實驗對操作系統(tǒng)各個組成部分的覆蓋如圖1所示。
圖1 4類實驗與操作系統(tǒng)的關(guān)系
1.1 預(yù)備實驗
預(yù)備實驗幫助學生熟悉實驗環(huán)境。如圖1所示,預(yù)備實驗涉及操作系統(tǒng)的用戶接口,以及運行在操作系統(tǒng)之上的與本課程相關(guān)的軟件(如編輯器等)。
1.1.1 選擇實驗平臺
操作系統(tǒng)教材常用Unix或Linux系統(tǒng)作為案例。Linux的開源社區(qū)活躍,學生易于從網(wǎng)絡(luò)獲取資源;大部分同學在將來的工作中,很少有機會使用Unix。因此,我們選擇了Linux操作系統(tǒng)作為實驗平臺。為了便于學生在現(xiàn)有的個人電腦(絕大部分安裝有Windows系統(tǒng))上安裝Linux系統(tǒng),我們推薦學生使用VMware Workstation,這是一個基于宿主操作系統(tǒng)的虛擬機監(jiān)控器,安裝簡便,操作簡單,可以作為一個應(yīng)用程序運行在Windows之上。在VMwareWorkstation中,學生可以創(chuàng)建一個或多個虛擬機,給虛擬機分配或設(shè)置適當?shù)腃PU、內(nèi)存、硬盤、光驅(qū)、網(wǎng)絡(luò)等資源,并可以在虛擬機之上安裝Linux操作系統(tǒng)。安裝完成后,學生在Win dows環(huán)境中像使用普通應(yīng)用程序一樣的使用運行在虛擬機中的Linux系統(tǒng),同時可以使用Windows環(huán)境中的其他軟件。
在教學中我們推薦學生使用CentOS發(fā)行版,CentOS是用Red Hat Enterprise Linux的源代碼依照開放源代碼規(guī)定編譯的免費發(fā)行版,操作與Redhat基本一致,但無需付費就可以獲得升級更新支持,是IT企業(yè)在研發(fā)部門中常用的一種操作系統(tǒng),利于學生在未來工作中應(yīng)用。
1.1.2 設(shè)計實驗內(nèi)容
為了幫助學生熟悉實驗環(huán)境,我們編訂了4個學時的預(yù)備實驗內(nèi)容,具體包括以下4個方面。
1)安裝實驗環(huán)境,包括安裝VMware Worksta tion、創(chuàng)建和配置虛擬機、在虛擬機中安裝CentOS;
2)熟悉Linux常用操作,包括常用的文件和目錄操作(如cd、ll、cp、mv、rm、mkdir、cat、less、more等)、查看幫助(如man)、關(guān)機或重啟(shut down、reboot等),在預(yù)備實驗中,只介紹在本課程中最常使用的命令,在后續(xù)實驗中,逐步引入其他命令。
3)編寫一個簡單的shell腳本并運行。主要目標是學習使用vim編輯器的常用操作,并了解Linux中文件權(quán)限的概念。
4)編寫一個簡單的C程序并運行。主要目標是復習vim的操作,并學習使用gcc編譯并生成可執(zhí)行文件。
1.2 驗證實驗
驗證實驗作用于操作系統(tǒng)的程序接口層,如圖1所示。學生利用操作系統(tǒng)提供的系統(tǒng)調(diào)用編寫應(yīng)用程序,通過觀察程序的執(zhí)行結(jié)果,了解操作系統(tǒng)管理資源的方式。驗證實驗主要包括觀察進程并發(fā)執(zhí)行和進程間通信實驗。
1)觀察多個進程的并行執(zhí)行。
利用fork創(chuàng)建子進程,父進程和子進程分別輸出不同的內(nèi)容,多次執(zhí)行程序,觀察輸出的順序。該實驗的重點是讓學生理解各進程的執(zhí)行順序是由操作系統(tǒng)的進程調(diào)度確定的,如果進程之間不存在同步關(guān)系,則執(zhí)行順序表現(xiàn)出一定的隨機性。
由于大部分學生是第一次接觸多進程程序,因此,本實驗的一個難點是解釋fork系統(tǒng)調(diào)用的工作原理,解釋如何使多個進程共用一段代碼而執(zhí)行不同的工作。要詳細描述fork的調(diào)用和返回的過程,以及同一個調(diào)用之后,父子進程如何得到不同的返回值。
2)理解進程間通信的幾種方式。
本實驗要求學生利用系統(tǒng)調(diào)用實現(xiàn)進程間的軟中斷通信、消息隊列通信、共享內(nèi)存通信。通過觀察程序的編碼方式和執(zhí)行效果,分析幾種進程間通信的特點。
軟中斷通信實驗要求學生通過在進程之間發(fā)送軟中斷信號,實現(xiàn)簡單的進程同步操作。實驗的要點是幫助學生理解操作系統(tǒng)用軟件模擬硬件中斷的處理過程。
消息隊列通信和共享內(nèi)存通信要求學生分別利用消息隊列和共享內(nèi)存實現(xiàn)進程之間的信息傳遞。其中共享內(nèi)存通信是難點,需要向?qū)W生闡明多個進程利用同一塊物理內(nèi)存交換信息,該物理內(nèi)存區(qū)將被映射到各進程自己的虛擬地址空間,各進程直接讀寫這塊內(nèi)存實現(xiàn)通信。
1.3 模擬實驗
模擬實驗是編寫應(yīng)用程序模擬操作系統(tǒng)資源對象層中對硬件資源的抽象(通過設(shè)計數(shù)據(jù)結(jié)構(gòu))及資源管理層中的策略實現(xiàn)(通過實現(xiàn)算法),如圖1所示。這種方式避免了內(nèi)核編程和調(diào)試,降低了實現(xiàn)復雜度。由于處理機調(diào)度和頁式內(nèi)存管理是操作系統(tǒng)教學的重點和難點,因此,我們選取了處理機調(diào)度算法和頁面置換算法兩個模擬實驗。
1)處理機調(diào)度算法實驗。
模擬進程控制塊(PCB)中記錄進程運行的基本信息,根據(jù)這些信息模擬實現(xiàn)先來先服務(wù)、時間片輪轉(zhuǎn)、最高優(yōu)先級優(yōu)先等進程調(diào)度算法,比較各算法得到的進程周轉(zhuǎn)時間和響應(yīng)比。通過實驗,加深學生對進程調(diào)度的認識,理解進程幾種狀態(tài)的轉(zhuǎn)換。
2)內(nèi)存頁面置換算法實驗。
模擬實現(xiàn)先進先出、最近最少使用、最近最久未使用等內(nèi)存頁面置換算法,比較各算法的命中率。在講解實驗原理時,要強調(diào)虛擬內(nèi)存機制與內(nèi)存頁面置換算法之間的關(guān)系,并強調(diào)不同策略在不同的應(yīng)用場景中可能有不同的效果。
模擬實驗?zāi)軒椭鷮W生理解操作系統(tǒng)原理,也能鍛煉設(shè)計和編程能力。
1.4 探索實驗
探索實驗希望引導學生探索操作系統(tǒng)內(nèi)核。目前設(shè)置的探索實驗是通過Linux提供的proc文件系統(tǒng)探查操作系統(tǒng)內(nèi)核信息,主要是資源使用狀態(tài)信息。進一步鼓勵學生編寫內(nèi)核模塊,實現(xiàn)一個支持簡單讀寫操作的proc文件。
1)訪問proc文件監(jiān)測內(nèi)存使用狀態(tài)。
要求學生編寫shell腳本,每隔一定的時間讀取一次/proc/meminfo中的內(nèi)存的使用狀態(tài)數(shù)據(jù)。為了有較直觀的觀察結(jié)果,要求學生寫一個內(nèi)存負載生成程序,定期申請內(nèi)存空間(malloc),并訪問分配到的空間(例如使用memset),在運行該應(yīng)用程序時,同時運行內(nèi)存監(jiān)測腳本,觀察各數(shù)值的動態(tài)變化。該實驗主要有3個目的,一是幫助學生理解proc文件系統(tǒng)的工作原理,二是學習簡單的shell編程,三是通過編寫負載程序,更直觀的理解應(yīng)用程序?qū)Y源的消耗。在此基礎(chǔ)上,向?qū)W生介紹vmstat等Linux中常用的資源監(jiān)控工具,在自己編寫shell腳本的基礎(chǔ)上,學生容易理解這一類工具的工作原理。
2)簡單內(nèi)核模塊實驗。
引導學生編寫一個內(nèi)核模塊,該內(nèi)核模塊在系統(tǒng)中增加一個proc文件,該文件支持讀寫操作。該實驗幫助學生認識Linux的模塊機制,了解Linux系統(tǒng)支持動態(tài)加載內(nèi)核模塊,使用戶可以根據(jù)需要擴展內(nèi)核的功能,引導學生實踐Linux內(nèi)核模塊的編程技術(shù)。
預(yù)備實驗、驗證實驗、模擬實驗和探索實驗,從系統(tǒng)的基本操作到用戶態(tài)編程再到內(nèi)核模塊編程,逐級深入,幫助學生從用戶接口、程序接口到操作系統(tǒng)內(nèi)核中描述資源、管理資源的各個層次遞進完成操作系統(tǒng)實驗。實驗的重點是進程管理、進程間通信、處理機調(diào)度、內(nèi)存頁面置換等幾個方面,突出了操作系統(tǒng)教學的重點和難點,能夠有效幫助學生理解理論課程內(nèi)容。
按照本系的培養(yǎng)定位,操作系統(tǒng)實驗不是工程開發(fā)類的實驗課程,而是操作系統(tǒng)理論課程的重要輔助。實驗的最終目標是理解原理,即通過實驗,幫助學生學習操作系統(tǒng)中一部分關(guān)鍵數(shù)據(jù)結(jié)構(gòu)和算法實現(xiàn),理解操作系統(tǒng)設(shè)計和開發(fā)過程中的問題、對策和折中權(quán)衡,在實驗過程中,也可以逐步熟悉Linux系統(tǒng)。因此,本課程設(shè)計的評價方法,其評價的重點,就是評估學生是否通過實驗加深了對操作系統(tǒng)基本原理的理解;評價方法涉及的3個方面,都是衡量學生理解代碼進而理解原理的程度。
2.1 評價基于程序框架的實驗完成效果
因為不是工程開發(fā)類的課程,因此本課程不做團隊合作練習,而是特別強調(diào)獨立完成實驗。為了在有限的教學時間內(nèi)使學生花更多精力理解操作系統(tǒng)原理相關(guān)的代碼,教師為每個實驗設(shè)計了程序框架,學生在此基礎(chǔ)上補充調(diào)試其中的關(guān)鍵代碼,教師根據(jù)學生的完成效果和代碼質(zhì)量評分。通過獨立編寫調(diào)試代碼并跟蹤程序執(zhí)行流程,幫助學生理解程序的結(jié)構(gòu)和每一個語句的功能,這是要達到從代碼理解操作系統(tǒng)原理這一目標的重要基礎(chǔ)。
2.2 評價基于模板的實驗報告質(zhì)量
在講授操作系統(tǒng)實驗時,要將各個小實驗放置到操作系統(tǒng)原理的背景中,不斷將代碼聯(lián)系到具體的操作系統(tǒng)概念,才能避免學生完全陷入代碼編寫和調(diào)試的細節(jié)。為了達到這一目標,我們?yōu)槊看螌嶒炘O(shè)計了實驗報告模板,在模板中要求學生回答與實驗密切相關(guān)的原理性問題。教師檢查實驗報告時,除了評估常規(guī)的實驗過程記錄、遇到的問題、解決的辦法等,還要根據(jù)實驗報告中的答題質(zhì)量評估學生對實驗原理的掌握程度。
2.3 評價對核心代碼的理解
操作系統(tǒng)實驗強調(diào)從編碼的層次理解操作系統(tǒng)原理。為了切實達到這個目標,教和學都必須深入到代碼。教師講授時,要具體到實驗所涉及的每一個系統(tǒng)調(diào)用的原理和效果,要強調(diào)程序的結(jié)構(gòu)框架,要能夠解釋每一個語句的具體功能,并將代碼對應(yīng)到理論原理;學生實驗時,要完全理解所做實驗的每一個語句。因此,課程采用簡易的代碼審查(code review)的形式檢查每一個學生對代碼的理解程度,及時發(fā)現(xiàn)并解答存在的問題。具體形式是由每個學生向教師逐條語句講解一段核心代碼的執(zhí)行過程。
在教學實踐中,我們發(fā)現(xiàn)將代碼審查的評分作為成績組成部分是促進學生深入理解實驗的一個有效途徑。
操作系統(tǒng)實驗課程是操作系統(tǒng)理論課程的重要補充,能夠從編碼的級別幫助學生深入形象的理解操作系統(tǒng)的知識。我們設(shè)計了預(yù)備實驗、驗證實驗、模擬實驗和探索實驗,從Linux系統(tǒng)的安裝和基本操作(預(yù)備實驗)開始,引導學生逐步深入到編程接口(驗證實驗)、系統(tǒng)策略(模擬實驗)、內(nèi)核模塊(探索實驗)等不同的層次。并制定了強調(diào)理解代碼和操作系統(tǒng)原理的成績評價方法,將操作系統(tǒng)實驗與理論課程緊密關(guān)聯(lián)在一起,促進學生對操作系統(tǒng)原理的理解。
在具體的教學中,我們還特別加強講授從代碼到原理的對應(yīng)關(guān)系。要使學生明白所做實驗涉及的是操作系統(tǒng)哪一部分,基于什么機制,應(yīng)用在什么場景。避免學生只見程序不見操作系統(tǒng)。
[1]朱貴良,陳向群.美國若干知名大學《操作系統(tǒng)》課程設(shè)計的比較性研究[J].計算機科學,2002,29(6):152-153.
[2]王雷.操作系統(tǒng)實驗設(shè)計[J].計算機教育,2009(17):54-56.
[3]張玉宏,張玉,程紅霞.操作系統(tǒng)課程設(shè)計的實踐教學嘗試[J].計算機教育,2015(14):79-82.
[4]李玉軍,侯孟書,周益民.《操作系統(tǒng)》實驗課程教學研究[J].實驗科學與技術(shù),2012,10(3):127-129.
[5]謝謙,蔡坤,沈夏炯.一種面向應(yīng)用的操作系統(tǒng)實驗設(shè)置[J].計算機教育,2012(20):107-110.
[6]唐作其,葉潔,武彤,等.面向信息安全專業(yè)的操作系統(tǒng)教學改革[J].計算機教育,2012(1):83-85.
[7]左萬歷,趙東范,閆昭.操作系統(tǒng)課程的多角度教學模式探索[J].計算機教育,2011(12):103-106.
[8]田麗華,周頤.面向軟件工程的Linux操作系統(tǒng)實驗教學[J].計算機教育,2014(14):103-106.
[9]許波,代靜.操作系統(tǒng)原理實驗教學改革[J].計算機教育,2007(17):85-87.
[10]黃萍.操作系統(tǒng)實驗環(huán)節(jié)設(shè)置的探索[J].實驗科學與技術(shù),2015,13(3):113-115.
[11]張玉宏,李歆,馬宏琳.Android平臺下操作系統(tǒng)課程設(shè)計的教學改革[J].計算機教育,2014(8):32-35.
[12]于永斌,徐潔,王華,等.計算機系統(tǒng)結(jié)構(gòu)課程多核創(chuàng)新實驗探索[J].實驗科學與技術(shù),2011,9(3):68-71.
Design of Operating System Experiments and Evaluation Criteria
ZHANG Binbin,YUE Kun,ZHANG Jixian
(School of Information Science and Engineering,Yunnan University,Kunming 650500,China)
Operating system experiments is an importantpartof the operating system courses to help students understand the oper ating system concepts and principles from the coding level.In this paper,we discuss the content of the experimentand the design of the student achievement evaluationmethod in combination with the teaching needs and training direction.The contents of the experimentare introduced in the form of preparatory experiment,verification experiment,simulation experimentand exploration experiment,and the principle of code review is introduced into the student achievement evaluation through the principle of experiment understanding.
operating system;experimental teaching;experiments design;evaluation criteria
G642;TP316
A
10.3969/j.issn.1672-4550.2017.03.035
2015-11-05;修改日期:2017-04-20
云南大學信息學院本科教學建設(shè)與改革項目資助(2012)。
張彬彬(1982-)女,博士,講師,主要從事虛擬化、云計算方面的研究。