計算機系統概述
現代計算機的原型
馮·諾依曼
1946年,普林斯頓高等研究院(the Institute for Advance Study at Princeton,IAS )開始設計“存儲程序”計算機,被稱為IAS計算機.
- 馮·諾依曼結構最重要的思想是“存儲程序(Stored-program)”
- 工作方式:
- 任何要計算機完成的工作都要先被編寫成程序,然後將程序和原始 數據送入主存並啟動執行。一旦程序被啟動,計算機應能在不需操 作人員幹預下,自動完成逐條取出指令和執行指令的任務。
- 馮·諾依曼結構計算機也稱為馮·諾依曼機器(Von Neumann Machine)。
- 幾乎現代所有的通用計算機大都采用馮·諾依曼結構,因此,IAS計 算機是現代計算機的原型機。
馮·諾依曼結構是怎樣的?
- 有主存,用來存 放程序和數據
- 一個自動逐條取 出指令的部件
- 具體執行指令 (即運算)的部件
- 程序由指令構成
- 指令描述如何對數據進 行處理
- 將程序和原始數 據輸入計算機的部件
- 將運算結果輸出 計算機的部件
馮·諾依曼結構的主要思想
- 計算機應由運算器、控制器、存儲器、輸入設備和輸出設備 五個基本部件組成。
- 各基本部件的功能是:
- 存儲器不僅能存放數據,而且也能存放指令,形式上兩者 沒有區別,但計算機應能區分數據還是指令;
- 控制器應能自動取出指令來執行;
- 運算器應能進行加/減/乘/除四種基本算術運算,並且也 能進行一些邏輯運算和附加運算;
- 操作人員可以通過輸入設備、輸出設備和主機進行通信。
- 內部以二進制表示指令和數據。每條指令由操作碼和地址碼 兩部分組成。操作碼指出操作類型,地址碼指出操作數的地 址。由一串指令組成程序。
- 采用“存儲程序”工作方式。
現代計算機結構模型
CPU:中央處理器;PC:程序計數器;
MAR:存儲器地址寄存器 ALU:算術邏輯部件;
IR:指令寄存器;MDR:存儲器數據寄存器 GPRs:通用寄存器組(由若幹通用寄存器組成,早期就是累加器)
計算機的執行過程
程序在執行前
- 數據和指令事先存放在存儲器中,每條指令和每個數據都有地址, 指令按序存放,指令由OP(操作碼)、ADDR(地址碼)字段組成,程序起始地址置PC
開始執行程序
- 第一步:根據PC取指令
- 第二步:指令譯碼
- 第三步:取操作數
- 第四步:指令執行
- 第五步:回寫結果
- 第六步:修改PC的值
- 繼續執行下一條指令
簡單的流程圖:
指令和數據
程序啟動前,指令和數據都存放在存儲器中,形式上沒有差別, 都是0/1序列 • 采用”存儲程序“工作方式: – 程序由指令組成,程序被啟動後,計算機能自動取出一條一條 指令執行,在執行過程中無需人的幹預。 • 指令執行過程中,指令和數據被從存儲器取到CPU,存放在CPU 內的寄存器中,指令在IR中,數據在GPR中。 指令中需給出的信息: 操作性質(操作碼) 源操作數1 或/和 源操作數2 (立即數、寄存器編號、存儲地址) 目的操作數地址 (寄存器編號、存儲地址) 存儲地址的描述與操作數的數據結構有關!
計算機的基本組成與基本功能
計算機的基本部件及功能:
- 運算器(數據運算):ALU、GPRs、標誌寄存器等
- 存儲器(數據存儲):存儲陣列、地址譯碼器、讀寫控制電 路
- 總線(數據傳送):數據(MDR)、地址(MAR)和控制線
- 控制器(控制):對指令譯碼生成控制信號
計算機實現的所有任務都是通過執行一條一條指令完成的
程序開發和執行過程
程序開發
機器語言編寫程序
用機器語言編寫程序,並記錄在紙帶或卡片上
輸入:按鈕、開關;
輸出:指示燈等 所有信息都 是0/1序列!
機器語言編寫程序不僅難讀,難寫而且非常不靈活.
用匯編語言開發程序
若用符號表示跳轉位置和變量位置,是否簡化了問題?
• 於是,匯編語言出現
– 用助記符表示操作碼
– 用標號表示位置
– 用助記符表示寄存器
用匯編語言編寫的優點是: 不會因為增減指令而需要修改其他指令 不需記憶指令編碼,編寫方便 可讀性比機器語言強
不過,這帶來新的問題,是什麽呢?
人容易了,可機器不認識這些指令了.
需將匯編語言轉 換為機器語言! 我們用匯編程序作為中介進行轉換
進一步認識機器級語言
匯編語言(源)程序由匯編指令構成
• 用一句話描述什麽是匯編指令
– 用助記符和標號來表示的指令(與機器指令一一對應)
• 指令又是什麽呢?
– 包含操作碼和操作數或其地址碼
(機器指令用二進制表示,匯編指令用符號表示)
– 只能描述:取(或存一個數)
兩個數加(或減、乘、除、與、或等)
根據運算結果判斷是否轉移執行
• 想象用匯編語言編寫復雜程序是怎樣的情形?
(例如,用匯編語言實現排序(sort)、矩陣相乘)
– 需要描述的細節太多了!程序會很長很長!而且在不同
結構的機器上就不能運行!
機器語言和匯編 語言都是面向機 器結構的語言, 故它們統稱為機 器級語言
結論:用匯編語言比機器語言好,但是,還是很麻煩!
用高級語言開發程序
高級編程語言
- 它們與具體機器結構無關
- 面向算法描述,比機器級語言描述能力強得多
- 高級語言中一條語句對應幾條、幾十條甚至幾百條指令
- 有“面向過程”和“面向對象”的語言之分
- 處理邏輯分為三種結構 • 順序結構、選擇結構、循環結構
- 有兩種轉換方式:“編譯”和“解釋”
- 編譯程序(Complier):將高級語言源程序轉換為機器級目 標程序,執行時只要啟動目標程序即可
- 解釋程序(Interpreter ):將高級語言語句逐條翻譯成機器 指令並立即執行,不生成目標文件
程序執行
一個典型程序的轉換處理過程
經典的“ hello.c ”C-源程序
#include <stdio.h> int main() { printf("hello, world\n"); }
Hello程序的數據流動過程
數據經常在各存儲部件間傳送。故現代計算機大多采用“緩存”技術
所有過程都是在CPU執行指令所產生的控制信號的作用下進行的
不同層次語言之間的等價轉換
開發和運行程序需什麽支撐?
用高級語言開發程序需要復雜的支撐環境(怎樣的環境?)
- 需要編輯器編寫源程序
- 需要一套翻譯轉換軟件處理各類源程序
- 編譯方式:預處理程序、編譯器、匯編器、鏈接器
- 解釋方式:解釋程序
- 以上稱為語言處理程序
- 需要一個可以執行程序的界面(環境)
- GUI方式:圖形用戶界面
- CUI方式:命令行用戶界面
語言處理程序+人機接口+操作系統+操作系統內核+語言的運行時系統+指令集體系結構+計算機硬件
支撐程序開發和運行的環境由系統軟件提供
最重要的系統軟件是操作系統和語言處理系統
語言處理系統運行在操作系統之上,操作系統利用指令管理硬件
計算機系統層次結構
早期計算機系統的層次
最早的計算機用機器語言編程
機器語言稱為第一代程序設計語言
匯編語言編程
匯編語言編程
現代(傳統)計算機系統的層次
現代計算機用高級語言編程
- 第三代程序設計語言(3GL)為過程式 語言,編碼時需要描述實現過程,即“ 如何做”。
- 第四代程序設計語言(4GL) 為非過程 化語言,編碼時只需說明“做什麽”, 不需要描述具體的算法實現細節。
語言處理系統包括:各種語 言處理程序(如編譯、匯編、 鏈接)、運行時系統(如庫 函數,調試、優化等功能)
操作系統包括人機交互界面、 提供服務功能的內核例程
可以看出:語言的發展是一 個不斷“抽象”的過程,因 而,相應的計算機系統也不 斷有新的層次出現
計算機系統抽象層的轉換
功能轉換:上層是下層的抽象,下層是上層的實現 底層為上層提供支撐環境!
計算機系統的不同用戶
最終用戶工作在由應用程序提供的最上面的抽象層
系統管理員工作在由操作系統提供的抽象層
應用程序員工作在由語言處理系統(主要有編譯器和匯編器)的抽象層
語言處理系統建立在操作系統之上
系統程序員(實現系統軟件)工作在ISA層次,必須對ISA非常了解
編譯器和匯編器的目標程序由機器級代碼組成
操作系統通過指令直接對硬件進行編程控制ISA處於軟件和硬件的交界面(接口)
ISA是對硬件的抽象所有軟件功能都建立在ISA之上
指令集體系結構(ISA)
SA指Instruction Set Architecture,即指令集體系結構,有時 簡稱為指令系統
- •ISA是一種規約(Specification),它規定了如何使用硬件
- –可執行的指令的集合,包括指令格式、操作種類以及每種操作對應的 操作數的相應規定;
- – 指令可以接受的操作數的類型;
- – 操作數所能存放的寄存器組的結構,包括每個寄存器的名稱、編號、 長度和用途;
- – 操作數所能存放的存儲空間的大小和編址方式;
- – 操作數在存儲空間存放時按照大端還是小端方式存放;
- – 指令獲取操作數的方式,即尋址方式;
- – 指令執行過程的控制方式,包括程序計數器(PC)、條件碼定義等。
- ISA在通用計算機系統中是必不可少的一個抽象層,
- – 沒有它,軟件無法使用計算機硬件!
- – 沒有它,一臺計算機不能稱為“通用計算機”
ISA和計算機組成(微結構)之間的關系
ISA是計算機 組成的抽象
不同ISA規定的指令集不同,
如,IA-32、MIPS、ARM等 計算機組成必須能夠實現ISA規定的功能,如提供GPR、標誌、運算電路等 同一種ISA可以有不同的計算機組成,
如乘法指令可用ALU或乘法器實現
計算機系統概述