第四章
DESCRIPTION
第四章. MARIE: 簡易型電腦. 第四章 教學目的. 學習現今電腦的一些基本組成元件 . 能夠說明這些基本元件對程式執行的影響 . 了解本書所提供的簡易型架構 , 以及此架構跟真正電腦的差別 . 知道程式如何起運作. 4.1 簡介. 第一章介紹了電腦系統的基本概念 . 在第二章中 , 我們討論了不同的電腦系統是如何儲存和處理資料的 . 第三章描述了數位電路的基本元件 . 有了這些基礎以後 , 現在我們知道了電腦的元件是如何運行 , 以及它們是如何配合來讓電腦系統為我們所用. 4.1 簡介. - PowerPoint PPT PresentationTRANSCRIPT
第四章MARIE: 簡易型電腦
2
第四章 教學目的
• 學習現今電腦的一些基本組成元件 .
• 能夠說明這些基本元件對程式執行的影響 .
• 了解本書所提供的簡易型架構 , 以及此架構跟真正電腦的差別 .
• 知道程式如何起運作 .
3
4.1 簡介
• 第一章介紹了電腦系統的基本概念 .• 在第二章中 , 我們討論了不同的電腦
系統是如何儲存和處理資料的 .• 第三章描述了數位電路的基本元件 .• 有了這些基礎以後 , 現在我們知道了
電腦的元件是如何運行 , 以及它們是如何配合來讓電腦系統為我們所用 .
4
4.1 簡介
• 電腦的 CPU 會擷取 , 解碼 , 執行程式指令 .
• CPU 的二個主要部份為資料路徑 (datapath)和 控制單元 (control unit)
– datapath 是由算術邏輯單元 (arithmetic-logic unit) 和儲存單元 (storage units (registers)) 所組成 , 它們之間是由資料匯流排所連接 , 同時也連接主記憶體 .
– CPU 中的元件透過控制單元的信號來產生對應的動作 .
5
4.1 簡介
• 暫存器內的資料可供 CPU 存取 .
• 暫存器可以用 D 型正反器來製作 .– 32-bit 的暫存器需要 32 個 D 型正反器 .
• 算術邏輯單元負責執行 (ALU) 控制單元指定的邏輯和算術運算 .
• 控制單元根據程式計數暫存器和狀態暫存器來決定要發出怎麼樣的控制信號 .
6
4.1 簡介
• CPU 會藉由資料匯流排來和其它系統共享資料 .– 匯流排是一組導線 , 每一導線同一時間可以傳輸
一個 bit.• 通常電腦系統的匯流排有二種 : 點對點 (point-
to-point) 以及多點 (multipoint).
這是一個 point-to-point 匯流排組態 :
7
• 匯流排是由資料線 , 控制線 , 以及位址線 .
• 控制線會在資料線從某裝置傳送資料到另一裝置時 , 控制資料流的方向 , 並且控制何時那個裝置能存取匯流排 .
• 位址線會決定資料的來源或目的位置 .
4.1 簡介
下張投影片會介紹匯流排組態的模型 .
8
4.1 簡介
9
• 下面是一個多點匯流排 .• 因為多點匯流排是資源共享的方式 , 所以要
透過協定來控制存取的權力 , 這是建置在硬體內的 .
4.1 簡介
10
4.1 簡介
– 自測分散式 (Distributed using self-detection): 裝置間自己決定誰可以拿到匯流排使用權 .
– 碰撞偵測分散式 (Distributed using collision-detection): 任何裝置都可提出使用需求 . 如果資料發生碰撞 , 就重新再試一次 .
– 菊鏈 (Daisy chain): 使用權是從高優先權傳到低優先權的裝置 .
– 集中平行式 (Centralized parallel): 每個裝置直接連接到仲裁電路 .
• 在主 - 從式組態中 , 會有超過一個的匯流排主控者 , 這時需要一個仲裁來決定那個裝置可以使用匯流排 .
• 匯流排仲裁有四種主要的分類 :
11
4.1 簡介
• 每一部電腦至少都有一個用來維持其元件之間同步的時脈 .
• 每次資料搬移或計算都要固定的時脈週期數 .
• 時脈頻率是以 megahertz 或 gigahertz 計算 , 它決定了所有運算的速度快慢 .
• 時脈週期時間是時脈頻率的倒數 .– 800 MHz 的時脈其時脈週期為 1.25 ns.
12
4.1 簡介
• 時脈速度和 CPU 的效能不能混為一談 .• 一個程式執行所需的 CPU time 為 :
– 我們可以看到 , 當我們減少程式的指令個數 , 每個指令的週期數目 , 或是時脈週期的長度 , 都可以增進 CPU 的產能 .
我們會在後面的章節回過頭來探討這個問題 .
13
4.1 簡介
• 電腦會透過輸出入 (I/O) 子系統和外界溝通 .• I/O 裝置會經由不同的介面和 CPU 連接 .• I/O 可以是記憶體映射 (memory-mapped)–
就是說可以將 I/O 裝置視為主記憶體一樣 .• 或是可以將 I/O 視為指令導向方式
(instruction-based), 那 CPU 就會有特殊的I/O 指令集 .
我們會在第七章學習 I/O 的細節 .
14
4.1 簡介
• 電腦的記憶體是由一個線性的可定址儲存空間所組成 , 有點類似暫存器 .
• 記憶體可以是 byte-addressable, 或 word-addressable, 一個 word 通常由二或多個 bytes 所組成 .
• 記憶體是由 RAM晶片所構成 , 通常會說成length width.
• 如果某記憶體的 word大小是 16 bits, 那一個 4M 16 的 RAM晶片就有 4 百萬個 16-bit 大小的記憶體空間 .
15
4.1 簡介
• 電腦要如何存取某特定的記憶體空間呢 ?• 我們可看出 4M 可以表示成 2 2 2 20 = 2 22
個字組 .• 記憶體的位置可以從 0 編號到 2 22 -1.• 因此 , 這個系統的記憶體匯流排至少要 22條
address 位址線 .– 位址線以二進制從 0 “ 數到” 222 - 1. 每條線不
是 “ on” 就是 “ off”, 這樣就可以指出所要的記憶體元素 .
16
4.1 簡介
• 實體記憶體通常會使用超過一個 RAM晶片 .• 當記憶體位址是以 bank交錯在不同晶片上的
方式來組織時 , 存取會比較有效率• 在 low-order交錯方式中 , 位址的 low order
bits 是用來選擇那個 bank.• 因此 , 在 high-order交錯方式中 , 位址的
high order bits 就是用來指出是那個 bank.
下一張投影片會介紹這二種方法 .
17
4.1 簡介
Low-Order 交錯
High-Order 交錯
18
4.1 簡介
• 當有一個高優先權的事件發生時 , 一般程式的執行會被停止 . CPU 會透過中斷來轉移到某個事件 .
• 中斷可以是 I/O請求 , 算術錯誤 (像是除 0), 或是執行到一個未定義的指令 .
• 每個中斷都有相對應的處理程序 , 它會告訴 CPU該如何處理所發生的中斷 . – 不可遮罩中斷有高優先權 , 不可被忽略 .
19
4.2 MARIE
• 我們現在要用一個簡易型的電腦將之前討論的一些觀念作個整理 .
• 這部電腦名為 the Machine Architecture that is Really Intuitive and Easy, MARIE 的用途只是用來介紹電腦系統的基本概念 .
• 雖然這個系統很簡單 , 但是它有助於更深入的去了解一些更複雜的系統架構 .
20
4.2 MARIE
MARIE 架構有下列特性 :• 二進制 , 2補數的資料表示 .• 內儲程式 , 指令和資料字組長度固定 .• 4K words 的 word-addressable 主記憶體 .• 16-bit 資料字組 .• 16-bit 指令 , 4 位元的 opcode 和 12 位元的
位址• 16-bit 算術邏輯單元 (ALU).• 七個暫存器 , 作為控制和資料的搬移 .
21
4.2 MARIE
MARIE 的七個暫存器 :
• 累加器 , AC, 為一 16-bit 暫存器 , 存有狀態運算子 ( 就是 , “less than”小於 ) 或是有二個運算元指令中的一個運算元 .
• 記憶體位址暫存器 , MAR, 為一 12-bit 暫存器 , 存有指令或是運算元的記憶體位址 .
• 記憶體緩衝暫存器 , MBR, 為一 16-bit 暫存器 存著從記憶體或是要放到記憶體的資料 .
22
4.2 MARIE
MARIE 的七個暫存器 :
• 程式計數器 , PC, 為一 12-bit 暫存器 , 內有下一個要執行指令的位址 .
• 指令暫存器 , IR, 馬上要執行的指令 .
• 輸入暫存器 , InREG, 一個 8-bit 暫存器 , 內有從輸入裝置讀入的資料 .
• 輸出暫存器 , OutREG, 一個 8-bit 暫存器 , 裡面是準備要送到輸出裝置的資料 .
23
4.2 MARIE
MARIE 架構的方塊圖 .
24
4.2 MARIE
• 暫存器是連接著的 , 而且是經由通同的資料匯流排和主記憶體相連 .
• 匯流排上的每個裝置都有唯一的識別號碼 , 當裝置要進行某種動作時 , 就會去設定控制線以取得匯流排的使用權 .
• 累加器和記憶體緩衝暫存器之間 , 還有 ALU和累加器和記憶體緩衝暫存器之間都有獨立的連接 .
• 這樣一來 , 資料在這些裝置間搬移時就不需要用到主資料匯流排 .
25
4.2 MARIE
MARIE 的資料路徑方塊圖 .
26
4.2 MARIE
• 電腦的指令集架構 instruction set architecture (ISA) 苗述了指令的格式和機器所能執行的最基本動作 .
• ISA 是電腦軟體和硬體之間的介面 .
• 某些 ISA 含有好幾百種不同的只令 .
• MARIE 的 ISA 只有 13 個指令 .
27
4.2 MARIE
• 右邊為 MARIE 的指令 :
• 基本的 MARIE 指令有 :
28
4.2 MARIE
• 這是 LOAD 指令在 IR 的位元樣式 :
• 我們可以看到 opcode 為 1, 而且要載入資料的位址為 3.
29
4.2 MARIE
• 這是 SKIPCOND 指令在 IR 的位元樣式 :
• 我們可以看到 opcode 為 8, 而 bits 11 and 10 是 10, 這表示如果 AC 內的值大於 0 的話 , 那下一個指令就會跳過不做 .這個指令的十六進制表示為何 ?
30
4.2 MARIE
• 其實每個指令都是有一連串的小指令所構成 , 這些小指令稱為微指令 (microoperations).
• 指令所執行的微指令可以用暫存器轉移語言register transfer language (RTL) 來表示 .
• 在 MARIE 的 RTL, 我們用 M[X] 來表示資料存在記憶體 X 的位置 , 而 表示將位元組資料搬到暫存器或是記憶體位置 .
31
4.2 MARIE
• LOAD 指令的 RTL 為 :
• 同樣地 , ADD 指令的 RTL 為 :
MAR XMBR M[MAR]AC AC + MBR
MAR XMBR M[MAR], AC MBR
32
4.2 MARIE
• 回想一下 , SKIPCOND 會根據 AC 的執來決定要不要跳過下一個指令 .
• 這個指令的 RTL 是最複雜的 :If IR[11 - 10] = 00 then
If AC < 0 then PC PC + 1else If IR[11 - 10] = 01 then
If AC = 0 then PC PC + 1else If IR[11 - 10] = 11 then
If AC > 0 then PC PC + 1
33
4.3 指令的處理
• 擷取 - 解碼 - 執行 週期 (fetch-decode-execute cycle) 是電腦執行程式所進行的步驟 .
• 我們一開始要從記憶體 fetch 一個 instruction, 然後放到 IR.
• 一放到 IR, 這個指令馬上就會被 decoded, 看下一步需要做什麼 .
• 如果是要存取某個記憶體 ( 運算元 ) 的值 , 就會被取出放到 MBR.
• 都各就各位後 , 指令就會被執行 .
下一張投影片會介紹這個流程 .
34
4.3 指令的處理
35
• 給定下列的 MARIE 程式 . 我們列出位址100 - 106 (hex) 的助憶碼和二元樣式 :
4.4 一個簡單的程式範例
36
• 我們檢示一下當程式執行時電腦內部發生了什麼事 .
• 這是一個 LOAD 104 指令 :
4.4 一個簡單的程式範例
37
• 第二個指令為 ADD 105:
4.4 一個簡單的程式範例
38
4.5 組譯器的探討
• 助憶碼 , 就像 LOAD 104, 對人來說很容易寫也很容易了解 .
• 但電腦是不可能了解這樣的指令 .• 組譯器 (Assemblers) 將人類容易了解指
令表示方式翻譯成電腦了解的機器語言 .– 我們要注意組譯器和編譯器的差別 : 在組
合語言來說 , 助譯指令和機器碼之間有一對一的關係 . 對編譯器來說則不一定 .
39
4.5 組譯器的探討
• 組譯器會讀取助憶原始碼二次 , 進而產生目的程式檔 (object program file).
• 在第一次讀取時 , 組譯器會盡可能將程式組譯出來 , 同時也產生一個符號表 (symbol table), 它記載著程式中所有符號的記憶體參照位址 .
• 在第二次讀取時 , 就會利用符號表的值來完成所有的指令組譯 .
40
4.5 組譯器的探討
• 試想我們的範例程式 (上面 ). – 注意到我們包含了 HEX
和 DEC 來標明常數的基底為何 .
• 讀第一次時 , 我們建出符號表 , 及部份的指令 .
41
4.5 組譯器的探討
• 第二次讀完後 , 就組譯完成了 .
42
4.6 擴充我們的指令集
• 到目前為止 , 我們所討論的 MARIE 指令都是直接定址模式 ( direct addressing mode).
• 這表示運算元的位址都是直接寫在指令中的 .
• 有時候間接定址法 (indirect addressing) 會比較有用 , 間接定址法意思就是說運算元位址的位址 .
– 如果你用過程式中的指標 , 那你對間接位址就已經很熟悉了 .
43
4.6 擴充我們的指令集
• 為了幫助你了解在機器層級發生了什麼事 , 我們在 MARIE 指令集中加入間接定址模式 .
• ADDI 指令就是放了指向運算元位址的位址 . 下面的 RTL告訴我們在暫存器層級的意義 :
MAR XMBR M[MAR]MAR MBR MBR M[MAR]AC AC + MBR
44
4.6 擴充我們的指令集
• 另一個有用的程式寫作工具就是subroutines.
• jump-and-store 指令 , JNS, 提供了某種程度的 subroutine 功能 . JNS 指令的細節就如下 RTL:
MBR PCMAR XM[MAR] MBRMBR X AC 1 AC AC + MBRAC PC
JNS 能夠遞迴嗎 ?
45
4.6 擴充我們的指令集
• 最後一個有用的指令是 CLEAR.
• 它只是將累加器清為 .
• 這是 CLEAR 的 RTL:
• 下一張投影片中 , 我們用一個例子來包含這些新介紹的指令 .
AC 0
46
4.6 擴充我們的指令集
100 | LOAD Addr101 | STORE Next102 | LOAD Num103 | SUBT One
104 | STORE Ctr105 | CLEAR 106 |Loop LOAD Sum 107 | ADDI Next108 | STORE Sum
109 | LOAD Next
10A | ADD One10B | STORE Next
10C | LOAD Ctr 10D | SUBT One
10E | STORE Ctr 10F | SKIPCOND
000110 | JUMP Loop111 | HALT112 |Addr HEX 118113 |Next HEX 0114 |Num DEC 5115 |Sum DEC 0116 |Ctr HEX 0117 |One DEC 1118 | DEC 10119 | DEC 1511A | DEC 2 11B | DEC 2511C | DEC 30
47
4.7 解碼的探討
• 電腦的控制單元讓內部的運作保持同步 , 確保資料流在正確的時間到達正確的元件 .
• 控制單元有二種實作方式 : 硬體接線式(hardwired) 和微程式 (microprogrammed) 控制 . – 以微程式控制來說 , 在微控制器中會有一個唯讀
記憶體 , 裡面有一個小型的程式 .– 硬體接線式則是用數位邏輯元件來組成這個程
式 .
48
4.7 解碼的探討
• 以硬體接線式來說 , 我們的簡易型系統需要一個 4-to-14 解碼器來解 .
• 右邊的方塊圖就是硬體接線控制單元的一般組態 .
49
4.7 解碼的探討
• 在微程式控制中 , 控制是存在 ROM, PROM 或 EPROM裡面 .
50
4.8 實際的架構
• MARIE 擁有很多現今架構的特睜 , 但是它離實際的電腦還有一段距離 .
• 後面的投影片我們要看二個實際的機器架構 . • 我們會介紹 Intel 架構 , 它是 CISC 的機器 .
另一個是 MIPS, 它是一個 RISC.– CISC 是 complex instruction set computer 的簡
寫 .– RISC 代表 reduced instruction set computer.
我們會在第九章深入比較 “ RISC” 和 “ CISC”.
51
4.8 實際的架構
• 最經典的 Intel 架構 , 8086, 創於 1979 年 . 為 CISC 架構 .
• IBM 以此為 CPU 在 1981年發表了著名的 .
• 8086 有 16-bit 的 data 字組 , 並支援 20-bit 記憶體位址 .
• 沒多久 , 出現了簡單的廉價版 8-bit 8088. 它像 8086 一樣也用 20-bit 記憶體位址 .
8086 所能定址的最大記憶體空間為何 ?
52
4.8 實際的架構
• 8086 有四個 16-bit 通用暫存器 , 這四個暫存器可以以半個字組的方式存取 .
• 它也有一個旗標暫存器 , 一個指令暫存器 , 和一個透過基底指標和堆疊指標二個暫存器存取值的堆疊 .
• 8086 內沒有浮點運算處理 .
• 在 1980 年 , Intel 發表了 8087 數值協同處理器 , 因為價格的關係 , 沒有多少人使用 .
53
4.8 實際的架構
• 1985, Intel 發表 32-bit 的 80386.• 一樣沒有內建浮點運算單元 .• 80486 發表於 1989, 是在 80386加上 that
had built-in浮點運算和 cache 記憶體 .• 80386 和 80486 能和 8086 和 8088相容 .• 用較小字組系統寫的軟體就用 32-bit 暫存器
的低位元部份 .
54
4.8 實際的架構
• 目前來說 , Intel最先進的 32-bit 微處理器就是 Pentium 4.
• 其速度有 3.06 GHz. 這個時脈速度比 8086快了超過 350 倍以上 .
• 提昇速度的方法包括了多層次 cache 和指令管線化 .
• Intel, 和許多其它 CISC微處理器 , 都使用了很多 RISC 架構的觀念 .
55
4.8 實際的架構
• MIPS 家族的 CPUs 曾是這類 CPU 中最成功的 .
• 第一個 MIPS CPU 在 1986 發表 .• 它的字組大小為 32-bit, 可定址的記憶體空
間為 4GB.• 過了幾年 , MIPS 處理器被用在通用型電腦
和遊戲機中• MIPS 架構現在有 32- 和 64-bit 版本 .
56
4.8 實際的架構
• MIPS 第一個 RISC微處理器之一 .• 最原始的 MIPS 架構有 55 個不同的指令 ,
8086 則超過了 100 個 .• MIPS 設計的初衷就是效能 : 它是
load/store 架構 , 表示只有 load 和 store指令可以存取記憶體 .
• MIPS 架構中大量的暫存器 , 減少了匯流排的傳輸量 .
這樣的設計是如何影響效能的 ?
57
• 電腦系統的主要元件為 控制單元 , 暫存器 , 記憶體 , ALU, 和資料路徑 .
• 內部的時脈讓電腦內部所有事能保持同步 .
• 控制單元可以是微程式或是 .
• 硬體接線式的效能比較好 , 而微程式可適性比較好 , 容易改變 .
結論
58
• 電腦透過不斷的 fetch-decode-execute 週期來執行程式 .
• 電腦只能執行機器語言模式的程式 .
• 組譯器將助譯碼翻譯成機器語言 .
• Intel 架構是 CISC; MIPS 則是 RISC architecture.
結論
59
End of Chapter 3