計算機組成原理 第3版 筆記

第1、2章 概論

計算機系統簡介

計算機系統軟硬件概念

計算機系統由硬件和軟件兩大部分組成,計算機性能的好壞取決於軟硬件功能的總和。

  • 硬件:計算機的實體部分
  • 軟件:事先編制好的具有各類特殊功能的程序組成
  • 系統軟件:用來管理整個計算機系統,監視服務,使系統資源得到合理調度,高效運行。
  • 應用軟件:用戶根據任務需要所編制的各種程序。

計算機系統層次結構

虛擬機器:並不是實際存在的機器

  • 高級語言機器M4:用編譯程序翻譯成匯編語言程序
  • 匯編語言機器M3:將匯編語言翻譯成機器語言。
  • 操作系統機器M2:由操作系統軟件構成,用機器語言解釋操作系統,提供瞭在匯編語言和高級語言的使用好的實現過程中所需的基本操作,控制並管理計算機系統的全部硬件和軟件資源。

實際機器:也就是實際存在的機器

  • 傳統機器M1:執行機器語言程序
  • 微程序機器M0:將M1中的每一條機器指令翻譯成一組微指令,即構成一個微程序,然後執行。

計算機組成和計算機體系結構

計算機體系結構:能夠被程序員所看見的計算機系統的屬性。站在不同層次上編程的程序員所看見的計算機的屬性各不相同。 計算機組成:指如何實現計算機體系結構所體現的屬性。

計算機的基本組成

馮諾依曼計算機

數學傢馮諾依曼體現出來瞭“存儲程序”的概念,以此概念設計的各類計算機通稱馮諾依曼機,有以下特點:

  • 由運算器、存儲器、控制器、輸入設備、輸出設備五部分構成。
  • 指令和數據以同等低位存放在存儲器內,並可以按地址尋訪。
  • 指令和數據用二進制數表示。
  • 指令有操作碼和地址碼組成。操作碼——表示操作性質,地址碼——操作數存放在存儲器的位置
  • 指令在存儲器內順序存放。
  • 機器以運算器為中心,輸入和輸出設備之間的數據傳輸通過運算器完成。

計算機硬件框圖

經典的馮諾依曼計算機以運算為中心

現代計算機以存儲器為中心

計算器各部件功能:

  • 運算器:完成算術運算,並存放運算的中間結果
  • 存儲器:存儲數據和程序
  • 控制器:用來控制、指揮程序和數據的輸入、運行以及處理運算結果
  • 輸入設備:將人們熟知的信息形式轉換為機器能識別的信息形式,如鍵盤、鼠標
  • 輸出設備:將機器運算結果轉換為人們熟悉的信息形式

計算機以上五個部件都在控制器的統一指揮下,有條不紊的工作。由於運算器和控制器在邏輯關系和電路結構上聯系十分緊密,往往集成在同一芯片,合稱中央處理器CPU。現代計算機可以認為由三部分組成:CPU、I/O設備及主存儲器。其中CPU和主存可以合稱主機,IO設備稱為外部設備。結構如如下:

五大組成部件

主存儲器

  • 存儲器M:存儲器由許多存儲單元構成,每個存儲單元包含若幹存儲元件,每個存儲元件能存儲一位二進制代碼,故每個存儲單元能存儲一串二進制代碼,這個二進制代碼長度稱為存儲字長,給每個存儲單元一個編號,稱為地址號。
  • 存儲器地址寄存器MAR(Memory Address Resgister):存放要訪問的存儲單元的地址,位數對應存儲單元個數。
  • 存儲器數據寄存器MDR(Memory Data Resgister):存放從存儲單元取出的 或者 存入某存儲單元的代碼。

隨著硬件技術發展,主存制成大規模集成電路芯片,MAR和MDR集成在CPU中。 運算器 最少包含一個算術邏輯單元(ALU)和 3個寄存器:累加器ACC(Accumulator)、乘商寄存器MQ(Multiplier-Quotient Resgister)、操作數寄存器 X。

控制器 工作過程為 取指階段、分析階段、執行階段,由以下部分組成:

  • 程序計數器PC(Program Counter):存放將要執行的指令的地址,和MAR之間存在通路。
  • 指令寄存器IR(Instruction Register):存放當前指令,來之MDR。
  • 控制單元CU:分析指令操作,發送微操作命令序列。

I/O 包括IO設備和響應接口,IO設備通過IO接口和主機聯系,接收CU控制命令,完成對應操作。

計算機硬件技術指標

  • 機器字長:CPU一次能處理數據的位數。
  • 存儲容量
  • 運算速度:采用吉普森法,綜合考慮每條指令操作時間及在全部操作的占比,現在普遍采用MIPS(百萬條指令每秒)、CPI(執行一條指令所需時鐘周期)、FLOPS(浮點數運算次數每秒)。

全書章節關系,如下圖:

第3章 系統總線

3.1 總線基本概念

計算機系統部件之間互連方式

  • 分散連接:個部件之間采用單獨的連線
  • 總線連接:將各部件連到一組公共的信息傳輸線

總線是各部件共享的傳輸介質,在某一時刻隻允許最多一個部件發送信息,而多個部件可以同時從總線接收信息。

現代計算機采用各類總線結構

  • 以CPU為中心的雙總線結構:便於增刪IO設備,但是IO設備和主存交換信息會占用CPU。
  • 單總線結構:IO設備和主存交換信息時,原則上不會占用CPU,但是隻有一組總線,影響整機工作速度。
  • 以存儲器為中心雙總線結構:在單總結基礎上,在CPU和主存之間開辟一條存儲總線。

3.2 總線分類

按照連接部件不同,可分為三類

  • 片內總線:芯片內部的總線,如在CPU芯片內部,寄存器和寄存器、寄存器和ALU之間通過片內總線連接。
  • 系統總線:系統總線是指CPU、主存、IO設備各部件之間的信息傳輸線,按照傳輸的信息不同有可以分為三類:
  • 數據總線:傳輸各部件之間的數據信息,是雙向傳輸線。
  • 地址總線:由CPU輸出,單向傳輸。
  • 控制總線:發出各種控制信號的傳輸線。
  • 通信總線:用與計算機系統與計算機系統、其他系統之間的通信,並行通信適宜與近距離通信,串行通信適宜與遠距離通信。

3.3 總線結構

3.3.1 單總線結構

所有設備都掛在一組總線上。結構簡單,易於擴充,但是所有傳輸都通過共享總線,極易形成計算機系統瓶頸,多被小型或微型計算機采用。

3.3.2 多總線結構

  • 雙總線結構:將速度較低的IO設備從單總線上分離出來,形成主存總線和IO總線分開的結構。

be03fd8de7e02a1efb31120ff4c578d3

  • 三總線結構(1):將速率不同的IO設備進行分類,連接到不同通道上。DMA總線用於高速IO設備與主存直接交換信息。任一時刻隻能使用一種總線。
  • 三總線結構(2):處理器與Cache之間有一條局部總線,將CPU與Cache或與更多設備連接。
  • 四總線結構:增加高速總線,在高速總線上接掛瞭一些高速IO設備

3.3.3 總線結構舉例

傳統微型計算機總線結構 高速和低速IO都掛接在ISA或EISA總線上,並通過總線控制器與系統總線相連,勢必出現總線數據傳輸瓶頸。

VL-BUS局部總線結構 為瞭消除以上總線結構瓶頸問題,將高速、高性能外設盡量靠近CPU本身總線,並對CPU同步或準同步;局部總線VL-BUS相當於在CPU和高速IO之間架上瞭高速通道。

PCI總線結構 VL-BUS是一種早期總線技術,並且由於以上的總線結構中CPU和VL-BUS過於緊密(VL-BUS是一種本地總線,直接連接到CPU的主板插槽上),由於VL-BUS有工作頻率限制,很難支持功能更強的CPU(VL-BUS需要和CPU同步),由此出現瞭PCI總線結構;CPU總線與PCI總線相互隔離,具有更高靈活性,可以支持更多高速設備,具有即插即用的特性。

3.4 總線控制

3.4.1 總線判優控制

總線上連接的各類設備按照對總線的控制功能分為:主設備(有控制權)、從設備(隻能響應主設備發來的總線命令)。 當多個設備同時使用總線時,就由總線控制器的判優邏輯按照一定優先等級確定哪個主設備能能使用總線。總線判優控制分為:

  • 集中式(將控制邏輯集中到某一處)
  • 分佈式(控制邏輯分散在與總線相連的各個部件上)

常見的集中控制優先仲裁方式有以下三種:

  • 鏈式查詢:3根線用於總線控制(BS總線忙,BR總線請求,BG總線同意),如果BG到達的接口有總線請求,就不再往下傳,而是建立BS信號,離總線控制部件最近的部件具有最高優先級。隻需很少幾根線就能實現總線判優控制,易於擴充設備,但對電路故障很敏感,優先級低的設備很難獲得請求,2條線確定總線使用權。
  • 計數器定時查詢:少瞭總線同意線BG,多瞭設備地址線。總線控制部件,在收到總線請求信號後(總線空閑),啟動計數器(可以設定初始值,計數也可以從上次計數終點開始,是一種循環方法,此時各設備優先級相同),並通過設備地址線向各設備發送地址信號,當地址信號和請求占用總線涉筆地址值一致時,獲得總線控制權,停止計數。優先級次序可以改變,對電路故障不如鏈式查詢方式敏感,但是增加瞭控制線數,控制也較復雜,$lceil log _{2}^{n} rceil$條線確定總線使用權。
  • 獨立請求方式:每一臺設備都有一對總線請求線BR和總線同意線BG,總線控制部件內有排隊電路。響應速度快,優先次序控制靈活,但是控制線多,總線控制更復雜,2n條線確定使用權

總線通信控制

通常將完成一次總線操作的時間稱為總線周期,可以分為以下四個階段:

  • 申請分配階段:主設備發出請求,總線仲裁機構決定下一個傳輸周期的使用者
  • 尋址階段:主模塊通過總線發醋本次要訪問的從模塊的地址和有關命令,啟動從模塊
  • 傳數階段:進行數據交換
  • 結束階段:主模塊的有關信息從總線上撤除,讓出總線使用權

總線通信控制通常用以下四種方式:

  • 同步通信:由統一時標(通常由CPU的總線控制部件發出;也可以由各個部件各自的時序發生器發出,但必須由總線控制部件發出的時鐘信號進行同步)控制數據傳送。總線上兩個部件完成一次完整可靠的信息傳輸時間稱為總線傳輸周期,包含4個總線時鐘周期(不等同時鐘信號的一個完整振蕩周期)。

同步通信優點規定明確、統一,模塊之間配合簡單一致,缺點是所有模塊采用同一限時,必須按照最慢速度部件設計公共時鐘。適用於總線長度較短,個部件存取時間比較一致的場合。

  • 異步通信:允許個模塊速度不一致性,給設計者充分靈活性和選擇餘地。應答方式可以分為以下三種類型:
  • 不互鎖:主模塊發送請求信號後,一段時間後撤銷信號,從模塊發送回答信號後,一段時間後撤銷信號。CPU向主存寫信息采用此方式。
  • 半互鎖:主模塊發送請求信號後,必須接受到從模塊回答信號才能撤銷請求信號,而從模塊在發出回答信號後,一段時間後自動撤銷信號。例如CPU訪問共享存儲器。
  • 全互鎖:在半互鎖的基礎上,從模塊要的回答信號要等到主模塊的請求信號撤銷才能撤銷。
  • 半同步通信:保留瞭同步通信基本特點,所有的地址、命令、數據信號的發出時間嚴格參照系統時鐘的某個前沿,接收方采用系統時鐘的後沿時間進行辨識;同時增設“等待線”$overline{WAIT}$,讓不同速度模塊和諧工作

若從模塊無法在T3提供數據,就給出等待信號,主模塊在T3到來之時檢測等待信號,若$overline{WAIT}$為低電平就不立即在從數據線取數,在下一個時鐘周期采取一樣的行動。

  • 分離式通信:克服模塊內部準備數據過程並無實際數據傳輸的消極等待。將一個傳輸周期分為兩個子周期:第一個子周期,主模塊在獲得總線使用權後,將命令、地址和其他有關信息(主模塊編號)發送到系統總線上,隨後放棄總線使用權,第二個子周期,從模塊在收到主模塊信息,且準備好數據後,申請得到總線使用權,將主模塊編號、從模塊地址、數據發送出去,隨後放棄總線使用權。

