【重學計算機】計算機組成原理

1、計算機系統概論

1. 馮諾依曼計算機組成html

  • 主機(cpu+內存),外設(輸入設備+輸出設備+外存),總線(地址總線+數據總線+控制總線)

2. 計算機層次結構程序員

  • 應用程序-高級語言-彙編語言-操做系統-指令集架構層-微代碼層-硬件邏輯層

3. 計算機性能指標算法

  • 非時間指標
    • 【字長】機器一次能處理的二進制位數 ,常見的有32位或64位
    • 【總線寬度】數據總線一次能並行處理的最大信息位數,通常指運算器與存儲器之間的數據總線的位數
    • 【主存容量】主存的大小
    • 【存儲帶寬】單位時間內與主存交換的二進制位數 B/s
  • 時間指標
    • 【主頻f】時鐘震盪的頻率 Hz;【時鐘週期T】時鐘震盪一次的時間 t
    • 【外頻】cpu與主板之間同步的時鐘頻率,系統總線的工做頻率;【倍頻】主頻與外頻的倍數 =主頻/外頻
    • 【CPI】clock cycles per instruction,執行一條指令須要的週期數(平均)
    • 【MIPS】million instructions per second,每秒執行的指令總條數 MIPS= f / CPI (忽略單位)

2、數據表示

1. 基本概念編程

  • 真值:+0101,-0100
  • 機器數: [x]原=0101

2. 幾種機器數windows

  • 原碼:x = -0101,[x]原 = 1101
  • 反碼:x = -0101,[x]反 = 1010
  • 補碼:x = -0101,[x]補 = 1011
  • 移碼:x = -0101,[x]移 = 2^n + x = 0011

PS:這裏說說對補碼與移碼本身的理解。補碼是爲了化減法爲加法方便計算機設計運算,移碼是爲了方便比較大小,用在浮點數的階碼中。緩存

補碼——任何一個有模的系統中,減法均可以經過加其補碼來表示。最簡單的例子就是以12爲模的鐘表,好比如今是3點,那麼-5個小時就等於+7個小時,都是10點。這裏7就是5的補碼。架構

移碼——數據對應關係一次挪動一下位置,使得看起來小的數真值也小。好比本來0000表示0,如今表示-128,而後0001表示-127,一直到1111表示+127,這樣就方便比較了。dom

3. 定點數與浮點數異步

定點數:小數點固定 x.xxxxxx,表示範圍受限,忘掉它吧分佈式

浮點數:數的範圍和精度分別表示。

  通常格式 :EEEE......EMMM.......M,E部分是階碼(數的範圍i),M部分是尾數(數的精度)。缺點:階碼和尾數位數不固定,太靈活了

  IEEE754格式:跟我背下來----

    32位的是(單精度):1位符號位S + 8位偏指數E + 23位有效尾數M,偏移值爲127。

    64位的是(雙精度):1位符號位S + 11位偏指數E + 52位有效尾數M,偏移值爲1023。

    真值就是(32位爲例) N = (-1)^S * 2^(E-127) * 1.M

浮點數的特殊狀況

  E=0,M=0:機器零

  E=255,M=0:無窮大,對應於x/0

  E=255,M!=0:非數值NaN,對應0/0

ps:附上一份IEEE754文檔:https://files.cnblogs.com/files/flashsun/7542008-2008.pdf

4. 數據校驗

  • 基本原理:增長冗餘碼
  • 碼距:合法編碼之間不一樣二進制位數的最小值
  • 碼距與檢錯、糾錯能力
    • 碼距 d>=e+1:檢查e個錯誤
    • 碼距 d>=2t+1:糾正t個錯誤
    • 碼距 d>=e+t+1:同時檢查e個錯誤,並糾正t個錯誤。(e>=t)

