2017-2018-1 20155208 《信息安全系統設計基礎》第七周學習總結
2017-2018-1 20155208 《信息安全系統設計基礎》第七周學習總結
學習目標
- 了解ISA抽象的作用
- 掌握ISA,並能舉一反三學習其他體系結構
- 了解流水線和實現方式
教材學習內容總結
4.1 Y86指令集體系結構
-
ISA(指令集體系結構)
-
一個處理器支持的指令和指令的字節級編碼
-
有8個程序寄存器:%eax、%ecx、%edx、%ebx、%esi、%edi、%esp、%ebp
-
處理器的每個程序寄存器存儲一個字,寄存器%esp被入棧、出棧、調用和返回指令作為棧指針
-
有3個一位的條件碼:ZF、OF、SF
-
Y86指令集:
movl指令分成了4個不同的指令:irmovl、rrmovl、mrmovl、rmmovl
源和目的:源可以是立即數(i)、寄存器(r)、存儲器(m)。目的可以是寄存器(r)、存儲器(m)。
-
四個整數操作指令,OPI: addl、subl、andl、xorl
它們只對寄存器數據進行操作 這些指令會設置3個條件碼:ZF、OF、SF
-
7個跳轉指令(jXX): jmp、jle、jl、je、jne、jge、jg
根據分支指令的類型和條件碼的設置來選擇分支
-
6個條件傳送指令(cmovXX): cmovle、cmovl、cmove、cmovne、cmovge、cmovg
這些指令的格式與rrmovl一樣,但是只有當條件碼滿足所需要的約束時,才會更新目的寄存器的值
-
指令編碼
每條指令需要1-6個字節不等
每條指令的第一個字節表明指令的類型:
這個字節分為兩個部分:高4位是代碼部分、低四位是功能部分
-
Y86異常
AOK:正常操作
HLT:處理器執行halt指令
ADR:遇到非法地址
INS:遇到非法指令
-
Y86程序
這個程序中,以“.”開頭的詞是匯編器命令
4.2 邏輯設計和硬件控制語言HCL
- HCL語言只表達硬件設計的控制部分,只有有限的操作集合。
- 邏輯門:
AND:&&
OR:||
NOT:!
-
多路復用器{MUX)
多路復用器根據輸入控制信號的值,從一組不同的數據信號中選出一個
在這個簡單的多路復用器中,兩個數據信號是輸入位a和b,控制信號是輸入位s
bool out=(s&&a)||(!s&&b)
-
字級的組合電路和HCL整數表達式: 位級實現
字級抽象
bool Eq=(A==B)
-
HCL中,多路復用函數是用情況表達式來描述的,這個表達式包含一系列情況,每種情況i都有一個布爾表達式selecti和一個整數表達式expri,前者表明什麽時候該選擇這種情況,後者指明的是得到的值
-
組合邏輯電路
算數/邏輯單元(ALU)是一種很重要的組合電路
-
集合關系
-
存儲器和時鐘
時鐘寄存器(寄存器):存儲單個位或字。時鐘信號控制寄存器加載輸入值。
隨機訪問存儲器(存儲器):存儲多個字,用地址來選擇該讀或該寫哪個字。
程序計數器(PC)
條件代碼(CC)
程序狀態(Stat)
4.3 Y86的順序實現
-
SEQ硬件結構
在SEQ中,所有硬件單元的處理都在一個時鐘周期內完成。
SEQ線路圖的畫圖慣例:
淺灰色方框表示硬件單元
控制邏輯塊是用灰色圓角矩形表示的
線路的名字在白色橢圓中說明
寬度為字長的數據連接用中等粗度的線表示
寬度為字節或者更窄的數據連接用細線表示
單個位的連接用虛線表示
-
SEQ的時序
SEQ的實現包括組合邏輯和兩種存儲器設備: 時鐘寄存器、程序計數器和條件碼寄存器
隨機訪問存儲器 寄存器文件、指令存儲器和數據存儲器
每個時鐘周期,程序計數器都會裝在新的指令地址;只有在執行整數運算指令時,才會裝載條件碼寄存器;只有在執行rmmovl、pushl或call指令時,才會寫數據存儲器;寄存器文件的兩個寫端口允許每個時鐘周期更新兩個程序寄存器。
組織計算原則:處理器從來不需要為了完成一條指令的執行而去讀由該指令更新了的狀態。
用時鐘來控制狀態元素的更新,值通過組合邏輯傳播。
-
處理器設計的幾個重要經驗:
管理復雜性是首要問題,盡量保持硬件設計的簡單。
不需要直接實現ISA。
-
一開始就保證設計正確是非常重要的。
創建一個流水線化的Y86處理器的好開端。但是,將流水線技術引入一個帶反饋的系統,當相鄰指令同存在相關時會導致出現問題。
流水線控制邏輯必須處理以下4種控制情況,這些情況是其他機制(例如數據轉發和分支預測)不能能處理的:
處理ret:流水線必須暫停直到ret指令到達寫回階段。
-
加載/使用冒險:流水線必須暫停一個周期。
預測錯誤的分支:在分支邏輯發現不應該選擇分支之前,分支目標處的幾條指令已經進流水線了。必須從流水線中去掉這些指令。
-
異常:當―條指令導致異常,我們想要禁止後面的指令更新程序員可見的狀態,並睏異常指令到達寫回階段時,停止執行。
Y86模擬器的安裝
-
構建YIS環境
解壓命令:
tar -xvf sim.tar
-
圖形界面需要安裝Tcl/Tk
sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5
- 進行文件的修改(打開文件目錄下的makefile文件夾,用leafpad或者其他記事本進行修改)
GUIMODE=-DHAS_GUI (去掉原有註釋#)
TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5
TKINC=-I/usr/include/tcl8.5
-
make clean;make
-
運行圖形界面
- 代碼運行中遇到的問題
-
問題: 無法進行install,顯示進程被占用
-
解決過程: 輸入命令
ps -aux
查看進程,用sudo kill PID
強制結束進程,之後成功安裝。
代碼托管
代碼上傳截圖:
碼雲鏈接
學習進度條
代碼行數(新增/積累) | 博客量(新增/積累 | 學習時間(新增/累積) | |
---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 |
第一周 | 5/5 | 1/1 | 8/8 |
第二周 | 120/120 | 1/1 | 12/12 |
第三周 | 100/100 | 1/1 | 15/15 |
第四周 | 80/80 | 1/1 | 9/9 |
第五周 | 50/50 | 1/1 | 6/6 |
第六周 | 350/350 | 1/1 | 12/12 |
第七周 | 120/120 | 2/2 | 15/15 |
參考資料
《深入理解計算機系統V3》學習指導
2017-2018-1 20155208 《信息安全系統設計基礎》第七周學習總結