第4章 存儲器

概述

存儲器分類

按照存儲介質分類:

  • 半導體存儲器:優點是體積小、功耗小、存取時間短,缺點是電源消失是,存儲信息會丟失
  • 磁表面存儲器:具有非易丟失的特點
  • 光盤存儲器:記錄密度高,耐用性好,可靠性高,可互換性強

按照存取方式分類:

  • 隨機存儲器RAM(Random Access Memory):可讀/寫存儲器,存取時間與存儲單元的物理位置無關
  • 隻讀存儲器ROM(Read Only Memory):隻能將內部信息讀出,不能隨意重新寫入新的信息去改變原始信息。早期隻有掩膜隻讀存儲器MROM,派生出可編程隻讀存儲器PROM、可擦除可編程隻讀存儲器EPROM(紫外線擦除)、電擦除可編程隻讀存儲器EEPROM,閃存存儲器Flash Memory(現代計算機的固態硬盤SSD) 閃存存儲器和EEPROM(Electrically Erasable Programmable Read-Only Memory)的最大區別在於它們的工作方式和應用場景。 - EEPROM一次隻能編程或擦除一個字節或一個字,它通常用於存儲小容量的數據,如設備設置、系統參數和加密密鑰等。EEPROM的使用壽命較長,讀取速度較慢,相對較為耗電。 - 閃存存儲器一次可以編程或擦除一個塊,塊的大小通常為128KB至4MB不等。閃存存儲器通常用於存儲大容量的數據,如操作系統、應用程序和多媒體文件等。閃存存儲器的使用壽命相對較短,讀取速度較快,功耗相對較低。
  • 串行訪問存儲器:由於信息所在位置不同,讀寫時間不同

存儲器層次結構

存儲器由三個主要性能指標:速度、容量、位價

CPU和緩存、主存都能直接交換信息。緩存-主存層次解決CPU和主存速度不匹配的問題;主存-輔存層次解決存儲系統容量問題。

在主存-輔存這一層次的不斷發展中,逐漸形成虛擬存儲系統,程序員編程的地址范圍虛擬存儲器的地址空間相對應,物理地址是程序在執行過程中真正訪問的地址,對於具有虛擬存儲器的計算機而言,編程時可用的地址空間遠大於主存地址。

主存儲器

概述

根據MAR的地址訪問某個存儲單元時,需要經過地址譯碼、驅動等電路,才能找到要訪問的單元;讀出時,需要進過讀出放大器、才能將選中單元的存儲字,送到MDR。

驅動器、譯碼器和讀寫電路集中在存儲芯片中,而MAR和MDR在CPU芯片中,兩芯片通過總線連接,如下圖:

  • 主存中存儲單元地址的分配:存儲字長都取8的整數倍,計算機系統既可以按照字尋址,也可以按照字節來尋址;大端方式計算機采用字節高位字節的地址來表示字地址,小端方式則采用低位。
  • 主存技術指標:存儲容量和存儲速度

半導體存儲芯片簡介

  • 基本結構:芯片內集成具有記憶功能的存儲矩陣、譯碼驅動電路和讀/寫電路;譯碼驅動電路能把地址信號翻譯成對應存儲單元的選擇信號,選擇信號在讀寫電路的配合在完成對選中單元的讀寫操作,讀寫電路包括讀出放大器和寫入電路。

地址線時單向輸入的,數據線是雙向的,控制線主要有讀寫控制線和片選線(半導體存儲器由許多芯片組成,需要用片選線選擇存儲芯片):

  • 譯碼驅動方式:
  • 線選法:
  • 重合法:所需的線更少。

隨機存取存儲器RAM

靜態RAM(Static RAM,SRAM) SRAM基本單元電路:SRAM用寄存器存儲信息,每一個基本單元電路有6個MOS管組成,如下圖:

SRAM的讀寫操作:

SRAM舉例分析:以Intel2114為例,下圖為外部特性

從上圖可以看出,該芯片為1K 4位芯片,而每個基本單元隻能存儲一位信息,為瞭一次存取4位信息,將存儲矩陣的列分為4組,列選擇線可以同時控制4組中的一列,如下圖:

動態RAM(Dynamic RAM,DRAM) DRAM基本單元電路:DRAM基本單元有三管式和單管式兩種,都是靠電容存儲電荷來存儲信息,電容上有足夠電荷表示1,無電荷表示0。 三管式單元電路結構如下,讀出的數據和原來存儲的數據相反,但是在寫入時寫入信息與存放信息相同。

單管式單元電路結構如下:

DRAM芯片舉例分析:三管DRAM芯片Intel 1103

單管DRAM 4116(16K 1位),按理應該有14根地址線,但是為瞭減少芯片封裝引腳數,隻使用7根地址線,分兩次將地址信息傳送(先傳送行地址到行地址緩存器,再送列地址到列地址緩存器)。

下圖的芯片示意圖中,有讀放大器(蹺蹺板電路,兩邊電平相反),所以0到63行要寫入的數據和實際存儲信息相反,讀取時讀取出來信息和存儲的信息相反(兩次取反,導致原來存入什麼後面就可以讀出什麼)。

DRAM刷新:電容的電荷一般隻能維持1~2ms,信息會自動消失,必須在2ms內對所有存儲單元恢復一次原狀態,也就是刷新;刷新隻與行地址有關,即一行一行地刷新,DRAM的刷新有以下幾種方式:

  • 集中刷新:以存取周期為$0.5mu s$的$128times 128$為例:

其中集中刷新時存儲器不能進行讀寫操作,故稱為“死區”。

  • 分散刷新:即每進行一次讀寫操作就刷新一行存儲單元,沒有死區,但是存儲周期翻倍。
  • 異步刷新:將集中刷新和分散刷新結合,隻要求一個刷新時間間隔內(2ms)對所有存儲單元刷新一遍。

如果將刷新安排在指令編譯階段(此時存儲器無讀寫),不會出現“死區”。

SRAM與DRAM對比

隻讀存儲器ROM

按照ROM的原始定義,ROM隻能讀不能寫,但是隨著用戶的需求,出現瞭PROM、EPROM、EEPROM等可寫的ROM。 掩膜ROM 出廠時就設置好瞭存儲器內存儲的數據,行列相交處有MOS管存儲“1”,沒有MOS管存儲“0”,用戶無法改變原始狀態。

PROM PROM可以實現一次性編程,其基本單元中有一段熔絲,熔絲未斷存儲“1”,已斷開存儲“0”,由於斷開的熔絲沒辦法再恢復,所以PROM隻能一次編程。

EPROM EPROM可擦除可編程,基本結構如下,當需要改變狀態時,需要用紫外寫照射,將信息全部擦寫。

Flash Memory Flash Memory時在EPROM和EEPROM的工藝基礎上產生的一種新型的、具有性能價格比更好、更可靠的可擦寫非易失性存儲器,具有整片擦寫的特點,擦除重寫速度快。

存儲器與CPU的連接

存儲器容量擴展 對於位擴展,以兩片1K 4位芯片組成 1K 8位為例,其中兩個芯片的數據線分別接到數據總線的四條上面(不必按順序,保證不重合即可),地址總線同時接到兩片芯片的地址線上(不必按順序接),片選線和讀寫控制線同時連接到兩片芯片。

對於字擴展,以兩片1K8位組成 2K8位芯片為例,需要保證芯片不被同時選中,可以利用多出的一條地址線作為片選線。

存儲器和CPU的連接

  • 地址線的連接:CPU的地址線往往比存儲芯片的地址線多,所以通常將CPU的地址線低位和存儲器地址線相連,高位在存儲器擴充時用,或者作片選信號。
  • 數據線的連接:必須使得芯片位數等於數據線的數量。
  • 讀/寫命令線的連接
  • 片選線的連接
  • 合理選擇存儲芯片:通常選用ROM存放系統程序,RAM為用戶編程設置。

對於存儲器和CPU連接的設計問題,解決步驟為:(1)進行地址分配,劃定芯片的地址范圍 (2)選擇合適芯片 (3)分配CPU地址線 (4)設計片選信號 CPU片選信號很靈活,可以利用多餘的地址線結合譯碼器構成片選信號,同時註意不要忽略$overline{MREQ}$(訪存控制信號,該信號低電平有效時,才會訪問存儲器),具體例子可參考書本。

存儲器的校驗

任何一種編碼是否具有檢測能力和糾錯能力都與編碼的最小距離有關,編碼最小距離為某種編碼的任意兩組合法碼字的最小差異位數,根據糾錯理論有: $L-1=D+C ,D>=C$ 其中L為最小距離,D為檢測位數,C為糾正位數 漢明碼的工作原理已經在計算機網絡的數據鏈路層的糾錯編碼提及,這裡僅作補充,漢明碼可以按照奇校驗或者偶校驗配置,偶檢驗就是讓檢測位和其被檢測的位具有偶數個“1”,奇校驗同理。

提高訪存速度

由於CPU的工作速度的增長比存儲器快很多,致使主存的存取速度稱為計算機系統瓶頸,除瞭尋找高速元件和采用層次結構以外,調整主存的結構頁可以提高訪存速度。 單體多字系統 在一個存取周期內,在同一個地址取出相鄰幾個存儲單元的數據放入數據寄存器(也就是存儲字長比CPU字長 長);采用這種方法的前提是指令和數據是連續存放的,如果遇到轉移指令或者操作數不能連續存放,該方法效果就不明顯。

多體並行系統 采用多體模塊組成的存儲器,每個模塊有獨立的MAR、MDR、地址譯碼、驅動電路和讀寫電路,可以並行工作也可以交叉工作;多體並行分為以下兩種類型:

  • 高位交叉:地址的高位是存儲體的序號,低位代表存儲體體內的地址;指令和數據一般是順序存儲,對於這種情況,高位交叉方式會對其中一個存儲體頻繁訪問,不利於並行工作,故這種方法多用於存儲器容量的擴充。
  • 低位交叉:地址低位表示存儲體體號,高位表示體內地址;將連續的指令、數據分到不同的存儲體,便於存儲體的並行工作;並行工作時,對於當個存儲體而言,存取周期沒有縮短,但是由於CPU可以交叉訪問各體,將多個存儲體的讀寫過程重疊,在一個存取周期內,完成多組數據傳輸,時序圖如下:

假設每個存儲體的存儲字長和數據總線寬度一致,低位交叉模塊數為$n$,存取周期為$T$,總線傳輸周期為$tau$,則采用流水線方式時滿足$T=ntau$;故需要保證某體啟動後,至少經過$ntau$再啟動。

高速芯片 采用高性能芯片也是提高主存速度的措施,以下對幾種高速芯片簡單介紹:

  • SDRAM(同步DRAM):需要同步系統的時鐘信號,以處理器-存儲器總線的最高速度運行,不許需要插入等待狀態,當存儲器準備數據時,CPU給出的地址和控制信號被SDRAM鎖存,知道指定時鐘周期再響應,這段時間內CPU可執行其他任務,無需等待。
  • RDRAM:解決存儲器帶寬問題。
  • 帶Cache的RDRAM:在RDRAM芯片內集成一個SRAM,用於存儲上次訪問的單元的同一列的所有數據,可以猝發式讀取。

高速緩沖存儲器

Cache概述

利用程序訪問的局部性原理(時間局部性和空間局部性),主存可以將近期用到的數據以及與用到的數據相鄰的數據送到緩存上面,處理器可以直接從緩存讀取信息。 Cache的工作原理 把主存和Cache都分為若幹塊,並且使他們的塊大小(即每個塊含有多少個字)相等,當CPU要訪問主存的某個字時,先查詢Cache,若Cache有對應數據,就直接取,如果沒有,就訪問內存把對應的字所屬的塊存入Cache。

效率評估 假設在一個程序執行期間,訪問Cache的次數為$N_C$,訪問主存的次數為$N_m$,則命中率$h=frac{N_c}{N_c+N_m}$,設訪問一次Cache時間為$t_c$,訪問一次主存時間為$t_m$,則訪問效率$frac{t_c}{ht_c+left( 1-h right) t_m}$。 Cache基本結構