PS:這裏說下個人理解,增長碼距就是增長非法編碼的數量,看到非法編碼就算檢查出錯誤了,而非法編碼距離哪一個合法編碼比較進就認爲正確的應該是什麼(簡單理解,可參考下面的圖),也就是能夠糾正錯誤。這裏看到過一個好的幾何理解圖,仔細品味下:

舉個例子:好比一共有8位,碼距爲1則檢查不出任何錯誤,由於全部編碼都是合法編碼。若是碼距爲2,那合法編碼應該像 00000000,00000011,00001100,00001111這樣,那若是出現00000001這樣的非法編碼就出錯了,可檢查一位錯,但若是兩位同時錯了,則有可能又跳到另外一個合法編碼上了,就檢查不出2位錯。

那若是碼距是3,那合法編碼應該像 00000000,00000111,00111000,00111111 這樣,那若是出現一位錯 00000001,或者兩位錯00000011,都是非法編碼,都能檢查出錯誤,而且此時能夠糾正00000001爲00000000,糾正00000011爲00000111。可是三位同時錯就檢查不出了。

常見校驗策略:奇偶校驗,CRC校驗,海明校驗

ps:海明編碼最強視頻演示教程:https://www.youtube.com/watch?v=373FUw-2U2k

3、運算方法與運算器

1. 定點數運算及溢出

定點數加減法:減法化加法,用補碼直接相加,忽略進位

溢出:運算結果超出了某種數據類型的表示範圍

溢出檢測方法:統一思想歸納爲正正得負或負負得正則溢出,正負或負正不可能溢出

  方法1:V = XYS + XYS(XY爲兩個加數的符號位,S爲結果的符號位,_表示非),那麼V = 1則爲溢出

  方法2:V = C0 ⊕ C1(C0是最高數據位產生的進位,C1是符號位產生的進位),那麼V = 1則爲溢出

  方法3:V = Xf1 ⊕ Xf2(數據採用變型補碼 Xf1Xf2 X0X1X2X3...  )

PS:以上方法都是利用正正得負負負得正則溢出爲出發點的電路設計

2. 補碼一位乘法——Booth算法

[x·y] = [x]·( -y0+∑ yi2-i )

    = [x]·[ - y0 + y12-1 + y22-2 + … + yn2-n]

    = [x]·[ - y0 + (y1 - y12-1) + (y22-1 - y22-2) + … + (yn2-(n-1) - yn2-n)]

    = [x]·[(y1 - y0) + (y2 - y1) 2-1 + … + (yn - yn-1) 2-(n-1) + (0 - yn)2-n]

總結起來設計數字電路的規則就是:

  • 爲00或者爲11的時候,直接右移一位
  • 爲01的時候,加x的補,而後右移一位
  • 爲10的時候,加-x的補,而後右移一位

PS:其實第一行和最後一行都能設計數字電路,爲何要從第一個式子推到最後一個式子呢?緣由有兩點:

  1)二進制中若是有0,能夠不進行運算

  2)若是有連續的1能夠減小計算次數,好比 a * 001111100 = a * (010000000 - 0000000100)

因此每次判斷 yn+1 - yn就能夠減小計算次數了

參考:http://www.javashuo.com/article/p-hetbqbox-bh.html

3. 定點數除法 --- 略,沒找到好的資料

4. 浮點數加減法

  (1)求階差,階碼小的對齊大的

  (2)尾數加減

  (3)結果規格化

4、存儲系統

1. 存儲系統層次結構

主存速度緩慢的緣由:主存增速與CPU不一樣步,執行指令期間屢次訪問主存

主存容量不足的緣由

  • 存在制約主存容量的技術因素:如由CPU、主板等相關技術指標規定了主存容量
  • 應用對主存容量需求不斷擴大:window98 -- 8M,windows 8 -- 1G

   -----> 存儲體系結構化層次:  CPU -- Cache1 -- Cache2(解決速度) -- 主存 -- 輔存(解決容量)

存儲體系結構化層次理論基礎

  • 時間局部性:程序體現爲循環結構
  • 空間局部性:程序體現爲順序結構

