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位爲例)
- 雙字長邊界對齊:起始地址最末三位爲000(8字節整數倍)
- 單字長邊界對齊:起始地址最末二位爲00(4字節整數倍)
- 半字長邊界對齊:起始地址最末一位爲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型指令:
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
- 機箱外部總線:
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交替訪存:直接交替訪存,不須要浪費時間