Cache主要由以下模塊構成:

  • Cache存儲體
  • 地址映射變換機構:將主存地址的塊號進行查詢,並判斷是否命中
  • 替換機構:當Cache已滿時,且需要寫入新的塊時,判斷被替換的塊

Cache的寫操作 寫入的操作比較復雜,需要保證對Cache寫入的信息和主存中的信息同步,有以下兩種策略:

  • 寫直達法(Wirte-through):進行寫操作時數據既寫入Cache,有寫入主存;很好保證瞭一致性問題,但是增加訪問一次,例如進行求和操作時,和數改變一次數據,就要訪問一次內存。
  • 寫回法(Wirte-back):寫操作時,隻把數據寫入Cache,當Cache數據被替換時才寫入內存;對於多處理器系統,每個處理器都有獨立Cache,該方法存在Cache一致性的問題。

Cache的改進

  • 多級緩存:隨著集成電路邏輯密度的提高,把緩存和CPU集成在同一個芯片上面,稱為片內緩存,可以提高外部總線利用效率;在片內緩存和主存之間也有片外緩存,也就是二級緩存。
  • 統一緩存和分立緩存:現代采用流水線控制的計算機,為瞭實現同時執行多條指令,通常把Cache分為指令Cache和數據Cache。

Cache—主存地址映射

直接映射 采用的是固定的映射關系,核心思想為:假設Cache中塊的數量為$C(2^c)$,將主存分為每個含有$C$個字塊的組,設$i$Cache的塊號,$j$為主存塊號,則$i=i mod C$;本質上將主存上多個塊映射到Cache某個固定的塊。

全相聯映射 靈活性極大的映射,核心思想是:主存中的一個塊可以存儲到Cache任意一個塊上面;需要的標志位變多,而且需要把主存的標志和Cache中所有標志比較一遍。

組相聯映射 結合瞭全相聯和直接映射的特點,把Cache和主存都分為$Q$組,主存某一組中的塊,隻能映射到Cache對應的組裡面的塊;組相聯映射,當隻有一組時就是全相聯映射,當$C$組時就是直接映射。

替換策略

組相聯和全相聯中,在需要寫入輸入且Cache已滿時,需要考慮替換哪一個塊,理想的算法是替換未來很少用到或者很久才用到的塊,但很難實現,主要使用的算法有以下:

  • 先進先出FIFO算法:不要記錄個字塊的使用情況,容易實現開銷小,但是不能提高命中率,例如在循環程序中,最早調入的塊以後還要用到。
  • 近期最少使用LRU(Least Recently Used)算法:比較復雜,一般采用簡化方法,隻記錄每個塊最近一次使用的時間,平均命中率比FIFO高。
  • 隨機法:比較簡單,不能提高命中率。

輔助存儲器

輔存的特點時不直接與CPU交換信息,輔存不是重點,不做記錄詳情參考課件

第5章 I/O系統

5.1 概述

5.1.1 IO系統發展

早期階段

接口模塊和DMA階段 IO設備通過接口模塊和主機連接,接口中設備數據通路和控制通路,數據經過接口既起著緩沖作用,有可以完成串-並轉換,主機和IO交換信息時CPU要執行中斷程序

直接存儲器存取DMA(Direct Memory Access)技術,IO設備與主存之間有一條直接的數據通路

具有通道結構階段

通道時用來管理IO設備以及實現主存和IO設備之間交換信息的部件(具有特殊功能處理器,不完全獨立,依據CPU的IO執行進行啟動、停止或改變工作狀態),有專門通道指令,獨立執行通道指令編寫的IO程序;工作時,CPU不直接參與管理,提高CPU利用率

具有IO處理機階段 IO處理機獨立與主機工作,可以完成IO控制、碼制轉換、格式處理、數據檢錯糾錯,和CPU工作並行性更高

5.1.2 IO系統組成

IO系統由IO軟件和IO硬件組成: IO軟件:

  • IO指令:格式如下,操作碼用於與其他指令區分,命令碼指明要執行的具體操作,設備碼是多個IO設備的選擇碼
  • 通道指令:是對於具有通道的IO系統專門設置的指令;一般用於指明參與傳送的數據組在主存的首地址、字節數、末地址、IO設備碼、操作命令碼

IO硬件: 主要有IO接口、設備控制器和通道

5.1.3 IO設備與主機聯系方式

IO設備編址方式

  • 統一編址:將IO地址看成存儲器地址一部分,分出部分存儲器地址給IO編號。
  • 不統一編址:IO地址和存儲器地址分開,對IO設備的訪問必須有專門的IO指令。

聯絡方式

  • 立即響應方式:對於工作速度緩慢的IO設備,與CPU聯系時,通常已處於某種等待狀態,知道IO指令一到就立即響應。
  • 異步工作采用應答信號聯絡:IO設備和主機速度不匹配時,各自完成自身工作,出現聯絡信號材準備交換信息。

當使用的是串行傳送時,雙方需要設定一組特殊標記。

  • 同步工作采用同步時標聯絡:要求IO設備和CPU的工作速度完全同步。

IO設備和主機的連接方式

  • 輻射式:即每個IO設備單獨配有一組控制線路和信號線,不利於增刪設備
  • 總線式

5.1.4 IO設備與主機信息傳送控制方式

程序查詢方式 由CPU不斷通過程序查詢IO設備是否做好準備,從而控制IO設備與主機交換信息;隻要啟動IO設備,CPU便處理踏步狀態,IO準備就緒之後也隻能一個字一個字的從IO設備取出,由CPU存入主存。

程序中斷方式 中斷方式是在查詢方式的基礎上做瞭改進:CPU發出讀指令之後,就執行其他操作,直到IO設備準備就緒向CPU發出中斷請求,CPU中斷當前程序,執行IO操作,省去瞭踏步的無效狀態。 在程序中斷和操作過程中,需要保存、恢復原程序狀態,需要占用CPU內部寄存器,同樣是對CPU資源的消耗,該方式最終還是需要通過CPU才能實現IO設備和主存的信息交流。

DMA方式 主存和IO設備之間存在數據通路,當DMA和CPU同時訪問主存時,CPU將總線占用權讓給DMA(竊取或者挪用),竊取的時間為一個存儲周期,而且在該周期內,CPU能繼續執行內部操作。

5.2 I/O設備

5.2.1 概述

IO設備大致可以分為三類:

  • 人機交互設備:鍵盤、鼠標等
  • 計算機信息存儲設備:輔存
  • 機-機通信設備:調制解調器、網卡等

5.2.2 輸入設備

鍵盤 判斷哪個按鍵被按下,將按鍵信息轉為ASCII碼 工作原理:計數器輸出信號控制兩個譯碼器,譯碼之後就是按鍵的行列選擇信號,通過這種方式循環掃描每個按鍵,當掃描到的按鍵被按下,發出脈沖信號,計數器停止計數,計數器的值對應著一按鍵

3baf8896d1462c9976526c6321373d06

鼠標 根據定位的原理,分為機械式和光電式,機械式包含金屬球和電位器,光電式包含光電轉換器

觸摸屏 主要分為電阻式、電容式、表面超聲波式、掃描紅外線式和壓感式 各種方式各有各的特點,需要根據需要選擇

5.2.3 輸出設備

顯示器

  • 字符顯示:
  • 圖形顯示:主觀圖像
  • 圖像顯示:客觀圖像(照片)

打印機

  • 擊打式:點陣式,逐字或逐行打印,目前主要用於購物發票等小票的打印
  • 非擊打式:激光逐頁打印、或噴墨式打印機逐字打印

5.3 IO接口

5.3.1 概述

接口是兩個系統或兩個部件之間的交接部分,IO接口是主機和IO設備之間設置的一個硬件電路以及相應的軟件控制。

接口(Interface)不同於端口(port),端口是指接口電路中一些寄存器,用來存放數據信息、控制信息和狀態信息,若幹的端口加上相應的控制邏輯才能組成接口。

5.3.2 接口功能與組成

總線連接方式的IO接口電路

  • 數據線:根數一般等於存儲字長的位數或字符的位數,通常是雙向的(如果是單向的,則需要兩組)。
  • 設備選擇線:設備選擇線可以有一組或兩組(多的一組用於IO設備向主機回送設備碼)。
  • 命令線
  • 狀態線:將IO設備的狀態報告給主機得信號線,時一組單向總線。

接口的功能和組成

  • 選址功能:通過設備選擇線的設備進行確定。
  • 傳送命令:接口中設有存放命令的命令寄存器以及命令譯碼器,命令線和所有接口電路的命令寄存器連接,隻有被選中設備的SEL信號(選擇信號)有效,命令寄存器才會接受命令線上的命令碼。
  • 傳送數據:接口中具有數據通路;通常具有數據緩沖寄存器DBR(Data Buffer Register),與IO總線的數據線相連。
  • 反映設備的工作狀態:接口設有反映設備狀態的觸發器。 完成觸發器D:D為1表示設備完成工作 工作觸發器B:B為1表示設備正在工作 中斷請求觸發器INTR:為1時,表示IO設備向CPU發出中斷請求 屏蔽觸發器MASK:和INTR配合使用,完成設備屏蔽功能

5.3.3 接口類型

按數據傳送方式分類:

  • 串行接口
  • 並行接口

按功能選擇靈活性分類:

  • 可編程接口:接口功能以及操作方式可以用程序來改變或選擇
  • 不可編程接口:硬連線邏輯實現功能

按通用性分類:

  • 通用接口:可供多種IO設備使用
  • 專用接口:

按數據傳送控制方式分類:

  • 程序型接口:用於連接速度較慢的IO設備,如終端、鍵盤,現代計算機一般采用程序中斷方式與IO設備信息交換
  • DMA型接口:用於連接高速IO設備

5.4 程序查詢方式

5.4.1 程序查詢流程

當有多個IO設備需要查詢時,CPU需要按照IO設備優先級進行逐級查詢。

完成查詢通常需要執行以下指令

  • 測試指令:查詢IO設備是否準備就緒。
  • 傳送指令:IO設備準備就緒,開始傳送。
  • 轉移指令:IO設備未準備就緒,執行轉移指令,轉移回到測試指令。

單個IO設備程序查詢的具體流程如下:

  • 程序查詢方式需要占用CPU資源,執行程序程序之前需要保存寄存器原有內容
  • 計數器用於設置要傳輸的數據的數量(計數器可以設置為原碼,依次減一;也可以設為補碼,依次加一)

5.4.2 程序查詢方式接口電路

以IO輸入為例,電路基本組成如下:

5.5 程序中斷方式

5.5.1 中斷的概念

計算機在執行程序的過程中,當出現異常情況或特殊請求時,計算機停止現行程序的執行,處理異常情況或特殊請求,處理結束後返回現行程序簡短處,繼續執行。 中斷是現代計算機能有效合理發揮效能和提高效率的一個重要功能。

5.5.2 I/O中斷產生

以下以打印機為例,顯示IO程序中斷的過程

計算機系統引入中斷並不僅僅是為瞭適應I/O工作速度慢的問題,中斷還用於處理突發事件的產生(產生異常)、實現實時控制(控制權從用戶程序返回操作系統?)。

5.5.3 程序中斷接口電路

為瞭處理I/O中斷,在I/O接口電路必須配置相關硬件線路: 中斷請求觸發器和中斷屏蔽觸發器 當中斷請求觸發器INTR為1時(接口的完成觸發器D狀態為1),表示該設備發出中斷請求。 當有多個中斷源時,CPU對各種中斷源進行排隊,優先處理優先級最高的請求,不允許其他中斷源中斷正在執行的中斷服務程序,需要設置屏蔽觸發器MASK,MASK為1時,INTR被屏蔽。

排隊器 給不同IO請求不同優先級,對於速度越高的IO設備優先級越高(若CPU不及時響應高速IO的請求,其信息可能會丟失)。 設備優先級的處理,可以采用軟件方法或硬件方法,硬件方法的實現方法:可以在CPU內部對中斷源設置一個統一的排隊器;也可以在接口電路內分別設置各個設備的排隊器——鏈式排隊器:

