郭惠芳 趙秋霞 何紅旗
摘要:本文從“計算機組成與結構”課程的內容組織和教學組織兩個方面對該課程進行了闡述,針對筆者在教學實踐中發現的問題,提出了一些解決方法與體會,在如何保持該課程的經典特色及提高學生學習興趣方面提出了一些觀點。
關鍵詞:計算機組成與結構;教學組織;控制器原理與設計;課程設計
中圖分類號:G64文獻標識碼:B文章編號:1672-5913(2009)04-0092-03
1課程地位和特點
各所大學對計算機專業都制訂了各自的學科教學計劃,大部分都參考了CC2001或CC2005。CC2001與CC2005是IEEE/ACM分別于2001年和2005年發布的具有指導意義的計算學科本科教學參考計劃(computing Curricula)?!坝嬎銠C組成原理與結構”課程在CC2005中是一門計算機結構與操作系統方面的中級課程,采用精簡的、系統的、主題教學方法相結合的教學方法,它是這個方向最基礎的重要課程。這門課程不僅在后續課程學習中有非常重要的承前啟后的作用,而且在學生以后的職業生涯中也有著非常重要的作用,大部分有關計算機的專業概念都是在這門課程中給出的,它讓你學會設計一個復雜的系統應該從哪兒入手。
“計算機組成與結構”課程要求掌握計算機組織和計算機結構兩方面的內容,計算機的結構是指那些對程序員可見的系統的屬性,直接影響到程序的邏輯執行,包括指令集、數據的表示、I/O機制及內存訪問技術。而計算機組織是指實現其結構規范的部件和它們相互的連接,其中包括那些對程序員透明的硬件細節,如控制信號、計算機和外設的接口、使用的存儲器技術等。最終目的是達到從系統、整機的角度理解計算機的結構與組成。由于計算機是一個復雜的系統,完整并清楚地描述它本身就是一項非常困難的事,更何況還要求學生不僅要掌握計算機結構的內容,還要掌握重要部件的組成原理與設計方法。所以這門課程的教與學都比較難,是老師與學生比較頭疼的一門課。
該課程的特點具體體現在以下幾個方面:第一,內容龐雜?!坝嬎銠C組成與結構”課程,對于計算機各個專業來說都起到一個高屋建瓴的作用,它既要全,又要精,還要細,在內容詳略選擇等問題上是非常值得推敲的;第二,內容的關聯不是特別緊密,比如計算機的各大部件之間雖然相互關聯,但由于各大部件本身就足夠復雜,在相應章節已疲于內部結構及原理的介紹,而對于相互的聯系,很多情況下都涉及更多的實現細節,無法在局限的篇幅中介,所以各章內容顯得很零散,系統性不強;第三,很多內容比較抽象,無法直觀展現,學生學習過程中較難提起興趣。
2內容組織
國內的“計算機組成原理與結構”課程一般介紹單處理器計算機的組成原理與結構體系,包括數據在機器中的表示、總線系統、外圍設備接口、存儲器組織與結構、指令系統、中央處理器(含運算器與控制器)、流水與并行處理等內容。其中重點是數據在機器中的表示、存儲器組織與結構、中央處理器等內容。而對外圍設備接口、指令系統等只作簡單介紹,在后續的“匯編語言與微機接口技術”課程中再作重點介紹。本課程對流水與并行處理也只作簡單介紹,其詳細內容在后續的“計算機系統結構”中重點介紹。
大家對該課程的基本內容是有共識的,但對于這些基本內容的組織卻有比較大的分歧,有些人先講整機系統以及部件之間相互連接,然后由部件到結構、原理至具體實現;而有些人則先從每個部件的實現原理到結構,再由各個部件相互連接而成整個系統,再到整個系統的結構等等進行講解。也有一些人講兩種方法進行結合。每一部分內容的組織也有分歧,我們通過多屆的教學有一些體會,當然不同老師的觀點也不盡相同,這里介紹一下我們對內容組織的考慮,希望與同行們共同探討。
2.1分章內容安排
一般來說,學生是沒有錯的。我一直認為,如果一門課不能吸引學生,作為老師,首先考慮的就是自己的教學是否有問題。只要這么去想,教學就會有改善。而教學過程中第一要改善的就是內容的組織。回想學生時代,一門課上過二、三次課后,也就基本確定喜歡不喜歡這門課了,所以一開始的內容組織就非常重要。
計算機如此之復雜,講解需要有一個引導的過程,如果一開始就講數的表示,計算等等,學生會覺得很枯燥,不知目的何在。很多教科書也是這樣講的,實踐證明,這樣的開端效果不好。如果一開始利用一章來足夠概括,也足夠簡明地向學生介紹一下計算機的功能和工作過程,進而引出整門課的內容組織,學生就容易與老師的思路同步,而且對整個計算機有了一定了解以后,自然而然地就會對其中每一部分的工作原理以及設計感興趣。
第1章是計算機系統導論,首先介紹計算機系統的分級層次的概念,指出本門課程在其中處于什么位置;然后簡單地介紹一下計算機硬件的組成及功能、計算機執行程序的過程,進而介紹計算機執行指令的過程。
這樣的開端,益處有幾條:第一,學生快速進入狀態,它與以往課程不同之處在于,我們是研究計算機較為底層的工作原理,是要詳細到一條指令是如何執行的。其實以后的各章也是圍繞這個問題展開的。第二,學生學習的目標性強,知道每一章節的學習目的。第三,人有探索未知領域的本能,這樣的方式容易激發出學生的本能。
第2章是系統總線,它以總線為切入點講解現代計算機的結構以及各個部件的互連,重點不是為講總線而講總線。有些書上大講特講各種總線標準,但我認為在這一章我們首先要使學生了解,各個部件特別是CPU和存儲器、各種I/O設備之間如何協調工作,CPU為什么要與它們交換信息以及如何交換信息,總線為什么要制訂標準等。這些都交代清楚后,再介紹幾種典型的總線標準及相關的技術指標。
講任何一章內容都要使學生了解我們為什么要學習這一章內容,這部分內容對于我們的整體目標有什么作用,然后再往細介紹。
第3章是存儲器系統,它包括了主存系統與輔存的基本原理,首先討論存儲系統的特性及它的基本操作及主要技術指標。其中,地址線數、數據寬度、存儲周期等概念一定要在此講清楚。而這些為后面的存儲系統的分層及芯片組織打下一個好的基礎。有不少學生,直到最后也無法掌握如何用半導體芯片組成一個特定的主存系統。通過調查發現最主要的問題就是前面的這些概念未能搞清楚。芯片的組織是其中一個重點內容,前面的基礎概念搞清楚后,用兩個例子說明芯片的組織及與CPU的連接的一些原則、方法。帶Cache的二級主存系統的工作原理是該章另一個重點,其中包括地址映像、替換算法等:有關輔存的內容可以比較簡單,不需詳細介紹虛擬存儲器的內容,因為這部分內容只有在操作系統中才能講清夢,而且它的確也不屬于硬件的范疇,但Cache與主存之間地址映像卻是硬件完成的,所以它屬于計算機組織與結構的內容之一。
關于存儲器芯片內部如何完成二進制位的存儲及讀寫這部分內容,有一些書中未作介紹,比如William Stallings著的《計算機組織與結構:性能設計》,他在第4章內部存儲器中并未對此作介紹。我認為,存儲元件如何存儲信息,以及地址如何選中相應的存儲單元,還是有必要講解,因為從理解存儲器的工作原理這個角度,這種細節如果不作介紹,那么它的原理總是不夠完整,所以可在內容上講清存儲信息的邏輯實現即可。
第4章是數據表示及運算方法,主要介紹數的表示、算術及邏輯運算的方法,以及相應硬件實現的基本結構,這部分內容分歧較少。
第5章是指令系統,討論計算機指令系統的發展歷史、指令格式、指令系統設計原則以及RISC指令系統特點等等,這一章為后面的CPU功能及控制器原理與設計做準備。
第6章是CPU的結構與功能,討論CPU的組成結構,指令周期及指令流水和中斷系統。
第7章是控制器的原理及設計,重點介紹指令執行過程中的微操作命令,組合邏輯設計中對微操作命令的節拍安排,微操作時間表等。繼而再介紹微程序級設計方法及相關的微操作控制信號的編碼技術、微指令順序控制技術等。
2.2內容的綜合及細節的處理
控制器的工作原理及設計方法是本課程的核心,前面講的每一部分的內容都是為這部分內容的學習做準備的。在這一章,前面所學的知識又綜合在了一起,由控制器將各部件的工作過程連接起來,其中指令執行的詳細過程是關鍵,控制器需要發出哪些控制信號來控制這一過程,進而,這些控制信號該在什么樣的條件下發出,然后寫出每一控制信號的邏輯表達式。要想理解控制器的工作原理及設計方法,必須從組合邏輯控制器設計著手,給學生一個直觀的設計過程,這樣控制器的設計框架就在腦中形成,而后面的微程序控制器的設計,只是將上述分析得出控制信號進行編碼,形成微指令,并存放在控制存儲器中,指令的執行過程也就演變為從控制存儲器中一一取出相應的微指令執行而已。
雖然微程序控制器的設計已成為大部分復雜計算機控制器設計的主流方法。但從理解角度上來講,組合邏輯控制器的設計是理解控制器工作原理及設計方法的關鍵。如果像國內一部分教科書中所講順序,先講控制器功能,進而直接引出微程序控制器原理及設計,最后是硬布線控制器設計,許多學生學了半天,學了編碼法,但最終也不知控制器是怎么工作的,整機觀念更是建立不起來。
在實踐中反復證明的一點是,學習復雜的系統,必須使學習者首先建立整體框架,然后詳細了解每一部分,最后再將每一部分綜合起來理解。這樣就可以將一個復雜系統從上至下地了解清楚。堅決要杜絕的就是,框架建立不起來,卻在許多細節問題上反復糾纏。這樣很快就使學生對這門課程失去耐心和興趣。
那么對于許多的細節如何去講?這是這門課教學過程中一個較難解決的問題,如果能與每一部分連成一體的,就順著講下來;如果在邏輯上并沒有太多的聯系,但又必須交待的內容,比如多字節數據傳輸與存儲時的大端小端問題等可以用每章后的附錄形式出現,這樣既不影響每一部分內容的連貫性,又照顧了完整性:而講課時也可在每章后增加一個個小專題來講,有些內容學生自己看就可以,有一些可用來討論,形式可多樣化。
3教學組織
內容的組織必須配合相應的教學組織,其中包括課前備課、課堂教學、課下輔導以及課程設計等環節。我認為教學改革絕不僅僅是增加一些華而不實的動態效果,或單一地追求講課時的抑揚頓挫。這些形式上的東西都是為實質性的內容服務的,我們的目標是如何培養出符合現代社會需要的、合格的人才。
3.1課前的準備
從課前準備來說,“計算機組成與結構”是一門經典課。許多老師認為計算機無論如何發展,它的基本原理是沒變的,大體來講這句話是沒錯的,但這不應成為老師照本宣科的理由。因為愛,老師心中有使命感,有責任感,甚至有危機感。每一學期開始,我都會去認真準備最近TOP500強計算機的資料,一方面讓學生了解最新計算機發展狀況,了解衡量計算機的幾個指標,了解中國與強國的差距,以此喚起聽者心中興趣與使命感。同時涉及計算機的幾個重要概念:速度、字長以及規模等。我發現,每次講完教室里的氣氛都很熱烈,在接下來的授課中他們就會比較用心。
課前的準備除了內容上的不斷更新,還要不斷地去揣摩學生的心理和接受能力。學生要想考試得高分,就得揣摩老師的心理,那么同樣的道理,老師要想教好書,就得揣摩學生的心思。我一直相信學生是想學知識的,所以我努力去做的就是讓他們對此有興趣,并沿著正確的思路去學。
3.2課堂教學
課前充分的準備為課堂的講授打下了基礎,但有時仍然會遇上學生整體士氣不高的時候,這時,我會稍作停頓,說幾句題外的話,旁敲側擊一下,在內容安排上,會將一些復雜的、枯燥的內容與簡單的、有趣一些的內容交叉起來。上課時充滿熱情,時時觀察學生的狀況與接受程度,及時做出調整。有時使用研究的方法,將問題提出來,我也在思考,我與他們同步分析,轉換角色,將主角的位置讓給他們,讓他們大聲地說出他們的想法,然后沿著他們的思路走,進而分析問題所在,以及正確的解決方案。這些方法在課堂上是很有效的,學生們是很清楚的,老師投入滿腔熱忱,他們也會被感染。相反,老師應付差使,他們就很容易隨波逐流。
3.3課外的輔導與課程設計
課下的輔導在很多情況下是配合課堂教學的,如果最近上課內容比較難以接受,那么學生在課下會用不少時間來想,如果這時老師未能及時給以輔導,那么大部分學生很容易知難而退,所以要及時與學生溝通,給予適當的輔導與疏導。
課程設計環節,一方面的目標是加深對理論學習的理解,另一方面是為了提高學生自己動手解決問題的能力。在課堂講授環節就要考慮課程設計的需要,比如知識的準備,以及相應設計方法的學習。所以要想課程設計環節取得好的效果,在相應的課堂教學中,應該做好充分的準備,然后在課程設計中,給以適當的指導,既不讓學生產生依賴思想,又不能因為太難而讓學生不知所措,匆匆地將實驗結果湊出來交差。
4進一步的思考
“計算機組成與結構”課程不是一門孤立的課程,它與系統結構、匯編語言與接口技術以及操作系統課程有著密切關系,“計算機組成與結構”的老師一方面要劃分好課程之間的分工,另一方面要充分了解相關課程的內容,在講課時如果有交叉時需要交待清楚。原本它們都是相互關聯的,教學過程中如果能關聯是最好的,但不應涉及太深,細節問題在相應課程中講。
21世紀的計算機科學發展如此迅速,如何根據計算機學科發展以及信息科技發展情況,及時、動態地調整教學內容,及時體現最新發展技術是本課程建設的一個重要方面。比如多核處理器的出現及廣泛使用,它對計算機結構課程及組成原理課程的影響是深刻的,如何來表現這一點,是一個值得研究的問題。在該課程中增加操作系統支持專題是否值得?有一些書上介紹了一些,但角度不是很好,作用不大。各門課程將內容割裂,如何再將它們形成一個整體,軟件與硬件如何形成一個系統?這些都需要更加深入的思考和實踐。對于最近出現的硬件技術,哪些應該增加進來,哪些應該忽略,也是值得大家一起來研究與探討的。幾年一度的國內同行研討會是非常有益的。
教師絕不是一個輕松的職業,有人說,教師是世界上最危險的職業之一,我深有體會。無論如何努力,我都覺得不夠,但我會繼續努力。本人經歷與水平有限,上述觀點肯定有偏頗之處,希望得到同行的批評與指正。