2. 主存中的數據組織

存儲字長:主存的一個存儲單元所包含的二進制位數,目前大多數計算機主存按字節編址,主要由32爲和64位

數據存儲與邊界的關係

  • 按邊界對齊的數據存儲,未按邊界對齊的數據存儲
  • 邊界對齊與存儲地址的關係:(32位爲例)
  1. 雙字長邊界對齊:起始地址最末三位爲000(8字節整數倍)
  2. 單字長邊界對齊:起始地址最末二位爲00(4字節整數倍)
  3. 半字長邊界對齊:起始地址最末一位爲0(2字節整數倍)

大端與小端存儲方式

  • 大端:最高字節地址是數據地址(0123存成0123)
  • 小端:最低字節地址是數據地址(0123存成3210)

3. 存儲器分類

  • SRAM存儲器:存取速度快,但集成度低,功耗大,作緩存
  • DRAM存儲器:存取速度慢,但集成度高,功耗低,作主存

    DRAM刷新方式:集中刷新、分散刷新、異步刷新

4. 主存容量的擴展

  • 位擴展法:8K * 8位 --> 8K * 32位
  • 字擴展法:8K * 8位 --> 32K * 8位
  • 字位同時擴展法:8K * 8位 --> 32K * 32位

5. Cache的基本原理

  • cache的工做過程
    • 數據:cpu與cache交換字,cache與內存交換塊
    • :命中,不命中
    • :寫穿策略,寫回策略
  • 寫策略
    • 寫穿策略(write through):同時寫緩存和內存,好像穿過緩存同樣。若不命中,先寫到主存中,並選擇性地同時分配到緩存中(寫分配/非寫分配)
    • 寫回策略(write back):寫到緩存後無論了,只有當緩存的內容替換回主存時再管,需有髒位。好像隔段時間後再寫回到主存中同樣
  • 地址映射機制
    • 相聯存儲器:地址自己包含着位置啊可比較的信息啊等內容信息,可根據區分地址內容進行尋址
    • 主存地址 = 塊地址 + 塊內偏移地址 = (Tag + Index) + 塊內偏移地址
    • cache結構
      • 好多行,每行與主存塊大小相等
      • 每行 = tag + data + valid + dirty
    • 三種映射方式
      • 全相聯:cache行號 = random(內存塊號)
      • 直接相聯:cache行號 = 內存塊號 % cache行數
      • 組相聯:二者結合。8行1路組相聯就是全相聯,8行8路組相聯就是直接相聯
  • 替換算法
    • 先進先出法-FIFO
    • 最近最不常用法-LFU
    • 近期最少使用法-LRU
    • 隨機替換法

6. 虛擬存儲器

  • 解決問題:主存容量不足。但願向程序員提供更大(比主存大)的編程空間
  • 分類:頁式,段式,段頁式
  • 頁式實現方式:MMU(Memory Management Unit) + 頁表 + TLB(Transaction Lookaside Buffer:地址轉換後備緩衝器)
  • 頁式轉換過程:虛擬地址 = 虛擬頁號 + 頁內偏移 ==> 物理頁號 + 頁內偏移

7. RAID

    • 概念:獨立磁盤構成的具備冗餘能力的陣列(Redundant Arrays Independent Disks)
    • 核心技術:使用異或運算恢復數據 (x⊕y = z  --> x = y⊕z)
    • 分類
      • RAID0:條帶均勻分佈
        磁盤0 磁盤1 磁盤2 磁盤3
        D0 D1 D2 D3
        D4 D5 D6 D7
        D8 D9 D10 D11
      • RAID1:以鏡像爲冗餘方式
        磁盤0 磁盤1
        D0 D0
        D1 D1
        D2 D2
      • RAID3/4:有校驗盤
        磁盤0 磁盤1 磁盤2 校驗磁盤
        D0 D1 D2 P0
        D3 D4 D5 P1
        D6 D7 D8 P2
      • RAID5:校驗信息分佈式
        磁盤0 磁盤1 磁盤2 磁盤3
        D0 D1 D2 P0
        D3 D4 P1 P5
        D6 P2 D7 D8
        P3 D9 D10 D11
      • RAID10/01:10是先鏡像再條帶化,01是先條帶化再鏡像
      • RAID50:先RAID5,再條帶化