中斷向量地址形成部件 不同的設備有不同的中斷服務程序,每個服務程序有一個入口,入口地址的尋找這裡介紹硬件向量法: 由設備編碼器生成向量地址,找到中斷向量(其中保存程序入口地址),從而找到中斷服務程序。

中斷向量地址形成部件相當於一個設備編碼器,一個例子如下

電路結構簡化圖

5.5.4 中斷處理過程

CPU響應中斷的條件和時間 CPU能夠響應中斷的條件是,其中的 允許中斷觸發器$EINT$ 的值為1,該觸發器可用開中斷指令置位(開中斷),用關中斷指令或硬件自動復位(關中斷)。

中斷服務的流程

  • 保護現場:保存程序斷點(程序計數器PC),保存通用寄存器和狀態寄存器的內容
  • 中斷服務(設備服務)
  • 恢復現場:在退出中斷服務之前,需要將原程序中斷的現場恢復
  • 中斷返回:通常是中斷返回指令 單重中斷和多重中斷 單重中斷:CPU在執行中斷服務程序時,不能執行其他優先級更高的中斷服務的請求。 多重中斷:CPU在執行中斷服務程序時,可以執行其他優先級更高的中斷服務的請求,與單重中斷的區別在於開中斷的時間不同。

從宏觀上看,程序中斷方式克服瞭程序查詢方式的CPU原地踏步的現象,實現瞭CPU與I/O的並行工作。 從微觀操作分析,CPU在處理中斷服務程序時需要停止原程序的執行,尤其是高速I/O或輔存設備頻繁、成批的與主存交換信息時,不斷打斷CPU主程序的執行。

5.6 DMA方式

5.6.1 DMA方式特點

DMA方式與程序中斷的數據通路 程序詢問和程序中斷方式都需要使用CPU中的寄存器進行進行數據傳送,DMA方式在DMA接口和主存之間有數據通路,不需要通過CPU,工作速度高,適用於高速I/O或輔存與主存之間的信息交換。

DMA與主存交換數據的方式

  • 停止CPU訪問主存:進行DMA傳送時,CPU放棄總線控制權。
  • 優點是控制簡單,適用於數據傳輸率很高的I/O設備實現成組數據傳送。
  • 缺點是DMA接口訪問主存時,CPU基本處於不工作、保持狀態(兩次DMA傳送之間,數據準備間隔大於存取周期)。
  • 周期挪用(周期竊取):當I/O設備發出DMA請求時,I/O設備挪用總線占有權一個或幾個周期,當I/O設備發出DMA請求時,有以下情況:
  • CPU不需要訪問主存
  • CPU正在訪問主存:等待存取周期結束
  • 同時發出訪存請求:訪存權限交給優先級高的DMA

既實現瞭IO傳輸,有很好發揮瞭主存和CPU效率,該方法被廣泛采用。

  • CPU與DMA交替訪問:適用於CPU工作周期比主存存取周期長的情況,其總線控制權轉移幾乎不需要什麼時間,具有很高DMA傳輸效率。

5.6.2 DMA接口功能和組成

DMA接口的功能

  • 向CPU申請DMA傳送
  • 處理總線控制權轉交
  • 管理系統總線,控制數據傳送
  • 確定數據起始地址和數據長度,傳送過程並修正
  • 給出DMA完成信號

DMA接口的基本組成

  • 主存地址寄存器AR
  • 字計數器WC:記錄要傳輸的數據的總字數,通常以交換字數的補碼值預置。
  • 數據緩沖寄存器DR
  • DMA控制邏輯
  • 中斷機構:WC溢出時,傳輸結束,請求CPU進行後處理,並不能處理異常事件。
  • 設備地址寄存器DAR

5.6.3 DMA工作過程

DMA數據傳送過程

  • 預處理:DMA接口開始工作之前,CPU預置以下信息:
  • 指明數據傳輸方向
  • 傳入設備地址,啟動設備
  • 寫入AR和WC

以上工作為CPU完成,之後CPU繼續執行其他工作

  • 數據傳送:以輸出為例,過程如下:
  • 後處理:得到DMA中斷請求後,CPU停止原程序執行,做後處理工作:數據檢驗、決定是否繼續使用DMA傳送、若DMA出錯則進行處理。

DMA接口與系統的連接方式

  • 具有公共請求線的DMA請求方式:多個DMA接口通過一條公用的DMA請求線向CPU申請總線控制權,CPU采用鏈式查詢方式選中DMA接口獲得總線控制權。
  • 獨立的DMA請求方式:每個DMA接口都有一對獨立的DMA請求線和DMA應答線。

以上兩種方式的優缺點和總線判優控制的兩種方式類似

DMA與程序中斷方式相比的特點

  • 程序中斷方式靠軟件傳送,DMA方式靠硬件。
  • 程序中斷方式在一條指令執行結束時響應,DMA方式可在周期內任意存取周期結束時響應。
  • 程序中斷方式有處理異常事件的能力,DMA方式沒有,主要用於大批數據的傳送。
  • DMA方式無需保護現場。
  • DMA方式優先級高。“ DMA方式不需CPU幹預傳送操作,僅僅是開始和結尾借用CPU一點時間,其餘不占用CPU任何資源,中斷方式是程序切換,每次操作需要保護和恢復現場。”所以DMA優先級高於中斷請求,這樣加快處理效率。

5.6.4 DMA接口類型

選擇型DMA接口 在物理上連接多個設備,在邏輯上隻允許連接一個設備。在某一段時間內,DMA接口隻能為一個設備服務(共用一組寄存器),適用於數據傳輸率很高的設備。

多路型DMA接口 在物理上連接多個設備,在邏輯上允許連接多個設備。每個設備設置一套寄存器,分別存放各自傳送參數,適用於同時為多個數據傳輸率不十分高的設備服務。

第6章 計算機運算方法

6.1 無符號與有符號數

無符號數

每一位都可以用來存放數值,浮點數沒有無符號數的分類

有符號數

機器數與真值 對於有符號數來說,機器無法識別正負符號,需要把正負符號進行機器表示,把符號“數字化”的真值成為機器數

原碼表示法 最高位是符號位,0表示正號,1表示符號 原碼表示簡單,易於和真值進行轉換,但是在進行加減運算時較為麻煩(例如,在操作數符號不同的加法運算時,要先判斷兩個數絕對值大小,然後用大的絕對值減去小的絕對值)

補碼表示法 原理類似時鐘,指針要轉到一個數上面,可以順時針也可以逆時針撥,補碼定義如下: $left[ x right] _補=left{ begin{array}{l} 0 x,,text{,}0le x<2^n\ 2^{n+1}+xtext{,}-2^n≤x<0,,text{ }\ end{array} right.$,其中$n$代表數字位位數 此時進行加法不必判斷大小,進行減法時,即加上減數的補碼,補碼和原碼的快速轉換——原碼取反加一

小數的補碼定義為$left[ x right] _補=left{ begin{array}{l} x,,text{,}0le x<1\ 2+xtext{,}-1≤x<0,,text{ }\ end{array} right.$

反碼表示法 通常用於原碼求補碼或補碼求原碼的中間過渡

移碼表示法 由於補碼表示很難直接判斷真值的大小,所以引入瞭移碼,移碼的本質就是 補碼+$2^n$,移碼和補碼的符號為相反,數字位相同

6.2 數的定點表示和浮點表示

定點表示

小數點位置按照約定的位置給出,有以下兩種格式

浮點表示

通常浮點數被表示成$N=Stimes r^j$ 其中為$S$尾數(可正可負),為$j$階數(可正可負),$r$為基數,在計算機中基數可去2,4,8或16

浮點數的表現形式

階符和階碼的位數m反映浮點數的表示范圍以及小數點的實際位置,尾數的位數n表示浮點數的精度

浮點數的表示范圍 以非格式化數為例,當階數的數值為取m位,尾數的數值位取n位,其表示范圍如下:

當浮點數階碼大於最大階碼時上溢,機器停止運算,進行中斷溢出處理,當階碼小於最小階碼時下溢,通常將尾數各位置零,按機器零處理,不會停止運行

浮點數格式化

$r$越大,浮點數可表示的范圍越大,能表示的數的個數越多;但是浮點數的精度越低

機器零 當尾數為0時,不論階數為何值,通通按照機器零處理;當階碼小於或等於所能表示的最小數時,不論尾數為何值,也按照機器零處理

IEEE 754標準

現代計算機中,浮點數一般采用IEEE指定的國際標準,格式如下

32位浮點數和64位浮點數

6.3 定點運算

移位運算

當計算機沒有乘除法運算電路時,可以采用移位和加法相結合實現乘除運算

算術移位規則 對於算術移位,符號位不參與移位,且是正數是原碼、反碼、補碼數值位與真值相同,左右移動都填“0”;對於負數補碼,由於補碼轉原碼“取反加一”的性質,左移添“0”,右移添“1”。

當有有效數字丟失時

  • 對於正數:高位丟1,出錯,低位丟1,影響精度
  • 對於負數:補碼需要特別註意,高位丟0出錯,低位丟1,影響精度

實現算術移位的硬件

負數且進行右移時,可以利用符號為進行添1操作

算術移位與邏輯移位 算術移位是有符號數的移位, 邏輯移位是無符號數的移位;兩者移位的規則是不一樣的,對於邏輯移位,左右移位都是補0,而對於算術移位,補0還是補1,取決於操作數的類型(是原碼還是補碼),以及是左移還是右移 為瞭避免算術左移是高位數丟失,可以使用帶進位的移位,將最高位數字移動到進位中

加法運算

由於減法運算可以看作是一個被減數加上減數的負值,現代計算機都采用補碼加法作減法運算 補碼加法基本公式 整數:$left[ A+B right] _補left( mod 2^{n+1} right) =left[ A right] _補+left[ B right] _補$ 小數:$left[ A+B right] _補left( mod,,2 right) =left[ A right] _補+left[ B right] _補$ 原理的證明:以整數為例,由於高位會被丟棄,即$mod 2^{n+1}$,每個操作數都可以看作是$x+2^{n+1}$,此時用各自補碼相加,然後丟棄進位即可

溢出的判斷 隻用一位符號位判斷——如果兩個操作數符號不同,則必然不會溢出,如果符號位相同,結果的符號為和操作數符號位不同的話,就必然溢出;因此通常采用符號位產生的進位和最高有效位產生的進位進行異或運算,結果為1則溢出

用兩個符號為進行判斷——適用於符號位有兩位的變形補碼,其定義如下: $left[ X right] _補=left{ begin{array}{l} x,,,,,,,1>xge 0\ 4+x,,,,,0>xge -1\ end{array} right.$ 變形補碼溢出判斷原則是——2個符號位不同時就溢出;無論是否溢出,最高移位符號為才是代表真正符號位 當采用雙符號位方案時,由於一個正確的數,其兩個符號位總是相同的,所以寄存器和主存中的操作數隻需保存移位符號數即可,在相加時,將保存的一位符號位同時送到加法器的兩位符號位輸入端

補碼加減法硬件配置

乘法運算

筆算乘法 以下是筆算乘法的一個例子

筆算乘法可以歸納出以下結論:

  • 當乘數為$n$位時,需要進行$n$次加法運算和$n$次移位
  • 每次做加法時,被乘數與部分積的高位相加,低位被移動到乘數空出來的高位位置

原碼一位乘法 原碼和真值很相近,乘積的符號可以通過符號位異或運算獲得,數值位進行相乘的過程和改進後的筆算乘法過程一樣,故原碼一位乘法規則如下:

  • 乘積符號位由兩數的符號位異或運算結果決定
  • 乘積數值部分有兩數絕對值部分(即不要符號位)相乘得到,通式如下:
  • 對於整數原碼乘法,對於部分積還要左移$n$位得到正確結果

原碼一位乘法需要註意:

  • 部分積取$n+1$位,存放乘法過程中絕對值超過$n$位的值
  • 乘積的數值部分是兩數絕對值相乘的結果,故移位運算為邏輯右移

原碼一位乘法硬件配置:

  • A、X、Q均為n+1位的寄存器,X存放被乘數原碼,Q存放乘數原碼,A存放部分積
  • S存放乘積符號,Gm為乘法標記
  • 計數器C存放乘數位數(如果乘數原碼除瞭符號位之外有$n$位,就設為$n$)

控制流程如下:

原碼兩位乘法 為瞭提高運算速度,采用原碼兩位乘法,原碼兩位乘法用兩位乘數位來決定新的部分積,如下:

2倍的被乘數,相當於被乘數左移1位,3倍被乘數相當於4倍被乘數(左移兩位)減去一個被乘數;可以將被乘數左移兩位的操作較為下一個乘數的兩位去完成,當前隻需要進去一個被乘數即可,此時需要一個存儲器$C_j$進行標記 由於需要進行$-x^$的操作,一般用$+[x^]_{補}$完成,所以兩個操作數是絕對值的補碼,移位運算是算術移位 在乘法過程中,需要2倍的被乘數,為瞭避免高位丟失,部分積需要3個符號位(也就是需要額外2位放置溢出),其中最高位才是真正的符號位 為瞭統一操作,需要在乘數高位增添“0”,乘數位數為奇數時增添一個0,為偶數時增添兩個0

  • 乘數數位$n$為偶數時,需要做$n/2$次移位,$n/2+1$次加法(將C設置為$n/2$,當C為0時隻做加法不移位)
  • 乘數數位$n$為奇數時,需要做$n/2+1$次移位,$n/2+1$次加法(將C設置為$n/2$,每一步都要加法和移位)

補碼乘法 進行補碼乘法時,需要對乘數$y$的符號進行討論: 1)被乘數$x$符號任意,乘數$y$符號為正 以整數為例 $left[ x right] _補=2^{n+1}+x$ $left[ y right] _補=y$ $left[ x right] _補left[ y right] _補=left[ x right] _補y=left( 2^{n+1}+x right) y=2^{n+1}y+xy=left( 2^{n+1}+xy right) mod 2^{n+1}=left[ x*y right] _補$ 即乘數為正數時,無論被乘數符號如何都可以使用原碼乘法運算規則

2)被乘數$x$符號任意,乘數$y$符號為負 以整數為例 $left[ x right] _補=x_0x_1...x_n$ $left[ y right] _補=1y_1...y_n=y+2^{n+1}$ $y=left[ y right] _補-2^{n+1}=1y_1...y_n-2^{n+1}=0y_1...y_n-2^n$ $xy=xleft( 0y_1...y_n right) -x2^n$ $left[ xy right] _補=left[ xleft( 0y_1...y_n right) right] _補+left[ -x2^n right] _補$ 可以看出,可以乘數為負數的乘法看成是乘數為正數(乘數去掉符號位)的乘法,同時最後得到的結果加上$[-x]_補$進行校正,故稱為校正法。

3)Booth算法 該算法由校正法得出,也稱為比較法,可以用一個統一的公式表示 $left[ xy right] _補=left[ x right] _補left( 0 y_1 y_2 ... y_n right) -left[ x right] _補y_0$

