計算機組成原理學習(一)計算機結構模型,層次和編程語言


開個新系列記錄計組學習的知識點。

主要參考教材:網課南京大學袁春風老師的MOOC,書籍《深入理解計算機系統

袁春風老師的MOOC在b站有完整版:https://www.bilibili.com/video/av69563153?from=search&seid=18216428773595388164


 

1.計算機系統的抽象層次

首先給出一張計算機系統的抽象層次。最終用戶處在最上端,是使用者,也是問題的直接提出者。ISA指令集體系結構是軟件和硬件的交界層。

計算機越向上層走越抽象,越向下層走越具體。記住一句話:上層是對下層的抽象,使用下層,底層是對上層的實現,為上層提供支撐環境

 

2.馮諾依曼體系結構

最早的計算機是上世紀40年代,美國出於軍事目的(計算導彈的軌道)設計出來的。其中,馮諾依曼設計的計算機體系成為經典的計算機體系一直沿用至今。

馮諾依曼結構的關鍵是存儲程序

設計的理念是,程序應該事先被存儲起來,想要做某項計算工作時,只要輸入數據,就會自動調用程序,程序自動一步步完成計算,最后輸出結果

所謂程序就是指令的集合

按照上面的理念,存儲程序就需要存儲器,輸入輸出程序就需要輸入輸出的設備(I/O設備),完成自動化的過程需要控制器,完成計算的過程需要運算器。即如下:

上圖是高度的抽象,稍微具體一點設計如下圖:

運算器會以算數邏輯電路為基礎構成,存儲器可以分為主存儲器(主存)和許多寄存器程序計數器(Program Counter)順序調用程序。為了區分各項數據和程序,它們都會標有自己的地址存放在數據寄存器中,控制電路會輸出控制信號來完成自動化的操作。

 

3.現代計算機體系結構

現代計算機的結構模型基於馮諾依曼體系,變化不大:

控制器、程序計數器PC、數據和地址寄存器(MAR和MDR)、通用寄存器組(GPRs)、算數邏輯單元(ALU)、標志寄存器構成了CPU(中央處理單元)

上世紀早期的計算機設計中,各組件是分散設計的,而現代計算機使用了總線技術設計,地址、數據和控制信號通過三條總線傳輸,分別為地址總線控制總線數據總線

輸入輸出設備很好理解,鍵盤和鼠標就是典型輸入設備,顯示屏就是輸出設備。

CSAPP給出的圖:

程序存放在磁盤上。對外的設備都會有其配套的控制器或適配器,控制器是IO設備本身或者計算機的主印刷電路板(主板)上的芯片組,適配器就是主板上的插槽上的卡,作用都是傳輸數據到IO總線。

上面說的主存實際就是通常說的“內存”,會以內存條的形式插在電腦主機里面。主存是臨時存儲設備,用動態隨機存儲器(DRAM)芯片組成。主存中會存放需要執行的機器指令。

CPU就是通常說的“處理器”,是解釋和執行指令的引擎,核心是程序計數器PC。從上電到下電為止,PC都會不斷更新,指向某條指令的地址。

 

4.存儲器層次結構

CPU直接從磁盤中讀數據,比從主存中讀慢好幾個數量級,而直接從主存中讀數據,又比從寄存器中讀慢上幾乎兩個數量級。

所以現代存儲的理念是,一步步從下往上讀數據,正在運行的程序會通過主存(即內存)存數據,並發展出了高速緩存存儲器(Cache)技術。

訪問Cache的速度比訪問內存快很多,Cache會存放可能經常訪問的數據。

一個典型的存儲器層次結構:

上層會保存來自下層的數據,越往上訪問速度越快。

 

5.指令的執行過程

如PPT,袁老師拿做菜比喻。

指令簡單說,包括操作數操作碼(及地址),操作數是要處理的數據,操作碼描述了怎么處理。指令會以0和1的二進制字段來表示。

 

6.一個程序的生成過程

以Linux環境下用gcc編譯器為例,假如寫了個程序叫hello.c,打印“Hello”。

首先,想要執行編譯的過程,本身就會調用系統的一個程序,叫編譯驅動程序,也叫Unix Shell。也就是平時看到的那個命令行窗口。

輸入

gcc -o hello hello.c

就會編譯當前所在目錄下的名為hello.c的程序,然后最后生成名為“hello.o”的可執行文件。

編譯過程如下:

hello.c就是個用ASCII字符表示的文本文件預處理器會根據 后面跟的代碼執行一些操作(比如包含頭文件等),然后生成修改后的文本文件,再經過編譯器生成機器級語言(匯編)表示的文本文件,該文本文件再通過會匯編器翻譯成機器可以理解的二進制文件。因為hello調用了printf函數來自另一個程序,所以另一個程序也會經過相同的編譯過程,最后鏈接到一起,生成可執行文件。

 

7.程序開發需要的支撐環境

現在的IDE也就是所謂的語言處理程序,把中間的編輯器和一套翻譯轉換程序都集成好了,比如Virtual Studio,CodeBlock,Pycharm這樣的。

操作系統簡單來說就是個大軟件,是對下層硬件的抽象,為操作硬件提供許多的基本指令。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM