計算機發展歷程
從1946年第一代計算機ENIAC問世以來,計算機發展經歷四代。
計算機硬件發展
- 第一代計算機:電子管時代
- 第二代計算機:晶體管時代
- 第三代計算機:中小規模集成電路
- 第四代計算機:超大規模集成電路
計算機軟件發展
計算機語言的發展經歷了面向機器的機器語言和彙編語言、面相問題的高級語言。其中高級語言的發展促進了軟件的發展。從科學計算和工程計算的FORTRAN、結構化程序設計PASCAL到面向對象的C++和適應網絡環境的Java等等。
計算機指令和數據流分類
- SISD(單指令流,單數據流):即傳統馮諾依曼體系計算機
- SIMD(單指令流,多數據流):陣列處理器和向量處理器等
- MISD(多指令流,單數據流):不存在,爲啥不存在,因爲指令是多個,數據流是一個,多個指令對同一個數據會有衝突
- MIMD(多指令流,多數據流):當前的多處理器和多計算機系統
計算機系統層次結構
硬件組成
早期馮諾依曼體系計算機主要特點
- 硬件系統由運算器、控制器、存儲器、輸入設備、輸出設備組成
- 指令和數據以同等地位存儲在存儲器內,並可以按地址訪問
- 指令和數據用二進制表示
- 指令由操作碼和地址碼組成
- 指令在存儲器內順序存放
- 早起馮諾依曼體系計算機以計算器爲中心,IO設備通過運算器和存儲器傳送數據
現代計算機體系結構:以存儲器爲核心
計算機功能部件
- 輸入設備:鍵盤、鼠標、掃描儀等
- 輸出設備:顯示器、打印機等
- 存儲器:包括主存、外存;主存由很多存儲單元組成,每個存儲單元可以存儲一串二進制代碼,代碼位數叫存儲字長,可以是一個字節。主存的工作方式是按照存儲單元的地址進行存取的。主存主要由存儲體、地址寄存器(MAR)和數據寄存器(MDR)組成。地址寄存器存地址,經過地址譯碼後找到對應的存儲單元;數據寄存器是主存和其他部件的中介機構,用於暫存要從存儲器中讀或寫的信息。所以MAR的位數決定存儲單元的個數,MDR的位數就是存儲字長的位數。
- 運算器:對數據進行加工處理的,完成算數運算和邏輯運算。主要有算術邏輯單元(ALU)、通用寄存器組如累加器(ACC)、乘商寄存器(MQ)、操作數寄存器(X)等等,此外還有程序狀態寄存器(PSW),保存各類運算結果狀態信息。
- 控制器:由程序計數器(PC)、指令寄存器(IR)和控制單元(CU)組成。PC存放要執行指令的地址,與主存的MAR有一條直接通路;IR存放當前的指令,內容來自於主存的MDR。
軟件分類
- 系統軟件:操作系統、DBMS、語言處理程序、分佈式軟件系統、網絡軟件系統、標準庫程序、服務性程序等。
- 應用軟件:爲解決某個應用領域編制的程序。
計算機性能指標
- 機器字長:計算機進行一次整數運算所能處理的二進制位數,一般機器字長等於內部寄存器
- 主存容量:MAR是16位,MDR是32位,則有2的16次方個存儲單元,一個存儲單元存32位,則存儲容量爲64K*32位。
- 吞吐量:系統在單位時間內處理請求的數量。
- CPI:一條指令需要幾個時鐘週期。
- CPU執行時間:運行一個程序所花費的時間。
- MIPS:一秒鐘能執行幾百萬條指令。等於主頻除以CPI
- MFLOPS:一秒鐘能執行幾百萬次浮點數運算。
計算機工作過程
- 把程序和數據存儲到存儲器中
- 從程序的起始地址開始運行程序
- 從程序的首地址從內存中取出第一條指令,經過譯碼、執行步驟等控制計算機各功能部件協同工作,完成這條指令,並計算下一條指令的地址。
- 用新得到的指令地址繼續讀出第二條指令並執行,直到程序結束爲止,每一條指令都是取指令、譯碼、執行指令的過程
以取數指令(將指令地址碼中的數據取出送到ACC寄存器)的信息流程如下:
- 取指令:PC-->MAR-->M-->MDR-->IR
- 分析指令:IR-->CU
- 執行指令:IR-->MDR-->M-->MDR-->ACC
舉個例子
存儲器的基本組成
運算器的基本組成和操作
控制器的基本組成
說明
- 翻譯程序:將高級語言源程序翻譯成機器語言程序(目標代碼)的軟件
- 編譯程序:是翻譯軟件的一種,將高級語言一次全部翻譯成目標程序,每次執行程序時,只要執行目標程序,因此只要源程序不變,就不需要重新編譯。
- 解釋程序:是翻譯軟件的一種,將源程序的一條語句翻譯成對應的機器目標代碼,並立即執行,然後翻譯下一條源程序語句並執行,直至所有源程序語句全部被翻譯並執行完。所以解釋程序的執行過程是翻譯一句執行一句,並且不會生成目標程序。
- 彙編程序:也是一種語言翻譯程序,它是把彙編語言源程序翻譯成機器語言程序。是一種面向機器語言的低級語言。
- 機器字長:計算機能直接處理的二進制數據的位數,機器字長一般等於內部寄存器的大小,決定了計算機運算精度。
- 指令字長:一個指令字中包含二進制代碼的位數。
- 存儲字長:一個存儲單元存儲二進制代碼的長度。必須是字節的整數倍。