可將以上算式改寫

其中$y_{n+1}=0$

補碼比較法的硬件配置:

補碼比較法的控制流程:

補碼兩位乘法 補碼兩位乘法是將判斷$y_{n-1}y_n$和$y_ny_{n-1}$,也就是將下次和本次的部分積加減情況合並,需要註意的是下一個的加減情況要乘以2

除法運算

筆算除法 將筆算除法直接用計算機實現的問題有以下:

  • 機器不能直接判斷上商0還是1,需要通過餘數減去除數數的大小是正是負來判斷
  • 筆算除法每次總是餘數不同低位補0,除數右移一位,這種方式需要,兩倍除數字長的加法器,可以用左移餘數的方法來代替
  • 機器難以將每位商直接寫到寄存器的某個位置,可將商先寫入寄存器低位,然後左移一位

原碼除法 符號位單獨處理,商符號由兩個操作數符號異或得出,商值由兩操作數絕對值相除得到 對於定點除法,必須滿足$0<|被除數|<=|除數|$,實際計算中當被除數為0,結果直接返回0,當除數為0,中斷計算並報錯

  1. 恢復餘數法

先用餘數減去除數得到新的餘數,根據結果為正還是為負進行處理

  • 餘數為負時:上商0,並將餘數加上除數恢復,然後餘數左移
  • 餘數為正時:上商1,然後餘數左移

$n$為數位的原碼進行除法時,進行$n+1$次上商,$n$次移位(用計數器$C=n$判斷運算是否結束,$C=0$時還要進行最後一次上商) 第一次上商的結果在符號位上面(最後會被覆蓋),可以根據第一次上商結果判斷是否溢出

  1. 加減交替法

加減交替法也稱為不恢復餘數法,根據恢復餘數法改進而來 對於餘數$R_i$

  • $R_i>0$,上商1,做$2R_i-y^*$運算
  • $R_i<0$,上商0,做$2R_i+y^*$運算

運算流程如下

補碼除法 一般采用加減交替法,在此隻討論這種方法 由於補碼除法是符號位和數值位一起參與運算的,所以相較於原碼除法需要額外解決幾個問題:(1)如何確定商值(2)如何形成商符(3)如何獲得新的餘數

  1. 比較餘數和除數大小

由於補碼除法的操作數為補碼,補碼符號位是任意的,不能單純用補碼的差來判斷大小,應該用絕對值大小進行比較,分以下兩種情況:

  • 被除數和除數同號:餘數與除數同號,表示夠減
  • 被除數和除數異號:餘數與除數同號,表示不夠減
  • 商值確定

由餘數和除數大小、被除數和除數是否同號共同決定:

  • 被除數和除數同號:夠減時,上商1(即此時商的結果為正數,可以根據原碼的除法那樣,夠減就上商1)
  • 被除數和除數異號:不夠減時,上商1

可以根據以上兩種結論總結得到以下結果:

  1. 新餘數確定

和原碼加減交替法類似

如果對商的精度沒有特殊要求,可采用末尾恒置一的方法,也就是最後一次上商恒上商1

補碼除法控制流程如下

6.4 浮點四則運算

浮點加減法

對階 使得兩操作數的小數點對齊,遵循的原則是——小階向大階對其,即階小的數尾數右移,階數增加 尾數右移時,可能會使得低位有效數字丟失,影響精度——但是如果采取大階向小階對齊,尾數左移,可能會發生更嚴重的尾數高位丟失,運算出錯

尾數求和 用補碼進行相應的加法運算

規格化 當基數$r =2$時,尾數$S$規格化形式

  • $S>0$,$[S]_補$=00 . 1......
  • $S<0$,$[S]_補$=11 . 0......

可以看出,當完成規格化時,數值最高位和符號位相反,可以用異或運算判斷,有以下例外情況:

  • $S=-1/2$,$[S]_補$=11 .100...0,為瞭便於硬件判斷,規定$-1/2$不是規格化的數

規格化可以分為左規和右規,以下兩種移位運算都是算術移位:

  • 左規:當尾數不滿足規劃化形式時,進行左規運算——數值位左移,階數減一,直到符號位和數值最高位符號不同
  • 右規:當兩個符號位符號不同時,此時表示尾數溢出,在定點運算中,這是不允許的,但是在浮點運算中,可以進行右規消除溢出

舍入 在進行對階和右規的過程中,可能會將尾數低位丟失,影響精度,可用舍入法提高尾數精度

  • 0舍1入法:在原碼中,當被移去的最高位為0時,這舍去,當最高位為1時,在尾數的末尾加一;在補碼中情況可能不一樣,單遵循的原則不變——舍去使得絕對值變小,進位使得絕對值變大
  • 恒置1法:無論是原碼和補碼都是在末尾置1(不是加一),對於補碼,該方法可以將誤差控制在最後一位

溢出判斷 浮點數溢出和定點數溢出定義不一樣——浮點數溢出,是指階碼的溢出

  • 上溢:是指階碼的上溢,超過瞭最大的整數或小於最小的負數,此時機器停止運算,做溢出中斷處理
  • 下溢:階碼的下溢,浮點數趨於零,不做溢出處理,當成機器零

浮點數乘除運算

尾數乘法運算

  • 檢查兩個尾數中是否有為0的數,有則乘積為0不必在進行運算
  • 左規時,如果階下溢,則作機器零處理,右規時,如果階上溢,則進行溢出中斷處理

尾數相乘會得到雙倍字長的結果,若隻取一倍字長,需要將低位丟棄,采取的策略有以下:

  • 截斷法:處理簡單,影響精度
  • 舍入處理:對於原碼和正數補碼,0舍1如,對於負數補碼,采取以下處理規則: 負數補碼加一相當於讓絕對值變小,舍去相當於讓絕對值變大
  • 丟失的各位全為0,不舍入——(全為0沒影響,不用處理)
  • 丟失最高位為0,以下各位不全為0,或者最高位為1,之後各位全為0,則舍棄被丟失的各位——這兩種情況,丟失的絕對值大,此時不加一,相當於讓絕對值增大
  • 丟失最高位為1,以下各位不全為0,尾數末尾加一——丟失的絕對值小,此時加一讓尾數絕對值變小

6.5 算術邏輯單元

ALU電路

以下為ALU框圖,A和B為兩個操作數,K指定運算類型,F為輸出

74LS181為四位ALU,其引腳圖和功能表參考教材

快速進位鏈

並行加法器 串行加法器是由當個全加器組成的加法器,數據逐位串行送入加法器進行運算(也就是用一個全加器一位一位的進行運算) 並行加法器由多個全加器組成,其全加器個數的多少取決於機器的字長,由於並行加法器可同時對數據的各位相加,各位是否能同時產生結果取決去采用的進位鏈

串行進位鏈 全加的邏輯表達式如下: $S_i=A_ioplus B_ioplus C_{i-1}$ $Ci=A_iB_i+left( A_i+B_i right) C_{i-1}$ 進位$Ci$由兩部分組成:本地進位$d_i=A_iB_i$,傳遞進位$left( A_i+B_i right) C_{i-1}$,成$t_i= A_i+B_i$為傳遞條件,則有$Ci=d_i+t_iC_{i-1}$

以四位加法器為例,采用串行進位鏈的電路如下

設與非門的級延遲時間為$t_y$,$n$為加法器最長進位時間為$2n t_y$

並行進位鏈 並行進位鏈是指並行加法器中進位信號是同時產生的,也成為先行進位、跳躍進位,有兩種實現方式

  1. 單重分組跳躍進位

將n為全加器分為若幹小組,小組內的進位同時產生,小組之間采用串行進位,以四位並行加法器為例

小組內的每個進位的產生隻與輸入小組的最低位進位有關,采取以下電路實現並行進位

假設與或非門即延遲時間為$1.5t_y$,小組內隻需要$2.5t_y$就能產生全部進位

  1. 雙重分組跳躍進位

基本思路是——將全加器分為若幹大組,大組中有分為若幹小組,小組內部以及小組之間並行產生進位,大組之間串行傳遞進位 對於一個大組中的每個小組,其最高位進位的邏輯表達式如下:

發現小組之間可以采用類似小組內部多個全加器 采用的並行進位策略,進位電路如下

D和T的產生,由於小組內部的同步進位電路得出:

現對一個$n=32$的雙重進位進行分析:

  • 經過$2.5t_y$:產生所有的D和T信號、以及最低位的$C_{2-0}$進位信號
  • 經過$2.5t_y$:產生第二大組中所有小組的最高位進位信號
  • 經過$2.5t_y$:產生第一大組中所有小組的最高位進位信號、產生第二大組所有進位信號
  • 經過$2.5t_y$:產生第一大組所有進位信號

可以發現經過$10t_y$就能產生所有進位信號(是從產生d和t信號之後開始計算)

第7章 指令系統

7.1 機器指令

7.1.1 指令格式

指令是由操作碼和地址碼兩部分組成的

操作碼 指明指令完成的操作,操作碼長度:

  • 長度固定:便於硬件設計,指令譯碼時間短,廣泛用於字長較長的、中大型就三級和超級小型計算機以及RISC。
  • 長度可變:有效壓縮瞭操作碼的平均長度,在字長較短的微型計算機中廣泛采用,增加瞭指令譯碼和分析的難度,控制器設計復雜,通常采用拓展操作碼技術。

拓展操作碼技術 操作碼的長度隨著地址數的減少而增加,任何短操作碼不能是長操作碼的前綴,可以在短操作碼中留出一種,作為長操作碼的前綴(例如,下圖中選“1111”)

