軟體設計師考試重點1 計算機組成與體系結構
- 一、 資料的表示
- 1. 進制轉換
- 2. 原碼/反碼/補碼/移碼
- 3. 數值表示範圍
- 4. 浮點數的運算
- 二、運算器與控制器
- 1. 計算機結構
- 2. 計算機五大組成部分:
- 3. CPU組成部分:
- 4. 控制器組成部分:
- 5. 運算器組成部分:
- 6. Flynn分類法
- 7. 指令的基本概念
- 8. 尋址方式
- 9. CISC與RISC
- 常見的CISC指令集:x86指令集
- 常見的RISC指令集: ARM指令集
- 國産的RISC指令集: 龍芯 指令集
- 新興的RISC指令集:RISC-V
- 五、流水線技術
- 1. 流水線概念
- 2. 流水線計算
- 3. 超标量流水線
- 4. 流水線吞吐率計算
- 六、存儲系統
- 1. Cache
- 局部性原理與命中率
- 映像
- 2. 主存-編址與計算
- 七、總線系統
- 八、可靠性
- 串聯系統
- 并聯系統
- 複合系統
- 九:校驗碼
- 1. 基礎知識
- 2. 奇偶校驗
- 3. 循環備援校驗碼
- 4. 海明碼
一、 資料的表示
1. 進制轉換
- R進制轉十進制使用按權展開法。
- 十進制轉R進制使用短除法。
2. 原碼/反碼/補碼/移碼
- 正數的原碼、反碼、補碼是相同的。
-
負數:
– 原碼:原始資料;
– 反碼:原碼除符号位求反;
– 補碼:在反碼基礎上加1;
– 移碼:在補碼的基礎上,符号位取反。
3. 數值表示範圍
碼制 | 定點整數 | 定點小數 |
原碼 | 至 | 至 |
反碼 | 至 | 至 |
補碼 | 至 | 至 |
移碼 | 至 | 至 |
4. 浮點數的運算
浮點數表示:
浮點數的運算順序:
- 對階
- 尾數計算
- 結果格式化
運算要點:
- 一般尾數用補碼,階碼用移碼
- 階碼的位數決定數的表示範圍,尾數位數決定數的有效精度
- 對階時,小數向大數看齊
- 對階是通過較小數的尾數右移實作的
二、運算器與控制器
1. 計算機結構
2. 計算機五大組成部分:
- 運算器
- 控制器
- 存儲器:分主存(記憶體儲器)、輔助存儲器
- 輸入裝置
- 輸出裝置
3. CPU組成部分:
- 運算器
- 控制器
- 寄存器組
4. 控制器組成部分:
- 程式計數器 PC:存儲下一條要執行指令的位址
- 指令寄存器 IR
- 位址寄存器 PR 記錄CPU目前通路的位址
- 指令譯碼器
- 時序部件:時鐘
5. 運算器組成部分:
- 算術邏輯單元ALU:資料計算和邏輯運算
- 累加寄存器 AC:為ALU提供一個工作區,用暫存資料
- 資料緩沖寄存器 DR:寫記憶體時,暫存指令和資料
- 狀态條件寄存器PSW(這個比較特殊,曆年考試它算在運算器還是控制器不一定):存狀态标志和控制标志。
6. Flynn分類法
體系結構類型 | 結構 | 關鍵特性 | 代表 |
單指令流單資料流 SISD | 控制部分:1個 處理器:1個 主存子產品:1個 | 單處理器系統 | |
單指令流多資料流SIMD | 控制部分:1個 處理器:多個 主存子產品:多個 | 各處理器以異步的形式執行同一條指令 | 并行處理機 陣列處理機 超級向量處理機 |
多指令流單資料流MISD | 控制部分:多個 處理器:1個 主存子產品:多個 | 被證明不可能,至少不實際 | 目前沒有,有文獻稱流水線計算機為此類 |
多指令流多資料流MIMD | 控制部分:多個 處理器:多個 主存子產品:多個 | 能夠實作作業、任務、指令等各級全面并行 | 多處理機系統 多計算機 |
7. 指令的基本概念
一條指令是機器語言的一個語句,是一組有意義的二進制代碼,基本結構:
操作碼字段-位址碼字段
- 操作碼:指出要作什麼操作,如加、移位、存取數。
- 位址碼: 需要包含各操作數的位址及操作結果的存放位址等,從其位址結構的角度可以分為三位址指令、二位址指令、一位址指令和零位址指令。
8. 尋址方式
- 立即尋址方式:操作數直接在指令中
- 直接尋址方式:指令中存放操作數的位址
- 間接尋址方式:指令中放了位址,位址放的是操作數的位址
- 寄存器尋址方式:寄存器存放操作數
- 寄存器間接尋址方式:寄存器記憶體放的是操作數的位址
9. CISC與RISC
指令系統類型 | 指令 | 尋址方式 | 實作方式 | 其它 |
CISC 複雜指令集 | 資料多,使用頻率差别大,可變成格式 | 支援多種尋址方式 | 微程式控制技術(微碼) | 研制周期長 |
RISC 精簡指令集 | 數量少,使用頻率接近,定長格式,大部分為單周期指令,操作寄存器,隻有Load/Store操作記憶體 | 支援方式少 | 增加了通用寄存器;硬布線邏輯控制為主,适合采用流水線 | 優化編譯,有效支援進階語言 |
—以下非考試重點—
常見的CISC指令集:x86指令集
x86的指令集可分為以下4種:
- 通用指令
- x87 FPU指令,浮點數運算的指令
- SIMD指令,就是SSE指令
- 系統指令,寫OS核心時使用的特殊指令
一些指令示例:
指令 | 操作說明 |
MOV | 将源操作數傳送到目标操作數 |
ADD | 将源操作數與目标操作數相加 最後結果給到目标操作數 |
SUB | 将源操作數與目标操作數相減 最後結果給到目标操作數 |
AND | 将源操作數與目标操作數進行與運算 最後結果給到目标操作數 |
OR | 将源操作數與目标操作數進行或運算 最後結果給到目标操作數 |
XOR | 将源操作數與目标操作數進行異或運算 最後結果給到目标操作數 |
NOT | 将源操作數與目标操作數進行異非運算 最後結果給到目标操作數 |
MOVS | 資料傳送 與MOV不同處在于它可以将記憶體的資料傳送到記憶體 |
STOS | 将 AL AX EAX 的值存到EDI指定的記憶體位址 |
REP | 循環 |
PUSH | 押入 通用寄存器 記憶體位址 立即數 |
POP | 釋放。通用寄存器 記憶體位址 |
JMP | 修改EIP(存放下一條指令的位址) |
CALL | 修改EIP |
RET | CALL的傳回 |
常見的RISC指令集: ARM指令集
ARM指令集可以分為六大類:
- 跳轉指令
- 資料處理指令
- 程式狀态寄存器(PSR)處理指令
- 加載/存儲指令
- 協處理器指令
- 異常産生指令
指令 | 說明 |
ADC | 帶進位的32位數加法 |
ADD | 32位數相加 |
AND | 32位數的邏輯與 |
B | 在32M空間内的相對跳轉指令 |
BEQ | 相等則跳轉(Branch if EQual) |
BNE | 不相等則跳轉(Branch if Not Equal) |
BGE | 大于或等于跳轉(Branch if Greater than or Equa) |
BGT | 大于跳轉(Branch if Greater Than) |
BIC | 32位數的邏輯位清零 |
BKPT | 斷點指令 |
BL | 帶連結的相對跳轉指令 |
BLE | 小于或等于跳轉(Branch if Less than or Equal) |
BLEQ | 帶連結等于跳轉(Branch with Link if EQual) |
BLLT | 帶連結小于跳轉(Branch with Link if Less Than) |
BLT | 小于跳轉(Branch if Less Than) |
BLX | 帶連結的切換跳轉 |
BX | 切換跳轉 |
CDP CDP2 | 協處理器資料處理操作 |
CLZ | 零計數 |
CMN | 比較兩個數的相反數 |
CMP | 32位數比較 |
EOR | 32位邏輯異或 |
LDC LDC2 | 從協處理器取一個或多個32位值 |
LDM | 從記憶體送多個32位字到ARM寄存器 |
LDR | 從虛拟位址取一個單個的32位值 |
MCR MCR2 MCRR | 從寄存器送資料到協處理器 |
MLA | 32位乘累加 |
MOV | 傳送一個32位數到寄存器 |
MRC MRC2 MRRC | 從協處理器傳送資料到寄存器 |
MRS | 把狀态寄存器的值送到通用寄存器 |
MSR | 把通用寄存器的值傳送到狀态寄存器 |
MUL | 32位乘 |
MVN | 把一個32位數的邏輯“非”送到寄存器 |
ORR | 32位邏輯或 |
PLD | 預裝載提示指令 |
QADD | 有符号32位飽和加 |
QDADD | 有符号雙32位飽和加 |
QSUB | 有符号32位飽和減 |
QDSUB | 有符号雙32位飽和減 |
RSB | 逆向32位減法 |
RSC | 帶進位的逆向32法減法 |
SBC | 帶進位的32位減法 |
SMLAxy | 有符号乘累加(16位*16位)+32位=32位 |
SMLAL | 64位有符号乘累加((32位*32位)+64位=64位) |
SMALxy | 64位有符号乘累加((32位*32位)+64位=64位) |
SMLAWy | 号乘累加((32位*16位)>>16位)+32位=32位 |
SMULL | 64位有符号乘累加(32位*32位)=64位 |
SMULxy | 有符号乘(16位*16位=32位) |
SMULWy | 有符号乘(32位*16位>>16位=32位) |
STC STC2 | 從協處理器中把一個或多個32位值存到記憶體 |
STM | 把多個32位的寄存器值存放到記憶體 |
STR | 把寄存器的值存到一個記憶體的虛位址内間 |
SUB | 32位減法 |
SWI | 軟中斷 |
SWP | 把一個字或者一個位元組和一個寄存器值交換 |
TEQ | 等值測試 |
TST | 位測試 |
UMLAL | 64位無符号乘累加((32位*32位)+64位=64位) |
UMULL | 64位無符号乘累加(32位*32位)=64位 |
國産的RISC指令集: 龍芯 指令集
手冊雖然可以免費下載下傳,但手冊裡有一條:
不能公開散發,我~~~~~
截個圖意思一下:
新興的RISC指令集:RISC-V
指令示例:
指令 | 描述 | 例子 |
add | 加法 | |
sub | 減法 | |
and | 邏輯加法 | |
or | 邏輯或 | |
xor | 邏輯異或 |
—以上非考試重點—
五、流水線技術
1. 流水線概念
流水線是指程式執行多條指令重疊進行操作的一種準并行處理實作技術。
使用流水線執行指令:
2. 流水線計算
- 流水線周期為執行時間最長的一段
- 流水線計算公式:1條指令執行時間+(指令條數-1)*流水線周期
- 理論公式:
- 實踐公式:
3. 超标量流水線
在标準狀态下,一個處理器含一條指令流水線,超标量就是一個處理器中有多條指令流水線,機關是度。
4. 流水線吞吐率計算
流水線的吞吐率是指在機關時間内流水線所完成的任務數量或輸出的結果數量,基本公式:
流水線最大吞吐率:
六、存儲系統
1. Cache
局部性原理與命中率
- 在計算機的存儲體系中,是通路速度最快的層次(若有寄存器,則寄存器最快)。
- 使用Cache 改善系統性能的依據是程式的局部性原理。
-
如果以 h 代表對Cache的通路命中率,表示Cache的周期時間,表示主存儲器周期時間,以讀操作為例,使用“Cahce+主存儲器”的系統的平均周期為,則:
其中,(1-h)又稱為失效率(未命中率)。
映像
位址映像是将主存與Cache的存儲空間分為若幹個大小相同的頁(或稱為塊)。
映像 | 沖突率 |
直接相聯映像 | 硬體電路簡單,但沖突率最高 |
全相聯映像 | 電路難于設計和實作,隻适用于小容量的Cache,沖突率較低 |
組相聯映像 | 直接相聯與全相聯的折中 |
示例:1G的記憶體,分為2048頁,每頁512K;Cache容量8MB,每頁也是512K,劃分為16頁。
直接映像:
直接映像是指在進行映像的工作時,規定各區中的某一資訊塊隻能映像到Cache中的一個固定的資訊塊中,即主存中的第0塊映像到cache的第0個塊架構,第1塊映像到cache的第1塊,以此類推的映像方式。——百度百科
全相聯映像:
兩個不同存儲器的位址空間之間的一種映射關系,一個存儲器中的任意一塊(頁)可以映像到另外一個存儲器中的任意一塊(頁)中。——《計算機科學技術名詞 》第三版
組相聯映像:
組相聯映像方式的位址映像規則是主存儲器中某一塊隻能存入緩存的同組号的任一塊中,先分區、再分組,每個組内用全相聯映像。
2. 主存-編址與計算
存儲單元
按字編址:存儲體的存儲單元是字存儲單元
按位元組編址:存儲體的存儲單元是位元組存儲單元。
根據存儲器所要求的容量和標明的存儲晶片的容量,計算所需的晶片數:
七、總線系統
計算機硬體之間通訊的橋梁,一條總線同一時刻隻允許一個裝置發送,但允許多個裝置接收。
總線的分類:
- 資料總線
- 位址總線
- 控制總線
八、可靠性
串聯系統、并聯系統的可靠性
串聯系統
并聯系統
複合系統
……
九:校驗碼
1. 基礎知識
碼距:任何一種編碼都由許多碼字構成,任意兩個碼字之間最少變化的二進制位數就稱為資料校驗碼的碼距。
例:用4位二進制表示16種狀态,則有16個不同的碼字,此時碼距為1,如:
0000
和
0001
。
2. 奇偶校驗
奇偶校驗隻能檢查1位的錯誤,不可糾錯。
3. 循環備援校驗碼
CRC的編碼方法:在k位資訊碼之後拼接r位校驗碼。
4. 海明碼
海明碼可以用來檢錯、也可以用來糾錯。
确定校驗碼的位數x:
設資料有n位,校驗碼有x位。則校驗碼一共有種取值方式。其中需要一種取值方式表示資料正确,剩下種取值方式表示有一位資料出錯。因為編碼後的二進制串有n+x位,是以x應該滿足:
- 2-4位資料位:3位校驗位
- 5-11位資料位:4位校驗位