5、指令系統

1. 指令系統基本概念

  • 指令集:一臺機器全部指令的集合。系列機(同一公司不一樣時期生產);兼容機(不一樣公司生產)
  • 指令字長:指令中包含的二進制位數,有等長指令變長指令
  • 指令分類
    • 根據層次結構:高級、彙編、機器、微指令
    • 根據地址碼字段個數:零、1、2、三地址指令
    • 根據操做數物理位置
      • 存儲器-存儲器(SS)
      • 寄存器-寄存器(RR)
      • 寄存器-存儲器(RS)
    • 根據指令功能:傳送、算術運算、位運算、控制轉移
  • 指令格式:操做碼+數據源+尋址方式

2. 尋址方式

  • 指令尋址方式:順序尋址,跳躍尋址
  • 操做數尋址方式
    • 當即數尋址:地址碼字段是操做數自己 MOV AX, 200H
    • 寄存器尋址:地址碼字段是寄存器地址 MOV AX, BX
    • 直接尋址:地址碼字段是內存地址 MOV AX, [200H]
    • 間接尋址:地址碼字段是內存地址的地址 MOV AX, I[200H]
    • 寄存器間接尋址:地址碼字段是存內存地址的寄存器地址 MOV AX, [BX]
    • 相對尋址:操做數地址 + 當前PC的值
    • 基址尋址:操做數地址 + 基址寄存器的值(一段程序中不變) MOV AX, 32[B]
    • 變址尋址:操做數地址 + 變址寄存器的值(隨程序不斷變化) MOV AX, 32[SI]

3. MIPS

  • 三種指令格式
    • R型指令:
      6bits 5bits 5bits 5bits 5bits 6bits
      000000 Rs Rt Rd shamt funct
    • I型指令:
      6bits 5bits 5bits 16bits
      OP Rs Rt 當即數
    • J型指令:
      6bits 26bits
      OP 當即數

6、中央處理器

1. CPU的組成與功能

  

2. 數據通路

  • 概念:執行部件間傳送信息的路徑,分共享通路(總線)和專用通路
  • 抽象模型:時鐘驅動下,A --> 組合邏輯 --> B
  • D觸發器定時模型
    • 時鐘觸發前要穩定一段時間:創建時間(Setup Time)
    • 時鐘觸發後要穩定一段時間:保持時間(Hold Time)
    • 時鐘觸發到輸出穩定的時間:觸發器延遲(Clk_to_Q)
    • 與時鐘週期的關係
      • 時鐘週期 > Clk_to_Q + 關鍵路徑時延 + Setup Time
      • Clk_to_Q + 最短路徑時延 > Hold Time

3. 指令週期

  •  指令執行的通常流程

  • 基本概念 
    • 時鐘週期 = 節拍脈衝 = 震盪週期
    • 機器週期 = CPU週期 = 從主存讀取一條指令的最短期
    • 指令週期 = 從主存讀指令並執行指令的時間

  • 指令時間控制
  機器週期數 節拍數 同步方式 實踐
定長指令週期 不變 不變 按機器週期 mips單週期
變長指令週期 按時鐘週期 mips多週期

 

4. CPU設計

  略,詳情請參見《自制CPU系列》

7、總線