地址碼 用來指出指令的的源操作數的地址,可以是主存地址、寄存器地址或者IO設備的地址。

  • 四地址指令

四個地址分別是:第一個操作數地址、第二個操作數地址、結果存放的地址、下一條指令的地址。一共需要4次訪存(取指令、取兩個操作數、存放結果)。 程序中的指令大多是按照順序執行的,PC能存放當前欲執行的指令的地址,同時可以計數,可以自動生成下一條指令的地址,因此指令的地址部分可以省去下一條指令的地址。

  • 三地址指令

三個地址分別代表第一個操作數地址、第二個操作數地址、結果存放的地址,一共需要4次訪存(取指令、取兩個操作數、存放結果)。

  • 二地址指令

存放操作的內存可以存放結果,可以減少一個地址得到二地址指令,如果結果是存放在寄存器ACC中,則隻需要3次訪存(取指令、取兩個操作數)。

  • 一地址指令

ACC既可以存發結果,也可以存發一個操作數(當前操作數可以上一次運算的結果),一次隻需要一個地址(操作數地址),一共需要2次訪存(取指令、取一個操作數)。

  • 零地址指令

指令中沒有地址碼,如空操作(NOP)、停機(HLT)沒有操作數,而子程序返回(RET)、中斷返回(IRET)的操作數地址隱含在堆棧指針SP中。

用硬件資源(PC、ACC)可以代替指令字中某些地址字段後:

  • 擴大指令尋址范圍
  • 縮短指令字長
  • 減少訪存次數

7.1.2 指令字長

指令的字長取決於操作碼長度、地址碼個數和地址碼長度。

  • 指令長度固定

早期計算機指令字長、機器字長和存儲字長相等,指令字長固定,控制方式比較簡單。

  • 指令長度按字節倍數變化

現在計算機的指令系統可以采用不同位數的指令,控制電路比較復雜,多字長指令需要多次訪存才能取出完整指令,為瞭提高指令運行速度和節省存儲空間,盡可能把常用的指令(如,數據傳送指令、算邏輯運算指令)設計成單字長或短字長格式指令。

7.2 操作數類型和操作類型

7.2.1 操作數類型

機器中常見的操作數類型有以下:

  • 地址:地址實際上也是一種數據,在許多情況下需要計算操作數的地址,可以看作是一個無符號整數
  • 數字:常見的數字有定點數、浮點數和十進制數
  • 字符:用ASCII碼表示
  • 邏輯數據:此時二進制數字串不是被看作是算術數字,而是被看作是邏輯數

7.2.2 數據存放方式

單個數據在存儲器存儲的方式

  • 大端方式:數據高位放在低地址,字地址為高字節地址
  • 小端方式:數據低位放在低地址,字地址為第字節地址

字節編址方式 以下為存儲字長為8字節的機器為例子

  • 從任意位置開始存儲

優點不浪費存儲空間,但是除瞭字的第一個字節以外,其他位置的訪存可能需要兩個存儲周期的時間,讀寫控制比較復雜。

  • 從字的開始位置存儲

浪費瞭空間,但是訪問任何數據隻需要一個存儲周期,讀寫控制簡單

  • 邊界對準方式

數據的存儲的起始位置,是數據長度的整數倍,是之前兩種方案的折中,在一個存儲周期可以完成數據訪問,內存浪費也不算太嚴重

7.2.3 操作類型

不同的機器操作類型不同,但是幾乎所有機器都有以下幾種通用操作: 數據傳送

算術邏輯操作 算術操作:加、減、乘、除、增一、減一、取負數 邏輯操作:與、或、非、異或

移位 分為算術移位、邏輯移位、循環移位

轉移 改變指令的執行順序

  • 無條件轉移

不受條件約束,直接把程序轉移到下一條需要執行的指令的地址,例如JMP X

  • 條件轉移

根據當前指令執行結果來決定是否需要轉移,一般機器能夠提供一些條件碼,例如,零標志位Z、負標識位N、溢出標志位V、進位標志位C、奇偶標志位P,為偶數時P=1,其他標志位當滿足對應條件時均為1 SKP DZ 表當觸發器D為零時,跳過一條指令

  • 調用與返回

調用指令CALL與返回指令RETURN配合使用

  • 陷阱指令

陷阱Trap是一種意外事故的中斷,此時計算機發出陷阱指令,暫停當前程序的執行,轉入故障處理程序進行故障處理。一般不提供給用戶使用,作為隱指令(指令系統中不提供的指令),但是有些機器設置供給用戶使用陷阱指令,用來完成系統調用。

輸入輸出 對於IO單獨編址的計算機,通常設置輸入輸出指令,完成數據在寄存器和外部IO設備之間的轉移,IO設備和內存一起編址的計算機,不需要輸入輸出指令,使用轉移指令完成對應操作。

7.3 尋址方式

7.3.1 指令尋址

指令尋址比較簡單,分為順序尋址、跳躍尋址

  • 順序尋址:通過PC加一(加多少取決地址編碼方式),自動形成下一條指令地址
  • 跳躍尋址:通過轉移類指令來實現

7.3.2 數據尋址

數據尋址類型較多,指令字段中需要一個字段來指明尋址的方式,指令的地址碼不一定代表真實地址,稱為形式地址,記作A,操作數的真實地址稱為有效地址,記作EA

立即尋址 操作數本身就存儲在指令地址碼字段,用#代表立即尋址。

直接尋址 EA=A。尋找操作數比較簡單,不需要計算操作數的地址,指令執行過程訪存一次。缺點是A的位數限制瞭操作數的尋址范圍,必須修改A,才能修改操作數地址。

隱含尋址 尋址標志位隱含表示操作數在某個寄存器中。

間接尋址 形式地址指向的存儲單元中存儲的是有效地址,即EA=(A)。擴大瞭尋址范圍;便於編制程序,例如用間接尋址很容易實現子程序的返回,在主程序中多次調用自程序時,不需要修改子程序指令,而是修改(A)即可。

間接尋址缺點是需要訪存多次。 多次間接尋址,可用存儲字的首位來標志間接尋址是否結束。

寄存器尋址 地址碼部分給出的是寄存器的編號,即EA=Ri。無須訪存,減少執行時間;寄存器數量有限,縮短瞭指令字長。在計算機中應用廣泛。

寄存器間接尋址 寄存器中保存的是有效地址,即EA=(Ri)。需要訪存一次。

基址尋址 設有基址寄存器BREA=A+(BR)

基址寄存器有隱式和顯式兩種:

  • 隱式:專門設有基址寄存器BR,用戶不必明顯指出該基址寄存器,隻需有指令的尋址特征反映。
  • 顯示:基址在通用存儲器中,由用戶指明哪寄存器用作基址寄存器。

基址尋址可以擴大操作數尋址范圍;在多道程序中很有用(操作系統的地址空間分段)。

變址尋址 和基址尋址類似,EA=A+(IX),但是不同的是,基址尋址中,基址不變,形式地址改變,而在變址尋址中,形式地址不變,基址改變。 變址尋址主要用於處理數組問題,在數組處理過程中,將形式地址A設置為數組首地址,通過在變址存儲器中存放不同偏移量來訪問數組元素,使用編制循環程序。 變址尋址還可以與其他尋址方式結合使用,如EA=A+(IX)+(BR)

相對尋址 有效地址由PC的值和形式地址相加得出,EA=A+(PC)

特點在於轉移地址不固定,無論程序在主存哪個區域,都可以正確運行,對於編寫浮動程序有利;廣泛用於轉移指令。需要註意形式地址的設置問題,執行當前指令時,PC的值已經加一。

堆棧尋址 要求計算機中設有堆棧。堆棧中數據先進後出,棧頂為低地址,棧底為高地址,用堆棧指針SPStack Point指出棧頂地址。

進棧則(SP)+1——>SP,出棧則(SP)-1——>SP。進出棧不一定是加一減一,取決於主存編制方式。

7.4 指令格式舉例

7.4.1 考慮的因素

  • 與舊指令的兼容性
  • 操作類型:指令數、操作難易程度
  • 數據類型:確定哪些數據可以參與操作
  • 指令格式
  • 尋址方式
  • 寄存器數量

7.4.2 指令格式舉例

IBM 360 **R**表示存儲器,X表示由變址寄存器指出的內存地址,S表示內存,I表示立即數。 結果存儲在左邊的符號表示的位置,如RR結果存儲在寄存器,SI結果存儲在內存中。

Intel 8086 指令字長不定長,為1-6個字節。

地址格式如下:

7.5 RISC技術

7.5.1 RISC的發展

早期為瞭簡化編譯器的任務,縮小機器指令和高級語言之間的差距,產生瞭增加復雜指令的辦法;後來發現,如果編譯器過多依賴復雜指令,對減少機器代碼、降低指令執行數和提高流水性能不利。 由於典型程序中 80% 的語句僅僅使用處理機中 20% 的指令,RISC的產生就是用 20% 的簡單指令組合不常用的80% 的指令功能。

7.5.2 RISC的主要特征

  • 選擇使用頻度比較高的簡單指令,復雜指令由簡單指令構成。
  • 指令長度固定,指令格式種類少,尋址方式少。
  • 隻有LOADSTORE指令訪存,其他指令都在寄存器完成。
  • CPU中設有多個通用寄存器。
  • 采用流水線技術,大部分指令在一個時鐘周期內完成。采用超標量和超流水線技術,指令平均執行時間小於一個時鐘周期。
  • 采用組合邏輯控制,而不是微程序。

商品化的RISC機器通常不會是純RISC機器,以上特點並不是所有RISC機器都具備。

7.5.3 CISC主要特征

  • 指令系統龐大復雜,各種指令使用頻度差異大。
  • 指令長度不固定,指令格式多,尋址方式多。
  • 訪存指令不受限制。
  • CPU中設置專用存儲器。
  • 大多數指令需要多一個時鐘周期才能完成。
  • 采用微程序控制器。

7.5.4 RISC與CISC的比較

  • RISC更能充分利用VLSI(超大規模集成電路)面積。
  • RISC 更能 提高計算機運算速度,指令數、指令格式、尋址方式少,通用 寄存器多,采用 組合邏輯 ,便於實現 指令流水。
  • RISC 便於設計,可 降低成本,提高 可靠性。
  • RISC 不易 實現 指令系統兼容。

第8章 CPU結構與功能

8.1 CPU結構

8.1.1 CPU功能

CPU實質包含運算器和控制器兩大部分,運算器在第6章已經提及,這裡側重於控制器的功能。 CPU的功能有:取指令、分析指令、執行指令、控制程序輸入及結果輸出、總線管理、處理異常。這些功能可以劃分為五類:

  • 指令控制
  • 操作控制
  • 時間控制
  • 數據加工
  • 處理中斷

8.1.2 CPU結構框圖

分析實現CPU五大類功能各自所需的結構:

  • 指令控制:PC、IR
  • 操作控制、時間控制:CU、時序電路
  • 數據加工:ALU、寄存器
  • 處理中斷:中斷系統

8.1.3 CPU的寄存器

用戶可見寄存器

  • 通用寄存器:存放操作數,或者作為某種尋址的專用寄存器。
  • 數據寄存器:存放操作數,需要滿足各種數據類型,可以使用兩個寄存器存放雙倍字長的值。
  • 地址寄存器:位數滿足最大地址范圍,用於特殊的尋址方式。
  • 條件碼寄存器:存放條件碼,作為分支運算的依據。

控制和狀態寄存器

  • 控制存儲器:如PC、MAR、MDR、IR
  • 狀態寄存器:如PSW寄存器(存放程序狀態字)

8.1.4 控制單元和中斷系統

CU形成操作命令序列,有兩種形成方式:

  • 組合邏輯設計方式:硬連線邏輯,速度快,RISC的CU使用該方式。
  • 微程序設計:存儲邏輯,設計簡單,適用於CISC。

中斷系統和CU在後面章節再具體介紹。

8.2 指令周期

8.2.1 基本概念

指令周期——CPU取出一條指令並完成執行所需的全部時間,可大致分為兩個階段:

  • 取指階段:從存儲器取出指令,並分析指令。
  • 執行階段:取操作數,進行運算,結果寫入內存等。

