天天看點

《新編計算機科學概論》一2.1 計算機系統的多級層次結構

計算機是一個複雜的系統,是由硬體和軟體結合而成的有機整體,如同一切複雜的自然系統和人為系統一樣,計算機内部也存在多級的層次結構。這種多級層次結構是人們對于計算機一種深入的、本質的認識和應用,它是随着計算機的發展而逐漸建立起來的。

要了解計算機系統的多級層次結構,需要引入“虛拟機”(virtual machine)概念。

最早的計算機隻有機器語言,計算機能直接執行用機器語言所編的程式。機器語言是由二進制代碼表示的計算機機器指令和資料組合而成。指令是用來指定計算機實作某種控制或執行某個運算的操作指令代碼。一台計算機全部指令的集合,稱為指令系統。不同的計算機有不同的指令系統,或者說有不同的機器語言。同一個題目到不同的計算機上計算時,必須編寫不同機器語言的程式。機器語言是最低級的語言,它是面向機器的,其指令和資料都用二進制表示。使用機器語言編制程式的工作量很大,程式的書寫、輸入、調試和閱讀都十分困難,隻有少數受過專門訓練的專業人員才能勝任,使用、調試和維護都需要耗費大量的人力和時間。這大大限制了計算機的應用。

到 20世紀50 年代,人們想出了用一些具有一定含義的文字、符号和數字(稱為“助記符”),按規定的格式來表示各種不同的機器指令。例如,用“add”表示加法,“mov”表示資料傳輸等。再用這些助記符來編寫程式,這就是彙編語言。這種符号語言便于記憶,比直接采用機器語言程式設計友善多了。但計算機隻“懂”機器語言,為此需要一個能夠把彙編語言“翻譯”成機器語言的工具。這就是“彙程式設計式”,它将彙編語言編寫的源程式轉換成為機器語言的目的程式,再在計算機上執行,進而實作了程式設計工作的部分自動化。在這種情況下,對使用者來說,他所面對的是一台使用彙編語言的機器,而這台機器似乎取代了實際的機器。值得注意的是,這台彙編語言機器沒有實際的機器硬體與之相對應,它的功能完全是由軟體實作的,是以稱為虛拟機。可以想象這台使用彙編語言的虛拟機器m2是在實際機器m1之上,如圖2?1a所示。

用彙編語言程式設計式比用機器語言程式設計式進了一大步。但彙編語言還是一種很初級的語言,它的語義結構和數學語言的差别巨大;并且彙編語言與機器結合緊密,它的每條指令與機器指令幾乎是一一對應的,必須清楚該機器的結構和指令系統才能使用彙編語言,這對于大多數人來說還是很費力的。為了根本變革程式設計的方式和便于程式交流,達到不學習具體的計算機結構也能友善地使用計算機的目的,一種接近于數學語言的“算法語言”被創造出來了。

《新編計算機科學概論》一2.1 計算機系統的多級層次結構

算法語言也稱為進階語言,它定義了一套基本符号以及怎樣使用這套基本符号設計程式的規則。算法語言比較接近數學語言,與具體機器無關,直接通過學習該進階語言的規則就可以使用計算機解決自己的問題,既友善又省事,這為計算機的推廣應用提供了友善。目前常用的算法語言有basic、pascal、c、java等。用進階語言編寫的程式稱為源程式,機器不能直接識别執行,必須把進階語言的程式“翻譯”成機器語言,計算機才能識别和執行。如圖2?1b所示,對使用者來說,使用進階語言時,他所面對的是使用進階語言的虛拟機器m3,圖2?1b還表示了當進階語言不能直接被翻譯為機器語言時的情況。進階語言先翻譯為彙編語言或者某個中間語言,再經過中間語言翻譯成為機器語言的目的程式,最後在機器上執行。這種翻譯通常有兩種方法。

1)編譯法:給計算機進階語言編制一套用機器語言編寫的編譯程式,它先把源程式全部翻譯成目的程式,再提供給機器執行。編譯程式的作用類似彙程式設計式,但是進階語言更複雜,其“翻譯”的難度較彙編要大得多。編譯法隻是在編譯過程中需要額外時間,并且還能夠在編譯中優化目的程式,編譯後目的程式可以多次反複執行,還可以拿到相同的其他機器上直接執行,是以執行的效率較高。pascal、c語言等屬于編譯型進階語言。由于各種進階語言和各機器語言都不相同,是以對于不同的計算機和不同的進階語言都要有對應的編譯程式。編譯法的具體情況我們将在後續的第6章詳細介紹。

2)解釋法:與編譯法不同,它不是先把源程式全部編譯為目的程式後再執行,而是把程式的語句逐條翻譯成為目的程式并且立即逐條執行,即解釋一條執行一條。這種方法每運作一次就需要解釋一遍,浪費許多時間,也不能優化目的程式,是以執行效率低。basic語言是典型的解釋型進階語言。

圖2?1c表示了作業系統存在時的計算機系統的層次結構劃分。

