計算機基本工作原理
1946年,第1台通用電子計算機 ENIAC誕生 :用十進制表示信息並運算采用手動編程,通過設置開關和插拔電纜來實現
1946年,普林斯頓高等研究院開始設計“存儲程序”計算機,被稱為IAS計算機,1951年完成。1949年由英國劍橋大學完成的EDSAC是第一台)
馮·諾依曼結構最重要的思想是“存儲程序(Stored-program)”
存儲程序方式基本思想:任何要計算機完成的工作都要先被編寫成程序,然后將程序和原始數據送入主存並啟動執行。一旦程序被啟動,計算機應能在不需操作人員干預下,自動完成逐條取出指令和執行指令的任務
馮諾依曼結構基本思想:
采用存儲程序工作方式
- 計算機由運算器、控制器、存儲器、輸入設備、輸出設備5個基本部件組成
- 儲存器不僅能存放數據,也能存放指令,形式上數據和指令沒有區別,但計算機應能區分它們;控制器應能自動執行指令;運算器應能進行算術運算,也能進行邏輯運算;操作人員可以通過輸入/輸出設備使用計算機
- 計算機內部以二進制形式表示指令和數據;每條指令由操作碼和地址碼兩部分組成,操作碼指出操作類型,地址碼指出操作數的地址;由一串指令組成程序
馮諾依曼結構計算機模型
現代計算機結構模型
- 主存:存放指令和數據的主存儲器
- 算術邏輯部件(ALU):用來進行算術邏輯部件
- 控制部件(CU):自動逐條取出指令並進行譯碼的部件
- 通用寄存器組(GPRs):臨時存放從主存取來的數據或運算的結果
- 標志寄存器:標志信息記錄的位置
- 指令寄存器(IR):從主存取來的指令需要臨時保存在指令寄存器中
- 程序計數器(PC):在執行當前指令的過程中,自動計算出下一條指令的地址並送到PC中保存
- 中央處理器(CPU):控制部件、運算部件和各類寄存器互連組成的電路
- 主存(單元)地址::主存中每個單元的編號
- 總線:鏈接不同部件進行信息傳輸的介質
- 主存地址寄存器(MAR):CPU送到地址線的主存地址應先存放在主存地址寄存器
- 主存數據寄存器(MDR):發送到或從數據線取來的信息存放在主存數據寄存器
CPU訪問主存時,需先將主存地址、讀/寫命令分別送到總線的地址線、控制線,然后通過數據線發送或接收數據
計算機如何工作?
- 程序由指令組成
- 程序在執行前:
- 數據和指令事先存放在存儲器中,每條指令和每個數據都有地址,指令按序存放,指令由OP、ADDR字段組成,程序起始地址置PC
- 開始執行程序:
- 第一步:根據PC取指令
- 第二步:指令譯碼
- 第三步:取操作數
- 第四步:指令執行
- 第五步:回寫結果
- 第六步:修改PC的值
- 繼續執行下一條指令
指令:用0和1表示的0/1序列,用來指示CPU完成一個特定的原子。包括操作作性質(操作碼)源操作數1 或/和 源操作數2 (立即數、寄存器編號、存儲地址)目的操作數地址 (寄存器編號、存儲地址)
- 取數指令:從主存單元取出數據放到通用寄存器中
- 存數指令:將通用寄存器的內容寫入主存單元
- 加法指令 :將兩個通用寄存器內容相加后送入結果寄存器
- 傳送指令:將一個通用寄存器的內容送到另一個通用寄存器
程序執行過程:
指令的執行階段都包含若干個微操作,微操作需要相應的控制信號進行控制
CPU中所有微操作都由時鍾信號進行定時,是時鍾信號的寬度為一個時鍾周期
1.2程序的開發與運行
最早期的程序開發過程:用機器語言編寫程序,並記錄在紙帶或卡片上
機器語言:是同特定計算機規定的指令格式而形成的0/1序列
匯編語言:用助記符表示操作碼、用標號表示位置、用助記符表示寄存器
- 優點:不會因為增減指令而需要修改其他指令不需記憶指令編碼,編寫方便、可讀性比機器語言強
匯編語言程序由匯編指令構成,匯編指令是機器指令對應的符號
匯編語言編寫的匯編源程序必須先轉換為機器語言程序,才能被計算機執行
機器級語言:機器語言和匯編語言都是面向機器機構的語言,他們統稱為機器級語言
高級編程語言:隨着技術的發展,出現了許多高級編程語言
- 它們與具體機器結構無關
- 面向算法描述,比機器級語言描述能力強得多
- 高級語言中一條語句對應幾條、幾十條甚至幾百條指令
- 有“面向過程”和“面向對象”的語言之分
- 處理邏輯分為三種結構:順序結構、選擇結構、循環結構
- 有兩種轉換方式:“編譯”和“解釋”
- 編譯程序(Complier):將高級語言源程序轉換為機器級目標程序,執行時只要啟動目標程序即可
- 解釋程序(Interpreter ):將高級語言語句逐條翻譯成機器指令並立即執行,不生成目標文件。
翻譯程序:可以將高級編程語言程序轉化為機器語言程序的軟件的統稱。被翻譯的語言和程序分別稱為源語言和源程序,翻譯生成的語言和程序分別成稱為標語言和目標程序
翻譯程序分為3類:
- 匯編程序:也稱匯編器,將匯編語言源程序翻譯稱機器語言目標程序
- 解釋程序:也稱解釋器,將源程序中的語句按其執行順序逐條翻譯成機器指令並立即執行
- 編譯程序:也稱編譯器,將高級語言源程序翻譯成匯編語言或機器語言目標程序
相鄰數組元素交換功能的不同層次語言之間的等價轉換過程:
以程序“hello.c”為例的從源程序到可執行文件的運行過程:
1 #include<stdio.h> 2 int main(){ 3 printf("hello,world/n"); 4 }
通過程序編輯軟件得到hello.c文件,文件在計算機中以ASCII字符方式存放通常把ASCII碼字符或漢字字符表示的文件稱為文本文件,源程序文件都是文本文件,是可顯示和可讀的
hello.c進行預處理、編譯、匯編和鏈接,最終生產可執行目標文件
- 預處理階段:預處理程序對源程序中字符以#開頭的命令進行處理,預處理程序輸出的結果還是一個源程序文件,以i為擴展名
- 編譯階段:編譯程序對預處理后的源程序進行編譯,生產一個匯編語言源程序文件,以s為擴展名。對同一台機器來說,不管何種高級語言,編譯轉換后的輸出結構都是同一種機器語言對應的匯編語言源程序
- 匯編階段:匯編程序對匯編語言源程序進行匯編,生產一個可重定位目標文件,以a為擴展名。其為二進制文件
- 鏈接階段:鏈接程序將多個可重新定位目標文件和標志函數庫中的可重定位目標文件合並成為一個可執行目標文件
Hello程序的數據流動過程:
- shell程序將用戶從鍵盤上輸入的每個字符逐一讀入CPU寄存器中,然后再保存到主存儲器中,在主存的緩存區形成字符串“./hello”(對應紅線)。
- 等到接收到【Enter】案件時,shell將調出操作系統內核中相應的服務例程,由內核來加載磁盤上的可執行程序hello到存儲器(對應藍線)。
- 內核加載完可執行文件中的代碼及所要處理的數據后,將hello第一條指令的地址送到程序計數器中,CPU永遠都是將PC內容作為將要執行的指令的地址,因此,處理器隨后開始執行hello下,他將加載到主存的字符串中的每一個字符從主存取到CPU寄存器中,然后將CPU寄存器中的字符送到顯示器中顯示出來(對應綠線)。
程序被啟動執行,必須依靠系統的支持,包括提供人機接口環境(如外殼程序)和內核服務例程(提供對底層硬件操作的系統調用服務例程)
I/O設備:鍵盤、磁盤和顯示器等外部設備簡稱外設,也稱I/O設備
I/O控制器(I/O適配器):外設控制外部設備工作的電子部分
計算機系統的結構層次
語言的發展過程是一個不斷抽象的過程,因而,相應的計算機系統也不斷由新的層次出現
語言處理系統包括:各種語言處理系統(如編譯、匯編、鏈接)、運行時系統(如庫函數、調試、優化等功能)
操作系統包括人機交互界面、提供服務功能的內核例程
計算機層次結構:
指令集體系結構(ISA):軟件和硬件接口的一個完整定義
計算機硬件執行機器語言程序的過程就是讓其執行一條一條指令的過程。ISA是對指令系統的一種規定或結構規范,具體實現的組織稱為微體系結構,簡稱微架構。
ISA和微體系結構是兩個不同層面上的概念,微體系結構是軟件不可感知的部分,相同的ISA可能具有不同的微體系結構,微體系結構最終是由邏輯電路實現,每個邏輯電路都是按照特定的器件技術實現的
計算機系統由硬件和軟件兩部分組成
- 硬件:物理裝置的總稱
- 軟件:運行在軟件上的程序和數據以及相關的文檔
- 程序:指揮計算機如何操作的一個指令序列
- 數據:指令操作的對象
根據軟件用途,一般將軟件分成系統軟件和應用軟件兩大類。
系統軟件:包括有效、安全地使用和管理計算機以及為開發和運行應用軟件而提供地各種軟件,介於計算機硬件與應用程序之間,它與具體應用關系不大。
- 系統軟件包括操作系統和各類實用程序。
- 操作系統主要用來管理整個計算機系統的資源,包括對它們進行調度、管理、監控和服務等,另外還提供計算機童虎和硬件之間的人機交互界面,並提供對應軟件的支持。
- 語言處理系統主要用於提供一個高級語言編程的環境,包括源程序編輯、翻譯、調試、鏈接、裝入運行等功能
應用軟件:指專門為處理數據、科學計算、事務管理、多媒體處理、工程設計以及過程控制等應用所編寫的各類程序。
最終用戶:使用應用軟件完成特定任務的計算機用戶
系統管理員:利用操作系統、數據庫管理系統等軟件提供的功能對系統進行配置、管理和維護,以建立高效合理的系統環境供計算機用戶使用的操作人員。
應用程序員:指使用高級編程語言編制各種應用軟件的程序員。
系統程序員:設計和開發系統軟件的程序員
計算機性能評價
計算機系統性能的基本指標:吞吐率和響應時間
吞吐率:在單位時間內完成的工作量
寬帶:單位時間內傳輸的信息量
響應時間:從作業提交到作業完成的時間
計算機性能測試
操作系統在對處理器進行調度時,一段時間內往往會讓多個程序輪流使用處理器,因此在某個用戶執行程序時,可能同時還有其他用戶程序和操作系統程序在執行,所以通常情況下,一個程序的執行時間除了程序包含的指令在CPU上執行所用的時間外,還包括磁盤訪問時間、輸入輸出操作所用時間以及操作系統程序運行這個程序所用的額外開銷等
用戶感覺到的執行時間分為兩部分:CPU時間和其他時間
CPU時間:指CPU用於本程序執行的時間。包括:1、用戶CPU時間,真正用於運行用戶程序代碼的時間。2、系統CPU時間,指為了執行用戶程序而需要CPU運行操作系統程序的時間
其他時間:指等待I/O操作完成的時間和CPU用於執行其他用戶程序的時間
系統性能與CPU性能的區別:系統性能是指系統的相應時間,它與CPU外的其他其他部分也有關系。CPU性能是指用戶CPU時間,只包含CPU運行用戶程序代碼的時間
時鍾周期:CPU主脈沖信號寬帶
時鍾頻率:CPU的主頻就是CPU中主脈沖信號的時鍾頻率,是CPU時鍾周期的倒數
CPI:表示執行一條指令所需的時鍾周期數
用戶CPU時間度量式中的時鍾周期、指令條數、CPI三個因素是相互制約的。提高時鍾頻率可能會對CPU結構帶來影響,從而使其他性能指標降低。因此,提高時鍾頻率可能會加快CPU執行程序速度,但不能保證執行速度又相同倍數的提高。指令條數少不代表執行時間段,同樣,時鍾頻率高也不說明執行速度快。在評價計算機性能時,僅考慮單個因素是不全面的,必須三個因素同時考慮
用基准程序進行性能評估
基准程序:專門用來進行性能評價的一組程序,能夠很好的反映在運行實際負載時的性能,可以通過在不同機器上運行相同的基准程序來比較在不同程序上的運行時間,從而評測其性能。
執行時間的歸一化值 = 參考機器上的執行時間 / 被測機器上的執行時間
Amdahl定律:對某個硬件部分或者軟件部分進行更新所帶來的系統性能更改程度,取決於該硬件部分或軟件部分被使用的頻率或其執行時間占總執行時間的比例
改進后的執行時間 = 改進部分執行時間 ÷ 改進部分的改進倍率 + 未改進部分執行時間
整體改進背書 = 1 /(改進部分執行時間比例÷ 改進部分的改進倍數 + 未改進部分執行時間比例)
阿姆達爾定律適用於對特定任務的一部分進行優化的所有情況,可以是硬件優化也可以是軟件優化
MIPS:指令速度所用計量單位,含義為平均每秒執行多少百萬條指令
峰值MIPS:選取一組指令組合,使得到的平均CPI最小
相對MIPS:根據某個公認的參考機型來定義相應的MIPS值
MIPS反應了機器執行定點指令的速度,但是,用MIPS來對不同機器進行性能比較有時是不准確或是不客觀的。因為不同機器指令集不同,而且指令的功能也不同,同樣的指令條數完成的功能可能完全不同,不同機器的CPI和時鍾周期也不同,同一條指令在不同機器上所用的時間也不同。