不同指令的指令周期是不同的,如下圖:

8dc2fa3f2705a3dbd0f23416a2ddd81f

采用間接尋址或執行中斷的指令還有間址周期和中斷周期: 例如,當CPU采用中斷方式和IO交換信息時,在每條指令執行階段結束之前需要發出中斷查詢指令,當有中斷請求時,就進入中斷周期以響應中斷。

8.2.2 指令周期的數據流

取值周期 根據PC中的地址,從內存取出指令送到IR,最後要將PC增加一。

間址周期 將MDR中形式地址部分送到MAR進行處理。

執行周期 不同指令執行周期數據流不同,不用統一數據流圖表示。

中斷周期

8.3 指令流水

為瞭提高計算機速度,一方面可以提期間的性能;另一方面可以改進系統的結構,開發系統的並行性。 並行包含兩重含義:

  • 並發:兩個或多個事件在同一時間段內發生。
  • 同時:兩個或多個事件同時發生,在時間上重疊。

並行的等級:

  • 程序級、進程級:統稱為過程級,為粗粒度的並行,一般用軟件實現。
  • 指令之間級、指令內部級:統稱指令級,為細粒度的並行,一般用硬件實現。

指令的流水作業就是一種指令級的並行。

8.3.1 指令流水原理

先把指令周期分為取指和執行階段,執行的串行執行流程如下:

可以看出在任一時刻總是有取值部件或指令執行部件空閑,為瞭提高效率,可以讓兩條指令重疊,即指令的二級流水:

如果取值階段和執行階段時間相同,取值和執行階段可以完美重疊,那麼速度可以提升一倍,實際上很難達到提升一倍的效果,原因有:

  • 取指時間$<$執行時間
  • 條件轉移指令:必須等待上條指令執行結束才能知道下條指令的地址。通常為瞭減少時間損失,采用猜測法:即使進入條件轉移指令,依然順序取下條指令,如果沒有轉移則沒有時間損失,有轉移則丟棄取到的指令,獲取新的指令。

為瞭進一步提高處理速度,可以將指令的處理過程劃分為更細的六個階段:

  • 取值FI:取出指令放入緩沖區。
  • 指令譯碼DI:去頂操作性質和操作數地址的形成方式。
  • 計算操作數地址CO
  • 取操作數FO
  • 執行指令EI
  • 寫操作數WO

指令可以形成六級流水:

8.3.2 影響流水線性能因素

結構相關 不同指令爭奪同一功能部件產生的資源沖突。例如,FI、FO、WO都需要訪存,可能會發生發出沖突,如下:

解決方法:

  • 停頓:將指令的操作暫停一段時間(例如一個周期)後再執行。
  • FI和FO的沖突,可以設置兩個獨立指令Cache和數據Cache,即指令存儲和數據存儲分開,這種結構被稱為哈佛結構(Harvard architecture)。
  • 指令預取技術:將指令預先取到一個隊列裡面,避免FI和FO的沖突,適用於訪存周期短的場景。

數據相關 各條指令因為重疊操作,可能改變瞭對操作數的執行結果,導致數據相關沖突。

  • 寫後讀相關
  • 讀後寫相關
  • 寫後寫相關

解決方法:

  • 後推法:相關指令延遲到所需操作數被寫回到寄存器再執行。
  • 定向技術:又稱為旁路技術,不必等到某條指令的執行結果送回到寄存器,再從寄存器中讀出作為操作數,而是將執行結果直接送到其他指令所需的地方。

控制相關 由轉移指令引起,統計表示轉移指令約占總指令1//4,會使流水線喪失很多性能。

解決方法:

  • 盡早判別轉移是否發生,盡早生產轉移目標地址。
  • 如果無法提前判斷,預取成功和成功兩個控制流方向上的目標指令。
  • 加快和提前形成條件碼。

8.3.3 流水線性能

吞吐率 單位時間內完成指令的數量

  • 最大吞吐率:流水線在連續流動之後達到穩定狀態,對於$m$段流水線,每段時間為$varDelta t$,最大吞吐率$T_{pmax}=frac{1}{varDelta t}$。
  • 實際吞吐率:考慮流水線的建立時間和排空時間,為$T_p=frac{n}{mvarDelta t+left( n-1 right) varDelta t}$,當處理的指令遠大於流水線段數時,實際吞吐率趨近於最大吞吐率。

加速比 $m$段流水線和等功能非流水線的速度之比。 $S_p=frac{nmvarDelta t}{mvarDelta t+left( n-1 right) varDelta t}=frac{m}{1+frac{m-1}{n}}$ 當$n>>m$時,加速比趨近於$m$。

效率 流水線中各功能段的利用率。 $E=frac{nmvarDelta t}{mvarDelta t+left( n-1 right) varDelta t}=frac{n}{m+n-1}=frac{S_p}{m}=T_pvarDelta t$ 當$n>>m$時,效率趨近於1。

8.3.4 流水線的多發技術

超標量技術 超標量(superscalar)技術是指每個時鐘周期內可同時並發多條獨立指令,要求配置多個功能部件和指令譯碼電路、多個寄存器端口和總線。

超標量計算機不能挑戰指令執行順序,但是可以通過編譯優化技術,並能並行的指令搭配起來。

超流水技術 超流水技術(superpipeline)是將一些流水線寄存器插入流水線段中,將流水線再分段。在一個時鐘周期內將一個功能部件使用多次。 同樣不能改變指令執行順序,通過編譯進行優化。

超長指令字技術 超長指令字技術(VLIW)和超標量技術都是采用多條指令能在多個處理部件中並行處理的結構。超標量的指令來自標準的指令流,VLIW是在編譯時挖掘出指令之間的並行性後,把能並行的指令合並為一條具有多個操作碼字段的超長指令。

8.3.5 流水線結構

指令流水線結構

在流水線每個操作部件的後面,都要有一個緩沖寄存器(鎖存器),稱為流水寄存器,這個緩沖寄存器用於保存本階段的執行結果,以保證各個部件之間的速度是匹配。

運算流水線 流水線技術還可以用於部件級別,例如浮點數的加法運算也可以進行流水線工作:

分段的原則是保證每段操作時間盡量一致。

8.4 中斷系統

8.4.1 概述

引起中斷的因素

  • 人為設置的中斷:自願中斷,例如轉管指令。
  • 程序性事故:如運算溢出、出現非法運算操作等。
  • 硬件故障
  • I/O設備
  • 外部事件:例如通過鍵盤來中斷現行程序。

引起中斷的因素稱為中斷源。中斷源可以分為不可屏蔽中斷,如電源掉電,和可屏蔽中斷。

中斷系統解決的問題

  • 中斷源提出中斷請求。
  • 中斷系統確定響應中斷的優先次序。
  • CPU如何響應中斷。
  • 如何找到中斷服務程序入口地址。
  • 保護現場和恢復現場。
  • 中斷過程中出現瞭新的中斷請求如何處理。

8.4.2 中斷請求標記和判優邏輯

中斷請求標記 中斷請求觸發器INTR為1表示有中斷請求,多個觸發器集成在CPU內部形成中斷請求標記寄存器,如下:

中斷請求觸發器即可以集成在CPU內部的中斷系統,也可以分散在各個中斷源。

中斷判優邏輯

  • 硬件排隊

一種為鏈式排隊器,對應INTR分散在各個中斷源的情況,參考IO程序中斷方式。另一種排隊器設在CPU內部,結構如下:

  • 軟件排隊

通過編寫查詢程序實現。

8.4.3 中斷服務程序入口

硬件向量法 利用硬件產生向量地址,再由向量地址找到中斷服務程序的入口地址。向量地址可以利用排隊器的輸出通過一個編碼電路形成。 通常有兩種方式,向量地址內存單元放置的是:無條件轉移指令,或者設置向量表,存儲單元內容為入口地址。 硬件向量法尋找入口地址速度快,在現代計算機被普遍采用。

軟件查詢法 不涉及硬件方法,查詢時間較長。

8.4.4 中斷響應

響應中斷的條件 CPU能夠響應中斷的條件是 允許中斷觸發器EINT 為1。

響應中斷的時間 CPU總是在指令執行周期結束後,響應中斷。在一個指令的執行周期結束後,統一向中斷源發送查詢信號,如果有中斷就進行響應。 某些計算機中有些指令的執行時間很長,可在指令執行周期過程中設置若幹個查詢端點。

中斷隱指令 中斷隱指令是機器指令系統中沒有的指令,在中斷周期中硬件自動完成的一條指令。具體操作如下:

  • 保護程序斷點

將當前程序計數器PC的內容保存到存儲器。可以存入在存儲器的特定單元(0號地址)或者存入堆棧。

  • 尋找中斷服務程序入口地址

使用硬件向量法或者軟件查詢法。

  • 關中斷

單重中斷開始響應中斷時就關中斷,避免受到其他中斷源的影響。以下為硬件關中斷的示意圖:

8.4.5 保護現場和恢復現場

保護現場

  • 程序斷點(PC的內容):由中斷隱指令完成。
  • 保護CPU內部各寄存器的內容:在中斷服務程序中由用戶或系統用機器指令編程實現。

恢復現場 將寄存器的內容恢復到中斷處理前的狀態,由中斷服務程序完成。

8.4.6 中斷屏蔽技術

中斷屏蔽技術主要用於多重中斷。 實現多重中斷的條件

  • 提前設置開中斷指令。
  • 隻有優先級更高的中斷才能打斷當前的中斷服務。

屏蔽技術 排隊器分散在接口上時,單個中斷請求接口電路如下,隻有屏蔽觸發器為MASK為0時才能發出中斷請求。

排隊器集成在CPU內部時,加上屏蔽條件,組成具有屏蔽功能的排隊器:

將所有屏蔽觸發器組合在一起,構成一個屏蔽寄存器,屏蔽寄存器的內容稱為屏蔽字。屏蔽字和中斷源的優先級是一一對應的,如下圖:

屏蔽技術改變優先級 優先級分為相應優先級和處理優先級。

  • 響應優先級是CPU響應各中斷源請求的優先次序,一般是硬件線路設置,不便於改動。
  • 處理優先級是CPU實際對中斷源的處理的優先次序。屏蔽技術可以給中斷源設置屏蔽字來改變中斷源的處理優先級。

假設現在有4個中斷源,響應優先級為$Arightarrow Brightarrow Crightarrow D$,CPU執行中斷程序過程如下圖:

對中斷源的屏蔽字進行修改:

此時CPU執行過程如下:

可以看到,CPU依然按照響應優先級進行響應,但是在開中斷之後,會被處理優先級更高的中斷源打斷。

多重中斷的斷點保護 中斷系統對斷點的保護是在中斷周期有中斷隱指令實現的,對用戶透明。程序斷點可以保存在以下位置:

  • 堆棧:由於堆棧先進先出的特點,可以準確回到程序間斷處。
  • 特定存儲單元:可以約定程序斷點一律保持到0地址單元,為瞭避免之前存入的斷點被覆蓋,必須先將0地址的內容轉存到其他地址單元中。

第9章 控制單元的功能

9.1 微操作命令分析

控制單元具有發出各種微操作命令(控制信號)序列的功能。

9.1.1 取值周期

取指令的過程可以歸納為以下操作:

  • $PClongrightarrow MAR$
  • 向主存發出讀命令$1longrightarrow R$
  • $M(MAR)longrightarrow MDR$
  • $MDRlongrightarrow IR$
  • $(PC)+1longrightarrow PC$

9.1.2 間址周期

  • $Ad(IR)longrightarrow MAR$
  • 向主存發出讀命令$1longrightarrow R$
  • $M(MAR)longrightarrow MDR$
  • $MDRlongrightarrow Ad(IR)$

9.1.3 執行周期

不同指令的執行周期的微操作是不同的,下面分情況進行討論: 非訪存指令

  • 清除累加器指令CLA,$0longrightarrow ACC$。
  • 累加器取反指令COM,$overline{ACC}longrightarrow ACC$。
  • 算術右移一位指令SHR,$L(ACC)longrightarrow R(ACC),ACC_0longrightarrow ACC_0$。
  • 循環左移移位指令CSL,$R(ACC)longrightarrow L(ACC),ACC_0longrightarrow ACC_n$。
  • 停機指令STP