1)實際機器m1:即執行機器語言的實體機,它是計算機軟硬體的分界面,在它以上是各層次的軟體和彙編語言(關系最直接的是彙編語言,它與機器語言有着一一對應的簡單關系), 在它以下是計算機的硬體。除了計算機專業設計者之外,很少有人熟悉和了解該層次。彙編語言的編譯程式必須由機器語言編制,它能夠被計算機硬體直接執行,是十分難懂的二進制編碼資訊。

2)虛拟機器m2:即作業系統虛拟機,是計算機操作人員所熟悉的虛拟機器(他所看到的計算機是能夠在鍵盤和滑鼠操作下管理計算機資源的機器)。作業系統能夠管理進階語言和彙編語言的運作,從作業系統所提供的基本操作和對計算機系統進行管理的角度來看,它是計算機軟硬體功能的最直接的延伸,在進階語言和彙編語言之下,實際實體機器之上。需要提醒注意的是,作業系統中會提供很多工具,這些工具大多屬于應用程式,如windows中提供的許多附件。

3)虛拟機器m3:即彙編語言程式員所熟悉的虛拟機器(他所看到的計算機是隻能進行算術運算和邏輯運算等一些簡單運算和操作的機器)。該層次的程式員要用計算機解決問題,必須比較深入地了解計算機的硬體結構和善于把複雜的計算分解處理為簡單的計算機運算和操作流程,才能勝任自己的工作。

4)虛拟機器m4:即進階語言程式員使用的虛拟機器(他所看到的計算機是一個能夠了解接近于人類自然語言的算法語言的計算機),它可以按照程式員的要求完成運算和處理。該層次的程式員可以不完全了解計算機的硬體,也可以不完全懂得編譯和作業系統的設計。

5)虛拟機器m5:運作的是為某一個具體應用專門設計的應用軟體。這一層次的使用者所看到的計算機是能夠解決專門問題的智能機器,他對計算機的了解是建立在大量軟體及硬體基礎上的虛拟機器 m5 ,是以使用者可以完全不了解計算機的軟體和硬體而友善地使用計算機。比如我們用word軟體進行文字處理時,使用的是應用程式word提供的控制菜單和快捷按鈕。

計算機硬體由數字邏輯電路構成。實際上,現代計算機的控制器大多采用微程式控制器構造,這一層裡包含有微程式層。在圖2-1中沒有表示該層。微程式是處理器内部用來處理外部指令的程式,也稱微碼,是最内層的程式,與處理器硬體直接相關,被固化于控制器内的隻讀存儲器中,是以稱為“固件”。它的任務是用軟體的方法把一條機器指令分解為一系列微指令,即控制指令。除了硬體設計專業人員,一般人不知道它的存在。

在計算機的層次結構中,凡是由軟體實作的機器界面稱為虛拟機,即在圖2-1中第2層以上均屬虛拟機,需要說明的是這些層次結構中的軟、硬體的界面可能存在着一定程度的交叉,并且不同的機器結構,其軟、硬體之間的功能配置設定也不同。從理論上講,任何可以由軟體完成的功能均可由硬體來替代,反之由硬體實作的功能也完全可以用軟體來模拟。硬體實作意味着高速度和高成本,軟體實作則表示有較高的靈活性。最初由于硬體成本的高昂,許多工作不得不采用軟體實作,随着內建電路技術向大規模/超大規模(lsi/vlsi)方向發展,硬體成本不斷下降;而計算機應用領域的不斷擴充,使得軟體的設計成本不斷上升,于是一些本來由軟體完成的傳統任務逐漸改為硬體完成,稱為軟體的硬化,這造成硬體界面某種程度的上移。

對計算機結構進行層次上的劃分,可以使各層相對獨立,有利于簡化處理問題的難度。在某一段時間處理某一層中的問題時,隻需集中精力解決目前最需要關心的核心問題即可,而不必牽扯上下層中的其他問題。在這種多層次結構中,上面的一層是建立在下一層的基礎上實作出來的,實作的功能更強大,更接近人解決問題的思維方式和處理問題的具體過程,對使用人員更友善,使用這一層提供的功能時不必關心下一層的實作細節。下面一層是實作上一層的基礎,更接近計算機硬體實作的細節,實作的功能相對簡單,人們使用這些功能更困難,但機器執行更直接。在實作這一層的功能時,可能尚無法了解其上一層的目标和将要解決的問題,也不必了解其更下一層實作中的有關細節問題,隻要使用下一層所提供出來的功能來完成本層次的功能處理即可。

現代計算機是一個功能複雜的軟硬體系統。從普通使用者到計算機操作員,從程式設計員到硬體工程師,所看到的計算機系統各有完全不同的屬性。大家在學習使用計算機時,需要準确把握自己的定位,根據各個層次的關系,集中精力掌握好自己直接面對的層次,當然對其他層次的了解将有助于更加全面、深刻地了解計算機系統。

繼續閱讀