1. 系統總線的特性及應用

  • 總線概念:將計算機系統中各部件鏈接起來
  • 總線分類:(外部/內部,系統/非系統,串行/並行,同步/異步...)
    • 按用途分類
      • 存儲總線:cpu與存儲器
      • 系統總線:鏈接存儲總線和IO總線的中間總線
      • IO總線:鏈接外部設備
    • 按位置分類
      • 外部總線:USB,火線(IEEE1394)
      • 內部總線:PCI(連網卡),AGB(連顯卡)
      • (芯)片內總線:AMBA(ARM處理器)
    • 按組成分類
      • 數據總線:傳數據,雙向三態
      • 地址總線:傳地址,單向三態
      • 控制總線:控制信號和時序信號
      • 電源線和地線:略

2. 總線性能和總線事物

  • 總線的性能參數
    • 總線頻率:總線工做速率f,單位是MHz
    • 總線寬度:數據總線的寬度w,單位是bit
    • 總線傳輸速率:總線傳輸數據量BW,單位是MB/s。BW = w / 8 * f
  • 總線事務
    • 概念:從請求總線到完成使用的操做序列(請求 - 裁決 - 地址傳輸 - 數據傳輸 - 總線釋放)
    • 角色:主設備(CPU,DMA)和從設備
    • 四個階段:請求與仲裁 - 傳輸 - 尋址 - 結束
    • 常見總線操做:讀,寫,讀修改寫,寫後讀,塊操做

3. 總線鏈接方式

  • 單總線結構

    

  • 雙總線結構

    

  • 多總線結構

     

  • 總線橋:不一樣速率總線之間的鏈接,起速度緩衝、電平轉換、控制協議轉換的做用
    • 多級總線結構(南北橋)

      

    • 單總線結構

      

  • 總線結構對系統性能的影響
  多總線 單總線
對最大存儲容量 不影響 因要與io共享內存,影響
對指令系統 增長IO指令 無IO指令
對吞吐量

 

4. 總線仲裁和數據傳輸方式

  • 菊花鏈式串行總線仲裁:簡單,只要有一個主設備佔用總線,其餘就佔不了
  • 集中式並行總線仲裁
    • 固定優先級策略:優先級高的主設備,總會優先控制總線權
    • 輪叫式策略:皇帝輪流作
    • LRG策略:最近得到控制權的,再得到控制權的優先級高(常常用的就更容易得到總線控制權)

5. 總線標準

    • 概念:計算機各部件之間利用總線傳輸信息應遵照的協議和規範,包括硬件和軟件兩部分
    • 常見的總線標準
      • 機箱內部總線:
        • ISA - EISA - VESA
          • ISA(Industrial Standard Architecture):最先指定的總線技術標準,總線寬度8/16位,頻率5-8MHz,帶寬5-8MB/s
          • EISA:寬度變成32位
          • VESA:寬度變成64位
        • PCI(PCIe) - AGP
          • 主要用於系統總線和IO總線,取代ISA
          • 地址總線和數據總線分時複用,支持即插即用(自動尋找驅動程序)
          • 32/64位,133/264MB/s
      • 機箱外部總線:
        • USB等...

8、輸入輸出系統

1. 輸入輸出系統概述

  • 組成:外設、接口、總線、管理軟件
  • 基本功能
    • 完成計算機內外的信息傳遞
    • 保證CPU正確選擇輸出設備
    • 利用緩衝等,實現主機與外設的速度匹配
  • 特色:異步性、實時性、設備無關性
  • 輸入過程:CPU把地址值放入總線 --> CPU等候設備數據有效 --> CPU從總線讀入數據存入寄存器
  • 輸出過程:CPU把地址值放入總線 --> CPU把數據值放入總線 --> 設備等數據有效取走數據
  • IO系統性能:存儲IO、通訊IO
    • 鏈接特性:哪些設備能夠和IO相連
    • IO系統容量:IO系統能夠容納的設備數
    • 響應時間:從用戶輸入命令到獲得結果所花的時間(s)
    • 吞吐率:單位時間完成的IO操做次數(用IOP表示)