訪存指令 這類指令在執行階段需要訪問存儲器。

  • 加法指令
  • 存數指令
  • 取數指令

轉移類指令

  • 無條件轉移指令JMP X,$Ad(IR)longrightarrow PC$。
  • 條件轉移指令,以BAN X為例,若上一條指令運行結果為負則轉到X,否則繼續執行,記作$A_0cdot Adleft( IR right) +overline{A_0}cdot left( PC right) longrightarrow PC$,其中$A_0$為上一條指令運行結果的最高位。

9.1.4 中斷周期

中斷周期要使用中斷隱指令保存斷點、尋找中斷服務程序入口地址、硬件關中斷。假設斷電保存在主存0號地址,采用硬件向量法尋找入口地址。

  • $0longrightarrow MAR$,若將斷點存入堆棧,則$(SP)-1longrightarrow SP,SPlongrightarrow MAR$
  • $1longrightarrow W$
  • $PClongrightarrow MDR$
  • $MDRlongrightarrow M(MAR)$
  • $向量地址longrightarrow PC$
  • 關中斷$0longrightarrow EINT$

9.2 控制單元的功能

9.2.1 控制單元外特性

以下為控制單元的外特性框圖:

輸入信號

  • 時鐘信號:完成每個操作需要時間,時鐘信號使得控制單元按一定的先後順序、一定節奏發送各個控制信號。一個時鐘脈沖發出一個操作命令,或者一組可以同時執行的操作命令。
  • 指令寄存器:指令的操作碼字段是控制單元的輸入信號,和時鐘信號配合產生不同控制信號。
  • 標志:指令的執行有時依賴CPU當前所處的狀態。
  • 來自控制總線的控制信號:如,中端請求、DMA請求。

輸出信號

  • CPU內部控制信號:用於CPU內部寄存器之間的傳送和控制ALU實現不同功能。
  • 送至系統總線(控制總線)的信號:主存和I/O設備的讀寫命令、中斷響應等。

9.2.2 控制信號舉例

不采用CPU內部總線的方式 按一定時序控制門電路的開關,如下:

采用CPU內部總線方式 也是按一定時序打開對總線和部件之間的線路進行開關控制,如下:

9.2.3 多級時序系統

機器周期 機器周期是指令執行過程中的一個基準時間。確定機器周期需要指令執行的步驟和每一步驟所需時間,有以下策略:

  • 以完成最復雜指令功能時間為基準:對於簡單指令來說該基準執行會造成浪費。
  • 以訪問一次存儲器的時間為基準。

時鐘周期 一個機器周期裡可完成若幹微操作,每個時鐘周期(節拍)完成一個或幾個需要同時執行的操作。時鐘周期是計算機操作的最小時間單位。

多級時序系統 每個指令周期內的機器周期數可以相等也可以不等,每個機器周期內的節拍數可以等也可以不等:

  • 定長的機器周期
  • 不定長的機器周期:適用於操作比較簡單的指令,可跳過某些時鐘周期,從而縮短指令周期。

一般而言CPU主頻越高,機器的運行速度越快,但也和機器周期中含時鐘周期數和指令周期含機器周期數有關: $MIPS=frac{CPUtext{主頻}}{text{平均每條指令所含時鐘周期數量}times 1,000,000}$

9.2.4 控制方式

同步控制

  • 定長的機器周期

采用最長的微操作序列和最繁的微操作作為標準,采用完全統一的,具有時間間隔和相同數目節拍的機器周期運行不同指令。對於較簡單指令,造成時間上的浪費。

  • 不定長的機器周期

每個機器周期內的節拍數可以不等,可解決微操作執行時間不一的問題。通常把大多數微操作安排在一個較短的機器周期內完成,對於復雜的微操作,采用延長機器周期或增加節拍的方法。

  • 中央控制和局部控制相結合

大部分指令安排在統一的、較短的機器周期內完成。少數操作復雜的指令中的某些操作(如乘除法和浮點運算)采用局部控制方式完成。

局部節拍的每一個節拍寬度和中央控制節拍的寬度相同。局部控制的節拍要和作為中央控制節拍的延續,保證局部控制和中央控制的同步。

異步控制 采用應答方式。可以使得CPU沒有空閑狀態,結構比同步控制復雜。

聯合控制方式 同步控制和異步控制相結合。大部分統一、小部分區別對待。

人工控制方式 為瞭調機和軟件開發的需要,在機器面板或內部設置一些開關或按鍵。

  • Reset鍵:使計算機處於初始狀態。
  • 連續或單條執行轉換開關
  • 符合停機開關

第10章 控制單元設計

本章主要介紹控制單元的兩種設計方法——組合邏輯設計和微程序設計。

10.1 組合邏輯設計

10.1.1 組合邏輯設計框圖

指令的操作碼是決定控制單元發出不同控制信號的關鍵。為瞭簡化控制單元的邏輯,假設IR中的$n$位操作碼經過譯碼產生$2^n$個輸出信號,每一個輸出信號對應一個微操作。

10.1.2 微操作節拍安排

安排微操作的節拍應該註意以下:

  • 有些微操作的次序不容改變。
  • 凡是能夠在一個節拍內完成的微操作,盡量安排在同一個節拍並行完成。
  • 有些微操作的執行時間不長,可以將他們安排在一個節拍內完成,允許這些微操作有先後順序。

10.1.3 組合邏輯設計的步驟

列出微操作命令的操作時間表 寫出每一個節拍內要進行的微操作。

寫出微操作命令的最簡邏輯表達式 列出微操作命令的邏輯表達式,表明控制該微操作的的信號在哪些指令的哪些階段哪些節拍會有效。要求能夠利用現有的電路實現邏輯表達式。

畫出微操作命令的邏輯圖 根據邏輯表達式畫出邏輯圖。實際上需要考慮門的扇入系數。

10.2 微程序設計

10.2.1 微程序設計思想

為瞭克服組合邏輯控制單元線路龐雜的缺點,采用與存儲程序類似的思想來解決微操作命令序列的形成。 微程序設計省去瞭組合邏輯設計過程中對邏輯表達式的化簡,控制信號以二進制代碼存儲,可以通過修改微指令代碼,改變操作內容,便於調試、修改,有利於計算仿真。

一條機器指令對應一個微程序,一個微程序包含多個微指令,微指令存儲在ROM中,一個微指令一般對應多個能夠並行執行的微操作命令。

10.2.2 微程序控制單元框圖

機器指令對應的微程序 微程序設計方法設計控制單元的過程:根據機器指令所需的微操作命令的先後順序,編寫每一條機器指令對應的微程序。 可以將一些機器指令共有的操作統一編成同一個微程序,如取值周期微程序、間址周期微程序、中斷周期微程序。

微程序控制單元基本框圖 微指令存儲在控制存儲器中,通過順序邏輯部件產生下一條微指令的地址。

微指令的格式如下,包括操作控制部分和順序控制部分。操作控制部分指令要進行的微操作,順序控制指明下條微指令的地址。

10.2.3 微指令編碼方式

直接編碼方式 指令的操作控制部分的每一個“1”直接對應一個微操作。這種方式含義清晰,微指令從控存中讀出就能發出控制命令,速度快。但是由於$n$個位隻能對應$n$個操作命令,需要的控存的容量很大。

字段直接編碼方式 將不能同時執行的(互斥)微操作放在同一個字段中(一個字段的譯碼輸出隻有一個位有效,對應一個微操作),一個$n$位字段通過譯碼電路譯碼產生$2^n$種輸出,對應不同的微操作。這種方式縮短瞭微指令長度,但是增加瞭譯碼電路,使得微程序執行速度稍微減慢。

字段間接編碼方式 一個字段的某些為命令還需要另一個字段中某些微命令來解釋。進一步縮短微指令字長,但是削弱瞭微指令的並行控制能力,通常作為字段直接編碼的一種富足手段。

混合編碼 把直接編碼和字段編碼混合使用,綜合考慮微指令字長、靈活性和執行速度等方面。

10.2.4 微指令序列地址的形成

由於微指令的下地址指出 顧名思義,這種方法又稱為斷定方式。

根據機器指令的操作碼形成 當機器指令放入IR之後,微指令的地址根據機器指令的操作碼經過位地址形成部件給出。

增量計數法 在很多情況下,後續微指令的地址是連續的,對於順序地址可以采用增量計數法。$left( CMAR right) +1longrightarrow CMAR$。

分支轉移 條件轉移指令,需要根據標志來決定下一條微指令的地址。微指令格式如下:

轉移方式指明判別條件,轉移地址指明轉移成功後的去向。

測試網絡 將順序控制的地址的部分字段設置為測試地址,進過測試網絡之後和非測試地址組成形成新地址。

硬件產生微程序入口地址 當電源加電後,第一條微指令的地址可由專門的硬件電路產生,也可以由外部直接向CMAR中輸入微指令的地址。該地址其實是取值周期的微程序的入口地址。

10.2.5 微指令格式

水平型微指令 一次能夠定義並執行多個並行操作的微命令。如之前談到的指令編碼格式的所有指令。

垂直型微指令 采用類似機器指令操作碼的方式。設置微操作碼字段,微操作碼規定微指令功能,通常一條微指令控制1-2種微操作,並不強調並行控制能力。

兩種微指令對比

  • 水平型微指令並行操作能力強、靈活性強。
  • 水平型微指令執行一條機器指令所需微指令數目少,速度快。
  • 水平型微指令用較短的微程序結果換取較長的微指令結果(每一條微指令執行的操作多),垂直型微指令恰恰相反。
  • 垂直型微指令和機器指令相似,水平型微指令和機器指令差別大。

10.2.6 靜態微程序設計與動態微程序設計

靜態微程序設計 微程序無需改變,控制存儲器采用ROM。

動態微程序設計 通過改變微指令和微程序來改變機器指令,有利於仿真,采用EPROM。

10.2.7 毫微程序設計

機器指令用微程序解釋,微程序又可以用毫微程序解釋,也就是微指令可以用毫微指令解釋。采用毫微程序設計的計算機優點是使用少量的控制存儲器空間來達到高度並行。

毫微程序設計采用兩級微程序的設計方法:

  • 第一級為垂直型微指令:並行功能不強,但是有嚴格的順序結構,由他確定後續微指令地址。如果隻產生一些簡單的控制信號,則可以通過譯碼直接形成微操作目錄,不必調用二級。
  • 第二級為水平型微指令:並行操作能力強,不包含後續微指令地址。

兩級微程序分別存放在兩級控制存儲器中。水平型微指令和垂直型微指令並不是一一對應的關系,而是由水平型為指令(毫微指令)組成的毫微程序去執行垂直型微指令的操作。

10.2.8 串行和並行微程序控制

完成一條微指令也分為兩個階段:取微階段和執行階段。兩個階段的的操作是在不同的部件中完成的,可以並行執行,形成二級流水。

发表回复

相关推荐

全網洗腦的「烏梅子醬」,到底是何方神聖?

眾所周知,每隔一段時間,總有一首歌會莫名其妙在全網爆火。而最近,輪到瞭李榮浩的《烏梅子醬》。這首發行於去年的歌,忽然...

· 2分钟前

馬來西亞留學真實費用公開⚠️就連中介自己都不一定懂…..建議直接收藏!

經常看到網上很多宣傳,馬來西亞留學消費水平,相當於國內三線城市,普通傢庭依舊可以承擔,首先,個人觀點:傢庭收入十幾萬...

· 3分钟前

七夕官宣婚訊,恭喜新人,虞文濤許芳銥真的挺好,我喜歡他們

大傢好,是不是很迫不及待地關心今天小編又要說什麼內容呀。沒有驚喜,隻有喜愛,我敢肯定的說,今天小編的內容一定能夠讓你...

· 3分钟前

【技术流】软件开发工具包(SDK)基础架构

SDK即Software Development Kit,软件开发工具包,辅助开发应用软件的相关二进制文件、文档、范例和工具的集合。本文不展开 ...

· 5分钟前

ITPUB专访 | 低代码的前世今生

从2014年Forrester明确提出低代码的概念以来,经过八年的发展,低代码领域基本已经有了成熟的发展,而具体到国内市场,低代 ...

· 5分钟前