2. 輸入輸出方式

  • 無條件IO方式:執行IO指令時,CPU默認外設已經準備就緒,外設很難知足這一點
  • 程序控制IO方式:執行IO指令時,先獲取設備狀態(設備狀態寄存器),決定下一步操做(程序決定)
    • 數據要通過CPU,CPU還要浪費大量時間查詢設備狀態
  • 中斷IO方式:外設主動通知CPU接收或輸出數據,有實時性
  • DMA方式:由硬件執行IO,外設準備好後通知DMA,DMA接管總線,完成數據交換
    • 既有中斷的優勢,又下降了服務的開銷
  • 通道和IO處理機方式:外設種類不少速度差異很大,將外設管理工做從CPU總分離出來
    • 通道自己就是個簡單的CPU,執行IO指令的處理機
    • IO處理機是通道的進一步發展,更像一個CPU了

3. 中斷請求與響應

  • 概念:CPU由內部外部事件引發CPU中斷正在運行的程序,具備隨機性(符合輸入輸出系統特性)
  • 做用:主機與外設並行;故障處理;實時處理
  • 類型
    • 內部中斷(軟件、異常)
    • 外部中斷(可屏蔽中斷INTR、不可屏蔽中斷NMI)
  • 基本功能
    • 中斷信號的保持與清除:經過寄存器存起來,處理完清零
    • 中斷優先級:硬件響應優先序、軟件服務優先序(中斷服務程序開頭,設置本身的中斷屏蔽位)
    • 中斷源識別:系統分配給每一箇中斷源的代號(中斷號),中斷號獲取能夠用硬件或軟件方式
    • 中斷處理
      • 響應:每執行完一條指令,就會判斷是否有中斷請求
      • 處理:保存斷點(返回地址)、執行中斷程序、返回斷點
    • 中斷控制
      • 中斷觸發方式:指外設以什麼邏輯信號去申請中斷(邊沿觸發、電平觸發)
      • 中斷排隊方式:按優先級、循環輪流排隊
      • 中斷嵌套:中斷正在執行的中斷程序,不可屏蔽中斷不能嵌套
      • 中斷屏蔽:處理器內部有個觸發器,「1」時纔會響應外部中斷

 

4. DMA方式

  • 原理:數據傳送不通過CPU,由DMA控制器實現內存和外設、外設和外設之間的直接快速傳遞
  • 系統構成
    • DMA做爲主設備之一
    • DMA與IO接口集成
    • DMA提供專門IO總線
  • DMA的兩種工做狀態:被動態(未得到總線控制權,受CPU控制)、主動態(得到總線控制權)
  • 傳輸步驟
    • 申請:一個設備接口試圖經過總線向另外一個設備發送數據,先向CPU發送DMA信號
    • 響應:CPU收到DMA信號,當前總線週期結束後,按DMA信號優先級響應相應的DMA控制器
    • 數據傳送:DMA收到CPU響應,得到總線控制權,開始直接數據傳送
    • 傳送結束:設備向CPU發送DMA結束信號,交換總線控制權
  • DMA操做類型
    • 數據傳送:源地址數據傳到目的地址
    • 數據校驗:不傳輸,只校驗某數據塊內部的每一個字節
    • 數據檢索:不傳輸,只在制定內存區域內查找某個關鍵字或某幾個數據位是否存在
  • DMA操做方式
    • 單字節傳輸模式:每次DMA操做傳送一個字節
    • 塊傳輸模式:每次傳送多個字節,有個當前字節計數器,+1 +1 +1
    • 請求傳輸模式:DMA控制器詢問外設,當外設請求信號無效時,暫停傳輸(不釋放總線);再次有效再繼續傳輸
    • 級聯傳輸模式:多個DMA級聯,分佈式
  • DMA傳輸模式
    • 中止CPU訪問內存:傳輸速率高的設備傳輸時有優點
    • 週期挪用:DMA挪用一個或幾個內存週期。若此時CPU不須要訪存則不衝突,若衝突則DMA優先
    • DMA與CPU交替訪存:直接交替訪存,不須要浪費時間
相關文章
相關標籤/搜索