计算机组成与体系结构——计算机系统概述、数据表示方法
28號考計算機組成課,第一二章mooc學習筆記。
計算機系統概述
計算機組成課程介紹
核心專業基礎課課,在課程體系中起著承上啟下的作用。課程需要匯編語言、數字邏輯相關知識。
需要我們構造觀+系統觀+工程關的而學習視角和學習方法 。
馮諾依曼結構原理與結構分析
概述
①解決問題的程序輸入(如C語言 編譯成匯編語言,指令的機器碼會存在指令存儲器里)計算機的主存后才能讓CPU訪問
②按照指令地址訪問存儲器并取出指令,指令機器碼經過CPU解析,生成控制信號等
馮諾依曼計算機組成
運算器
控制器
存儲器
輸入輸出設備
鼠標鍵盤、網卡、掃描儀等
顯示器、聲卡、網卡、打印機等
軟件系統
軟件:可運行的思想和內容的數字化
思想:算法、規律、方法-----程序表達
內容:圖像、圖形、數據、聲音、文字等被處理的對象
軟件的表現形式:程序和數據
數據:以二進制表示的信息
軟件的核心:算法
軟件的分類:系統軟件+支持軟件+應用軟件
硬件與軟件系統之間的相互關系:
相互依存:硬件是軟件運行的基礎,軟件的正常運行是硬件發揮作用的重要途徑。計算機系統必須配備完善的軟件系統才能正常運行,且應充分發揮其硬件的功能
邏輯等效性:某些功能可以由硬件實現,可由軟件實現
協同發展:軟件隨硬件技術的迅速發展而發展,軟件的不斷發展又促進硬件的更新
計算機的層次結構:由上至下依次為應用程序,高級語言,匯編語言,操作系統,指令集架構層,偽代碼層(MIPS中的RWrite=1,Branch=0…),硬件邏輯層
透明性概念:本來存在的事物或屬性,從某個角度去看,卻好像不存在。如硬件的的特性對C語言程序設計者而言就具有透明性。
系統觀概念:當硬件結構發生變化時要想到可能對軟件產生的影響;不同類型的軟件對硬件有不同的要求
(并且編程是和CPU相關的,每當有新的CPU出來的時候,開發者可以去查詢,充分發揮CPU功能)
軟硬件的分界線:即軟硬件的接口,是指令操作硬件的接口,因此指令格式以及指令的設計與硬件關聯!
計算機性能評價
本節需要學習幾個指標與公式
非時間指標
1)機器字長:
機器一次能處理的二進制位數。由加法器、寄存器位數決定,一般與內部寄存器的位數相等(字長),字長越長,表示數據的范圍就越大了
2)CPU和主存之間的總線寬度:
數據總線一次能并行傳送的最大信息位數。一般指的是運算器與存儲器之間的數據總線位數
3)主存容量與存儲帶寬:
主存容量:是指一臺計算機所包含的存儲單元總數
存儲帶寬:單位時間內與主存
交換的二進制信息量。常用單位為B/s(Bps 字節每秒)
KB/s(KBps 1024字節每秒) MB/s(MBps 1024×1024字節每秒)
[數據位寬和數據傳輸速率影響它]
時間指標
1)主頻的倒數=時鐘周期
Hz:若干周期每秒,評價CPU性能
1GHz=1000MHz
1MHz=1000KHz
1KHz=1000Hz
外頻:CPU與主板之間同步的時鐘頻率
倍頻:CPU主頻與外頻之間的倍數
2)CPI:
執行一條指令平均需要的時鐘周期數(即T周期的個數)
[指令CPI分為單條指令CPI、一段程序中所有指令的CPI、指令系統CPI等]
CPI=程序中所有指令的時鐘周期數之和/程序中指令總數=Σ(程序中各類指令的CPI×程序中該類指令的比例)
例子:
3)IPC: 看上面圖的下面部分,IPC是每個時鐘周期要執行多少條指令
4)MIPS:
每秒鐘CPU能執行的指令總條數(單位:百萬條/秒)
MIPS=指令條數/(執行時間×106)
=指令條數/(所有指令CPU時鐘周期數之和/f)×106
=f/(CPI×106)
例子:
5)CPU時間: 執行一段程序所需要的時間:(CPU時間+I/O時間+存儲訪問時間+各類排隊時延等)
CPU時間 = 程序中所有指令的時鐘周期數之和×T
= 程序中所有指令的時鐘周期數之和/f
使用CPI [想下CPI的定義] 計算CPU時間:
CPU時間 = 總指令數×CPI×T
使用MIPS [想下MIPS的定義 ]計算CPU時間:CPU時間 = 指令條數/(MIPS×106)
例子:
思考:計算機性能指標是確定的嘛?算法、編程語言
編譯程序、指令集體系結構都會影響CPI MIPS CPU時間
比如算法會影響程序數量和指令類型
計算機系統概述習題
理解一下基準測試程序
(1) 對于P1:M2機器速度快,因為時間短,比M1快一倍
對于P2:M1機器速度快,比M2快一倍
(2)在M1上執行P1的速度:用MIPS標準來算就是200M/(10s×106)=20MIPS
執行P2的速度:300K/(0.003s×106)=100MIPS
在M2上執行P1的速度:…
在M2上執行P2的速度:…
進而可以比較執行速度。
(3)假設M1和M2的時鐘頻率為800MHz和1.2GHz.
在M1上執行P1的平均時鐘周期CPI為:
10×800M/(200×106)
在M2上執行P2的平均時鐘周期CPI為:…
(4)用戶大量使用程序P1,并且只關心系統的響應時間而不是吞吐率,根據性價比,選擇M1還是M2?
考慮執行時間:性價比=1/(執行時間×價格)
R越大性價比越高。
因此在大量使用P1程序時,M2性價比更高!
(5)如果另一個用戶也需要進行選擇,用戶使使用程序P1和P2一樣多,主要關心的也是系統的響應時間,也根據性價比,選擇M1還是M2?
P1和P2同等考慮,答案給出兩種計算方式:
①使用算術平均公式:(10+0.003)/2 × 5000 > (5+0.006)/2 × 8000
所以選擇M2
②使用幾何平均公式:sqrt(10×0.003) × 5000<sqrt(5×0.006) ×8000
所以選擇M1
S1和S2各有多少條指令:
S1有10條指令 S2有8條指令
CPI:
S1的CPI=(1×5+2×2+3×2+4×1)/10 = 1.9
S2的CPI=…
所含時鐘周期數、時間:
S1所含時鐘周期數=10×1.9
S1執行時間=10×1.9/500MHz
S2所含周期數=…
S2執行時間=…
——————————————————————
數據表示方法
摘要:計算機內部流動的信息可分兩大類:
①數據信息是計算機加工處理的對象
②控制信息控制數據信息加工處理的過程。
本章討論數據信息的表示方法、運算方法及實現方法。
數據信息的表示方法
為什么研究機器內的數據表示?
方便計算機硬件直接使用.包括支持的數據類型;表示的數據范圍,精度;是否利于軟件移植
1)真值:符號用+ -表示的數據方法
2)機器碼:數據符號化表示數據,用0 1表示符號
3)
三種常見的機器碼:
NO.1 首先介紹定點數:小數點位置固定的數據。
定點整數:小數點在最低位數的后面
N=DnDn-1…D1D0.
定點小數:小數點在最高位(為0)的后面,即為純小數
N=D0.D-1D-2…D-n
①原碼表示法:
X原 = X if(0≤X<2n)
= 2n-X if(-2n<X≤0)
原碼的特點:表示簡單,運算復雜,符號位不參加運算,因此我們還要設置加法器減法器。
0表示不唯一,有兩個編碼分別為00…0和10…0
n位的表示范圍:-2n-1+1~2n-1-1
②反碼表示法:
X反 = X if(0≤X<2n)
=2n+1+X-1 if(-2n<X≤0)
反碼的特點:表示相對原碼復雜,運算相對簡單
符號為參加運算,但符號位的進位應加到最低位想一想為什么呢??
0表示不唯一,有兩個編碼分別為00…0和11…1
n位表示范圍:-2n-1+1~2n-1-1
③補碼表示法
X補 = X if(0≤X<2n)
=2n+1+X if(-2n<X≤0)[mod 2n+1]
補碼的特點:表示相對原碼復雜,運算簡單
只需要設置加法器
0的表示唯一,為00…0
補碼n位表示范圍:-2n-1~2n-1-1
實際應用中使用雙,符號位補碼,使用00表示正數的符號,11表示負數的符號,為什么這么表示呢?在運算和溢出判斷中方便
理解:補碼中模的概念是符號進位所在位的權值
例如我們說8是-4對模12的補碼<=>-4的模12的補碼等于8
<1>一個負數的補碼等于模減去該負數的絕對值
<2>對于某一個確定的模,某數減去小于模的某數X,總可以用該數加上某數X的補碼來代替
(統一了減法和加法)
例如10-4 = 10+(12-4)=10+8 = 6(mod 12)
例如9828-1928=9828+(104-1928)=17900=7900(mod 104)
而在計算機中,就是使用了這種思想。
④移碼表示法:
浮點數的階碼,IEEE754中解碼用移碼表示
X移 =2n +X -2n<X ≤2n
X是真值,2n理解為是一個固定的偏移值。
例如,X=+10101時:X移=[010101]移=25+X=100000+010101=110101
可以看出,移碼中符號位表示的規律與原碼
反碼、補碼相反。
實際上:一個數的移碼數值位與補碼相同,符號位與補碼相反。
NO.2 介紹浮點數,先說定點數可以認為不用表示點了,充分利用字長表示更多的有效位。定點數的數據范圍受字長的限制。
浮點數:把數據的范圍和精度分別表示的一種數據表示方法,可以表示一些超大的數或者超小的數
①一般格式:EsE1E2…EmMsM1M2…Mk
Es位階碼位數,數據的范圍,小數點在數據中的位置
Ms為尾數的位數,決定數的精度
表示:X = 2e×m
看例子:
將X=2-01×(-0.1110)表示成機器碼的形式
8位表示,階碼占3位,位數占5位
假設階碼和位數均采用補碼
那么在機器中表示就是111 10010
但是!這樣子表示是有不足的,默認前面三位表示階碼,后面五位表示位數,但是其他系統是不一定這樣的 想想也是,這樣子肯定是有不足的
①因此我們使用統一格式:IEEE 754格式
單精度:1位符號位s 8位偏移指數(階碼)e 23位有效尾數m
雙精度:1位符號位 11位偏移指數(階碼)s 52位有效位數m
說明:
<1>此時可以將浮點數的階碼值變成非負整數,便于浮點數的比較和排序,因為移碼是真值的一種去符號化的表示,階碼之所以用移碼是因為移碼值大的指數就大,通俗點說就是把負數范圍的數表示為正數,方便比較。
<2>在IEE754中,其尾數形式默認是1.×××××,其中部分保存的是×××××(1被隱藏了),保留了更多的有效位。
<3>拿單精度為例,8位偏移指數(階碼)其實就是移碼-1,(移碼是數值位與補碼相同,符號位與補碼相反)。雙精度也一樣
為什么階碼用移碼來表示呢?我覺得是為了表達更大的數
表示:
單精度:X = (-1)s×2e-127×1.m
雙精度:X = (-1)s×2e-1023×1.m
<4>全0階碼即e=0,m非0即m≠0,表示非規格化浮點數
(對應下面表中的第二行)
看例子:
數符(1位)階碼5位(1位階符)尾數10位(1位階符)
其中,階碼5位(1位階符),采用移碼;尾數11位(1位數符),采用補碼
(這種題要審題 他不是使用IEE754進行規格化的 按題目的要求進行規格化)
(1) +10101.011B = 0.10101 011 00 × 2101
階碼:5移碼=0101移碼=10101
尾數:0.1010101100補碼=0.1010101100
因此二進制代碼形式:0 10101 1010101100
(2)-0.125D=-0.001B=-1×2-3
階碼:-3移碼=-0011移碼=01101
尾數:0.1補碼=0.1000000000
二進制代碼形式:1 01101 1000000000
為什么是1000000000
(1)
+10101.011B=1.0101011 × 2100
=(-1)0×1.0101011×24+01111111
=0 10000011 01010110000000000000000
=41AB0000H
(2)
-0.125D=-0.001B=-1.000000×2-010
=(-1)1×1.00000×2-3+01111111
=(-1)1×1.00000×201111101
=1 01111101 00000000000000000000000
=BE800000H
記住:進行轉換的時候是進行二進制編碼的
NO.3 介紹西文字符的編碼,中文編碼,由于不考,就不看了。
NO.4 十進制數的編碼
其實BCD碼是用四位二進制數來表示一位十進制數的方法!
數據信息的表示方法習題
答:題目說這兩個數都是用IEE754格式進行表示的
首先R1=0000 0000 0000 0000 0001 0000 1000 1011B
R2=1000 0000 1000 0000 0001 0000 1000 1011B
(1)在無符號加法指令中:
R1 R2對于該指令都是無符號表示的,所以其真值都是看他本身,直接R1+R2=80802116H就可以了
(2)在帶符號整數乘法指令中:
題目中給了帶符號整數的是用補碼表示,R1 R2都是整數的補碼,所以看二進制表示形式,R1是正數,R2是負數。
所以說R1真值是他本身=0000108BH,R2的真值是=-7F7FEF75H(是通過補碼轉原碼得到的!)
R1×R2=對應真值相乘
(3)在單精度浮點數減法指令中:那么R1 R2就是操作數得IEE754形式表示,也就是找到它們各自的符號位,階碼位,尾數位,然后再進行減法
首先化簡R1:
符號位為 0,階碼為00000000,尾數部分為000000000010000100011B,因此它是非規格化浮點數(階碼全0,非0尾數,指數為-126,尾數沒有隱藏的1)。所以我們用16進制(當然按理來說得用23位二進制數表示)表示尾數為:+0.002116H
R1的真值為(-1)0×0.002116H×2-126
化簡R2:
符號位為1,階碼為00000001,尾數部分為00000000001000010001011,因此它是規格化浮點數(指數為1-127=-126,尾數有隱藏的1),R2的真值為(-1)1×-1002116H×2-126
第一問和上面有一道題差不多,要時刻記得我們是使用題目要求的二進制表示形式來表示一個十進制數,所以說對于十進制數一定要先化成二進制數!
(1) +1.75D=1.11B=0.011100×22=(-1)0×0.011100×41
=(-1)0×0.011100×41+32=(-1)0×0.011100×410001
+19D=10011B=…和上面化簡思路差不多
-1/8=-0.001=- 0.1×4-1=…和上面化簡思路差不多
(2)
① 規格化浮點數的表示范圍:
最大正數
+0.111111B×411111=(0.333)4×415
最小正數:
+0.01000B×400000=(0.100)4×4-16
最大負數:
-0.010000B×400000=(-0.100)4×4-16
最小負數:
-1000000B×411111=(-1.000000)×415
① 12位定點補碼整數表示范圍:
最大正數:+011111111111=011111111111=2047
最小正數:+000000000001=000000000001= + 1
最大負數:-000000000001補=111111111111=-1
最小負數:=-10000000000補=1000000000000=-2048
① 12位定點補碼小數表示范圍:
最大正數:+0.11111111111=0.11111111111=2047/2048
最小正數:+0.00000000001=000000000001= 1/2048
最大負數:-0.00000000000補=1.11111111111
最小負數:-1.00000000000補=1.00000000000
浮點數表示范圍大,精度低;好定點數范圍小,精度
(1)+1.75=1.11B=1.11B×20
階碼為:0+127=01111111B
數符為:0
尾數為:1.11000000000000000000000
(2)+258=10000010B=1.0000001B×2sup>8
階碼為:8+127=135
數符為:0
尾數為:00000010000000000000000
數據校驗碼
為了防止出錯,要提高計算機硬件本身的可靠性,減少傳送中各環節的差錯外。可以使數據經過某種形式的編碼后,具有發現自身錯誤的特征,甚至給出錯誤所在的準確位置。具有發現錯誤,或者同時指出錯誤所在位置特征的數據編碼稱為數據校驗碼。
碼距與檢錯或糾錯能力的關系
碼距:在信息編碼中,兩個合法代碼對應位上編碼不同的位數稱為碼距,又稱海明距離。舉例如下:10101和00110從第一位開始依次有第一位、第四、第五位不同,則海明距離為3。
簡單奇偶校驗
思想:
奇偶校驗碼是一種結構最簡單的線性分組碼,在被傳送的n位信息上, 加上一個二進制位作為校驗位,使配置后的n+1位二進制代碼中1的個數為奇數或偶數。也比如奇數校驗,就是說在傳送的位數中,少一個1或多一個1成了偶數個1,那么奇校驗電路發生差錯。但是只能檢測出一位出錯,并且沒法判斷出錯的位置
根據公式:
碼距=2
實現方式:
有效信息k位+一個校驗位(加上一個校驗位使得整個編碼1的個數為奇數或偶數)
校驗檢測:
讀出編碼送入校驗電路,看讀出的代碼是否有錯,如果有錯,則"奇校驗出錯"=0,否則,“奇校驗出錯”=1
交叉奇偶校驗
思想:
計算機在進行大量字節(數據塊)傳送時,不僅每一個字節有一個奇偶校驗位做橫向校驗,而且全部字節的同一位也設置一個奇偶校驗位做縱向校驗,這種橫向、縱向同時校驗的方法稱為交叉校驗。
就是這樣子:
交叉校驗可以發現兩位同時出錯的情況,假設第2字節的A6、A4(藍色字體的)兩位均出錯,橫向校驗位無法檢出錯誤,但第A6、A4位所在列的縱向校驗位會顯示出錯,這與前述的簡單奇偶校驗相比要保險多了。
(通過理解,這種方法可以糾正一位錯誤 出錯不同行不同列兩位錯誤 一行兩位 但是四個頂點同時出錯沒辦法檢測——這個需要你畫圖,自己理解一下)
海明校驗碼
思想:
海明碼實際上是一種多重奇偶校驗,、在有效信息位中加入幾個校驗位形成海明碼,使碼距比較均勻地拉大,并把海明碼的每一個二進制位分配到幾個奇偶校驗組中。當某一位出錯后,就會引起有關的幾個校驗位的值發生變化,這不但可以發現錯誤,還能指出錯誤的位置,為自動糾錯提供了依據。
實現方式:
有效信息k位+r個校驗位 N=k+r≤2r-1
設k+r位海明碼從左到右依次為1,2,3…k+r位,r位校驗碼即為Pi(i=1,2,3…,r),分別微語k+r位海明編碼的第2i-1(i=1,2,3,…,r)其余依次放置被校驗的數據位。
校驗檢測步驟:
①根據給出的規則,b1數據位被P1 P2校驗;b2數據位被P1 P3校驗;b3數據位被P2 P3校驗;b4數據位被P1 P2 P3校驗;b5數據位被P1 P4校驗;b6…;b7…
②按照偶校驗計算出P1~P4四個校驗位的值
③設置4個指錯字,指錯字怎么來的呢?例如:G4=P4異或所校驗的分組
(思考一下正是多重奇偶校驗)
一個完整的校驗過程:
不難發現,海明編碼一個位發生變化會引起至少兩個校驗位發生變化
思想:
指錯字為0,不一定沒錯。這么想,比如上面的P1 b1 P2都出錯了,他對應G1 G2公式的偶特性并沒有發生變化,因此校驗不出來。
一位錯和兩位錯不能由指錯字區別。這么想,如果b1,b2同時出錯和僅b3同時出錯時指錯字相同
循環冗余校驗碼
思想:
基于模2運算建立編碼規律的校驗碼,可以通過模2運算來建立有效信息位和校驗位之間的約定關系。這種約定關系為:假設n是有效數據信息位位數,r是校驗位位數。則n位有效信息位與r位校驗位所拼接的數(k=n+r位長),能被一約定的數除盡。
介紹模2除運算:
要懂得模2除的基本方法
實現以及檢錯方式:
有效信息k位+r個校驗位 N=k+r≤2r-1
直接上例題吧:
①將有效信息位1100表示為多項式:
M(x)=X3+X2=1100
②R(x) = M(x)×X3 模二除 G(x)
③M(x)左移r=3位,得M(x)×X3
M(x)×X3=X6+X5=1100000
④M(x)×X3與r位余數R(x) 作“模2加”,即可求得它的CRC編碼
M(x)×X3+R(x)=1100000+010=1100010
k=4 r=3
⑤出錯校驗:
說明:海明校驗對于生成多項式的要求很高,任何一位出錯,應使余數不為零;不同位發生錯誤,都應使余數不同;用余數補零作“模2除”,應使余數循環。最高位和最低為必須為1…所以生成多項式不容易求,思考生成多項式到底是怎么求的呢??
數據校驗碼習題
傳輸信息展開為二進制形式為:
1000 1111 0011 1100 1010 1011 1001 0110
根據奇校驗公式各個校驗位為:
0 1 0 1
接收到的信息
1000 0111 0011 1100 1010 1011 1001 0110
校驗位為:
0 1 0 1
根據接收到的信息數據計算出4位奇校驗位為
1 1 0 1
將計算出的4位校驗位和接收到的4位校驗位異或
得到1、0、0、0,說明數據信息的第一個字節發生了變化,出現錯誤
①
②根據公式可以計算出各個校驗位:
③計算出故障字
3.
解答:根據上面交叉冗余校驗的步驟進行校驗即可
End:
1. 自己總結的大部分都是來自華中科技大學mooc
2. 總結內容出現錯誤在所難免,寫了大概9個多小時!
3. 學校的計組老師反正是什么都沒有教會我,教學水平與態度不敢恭維。
總結
以上是生活随笔為你收集整理的计算机组成与体系结构——计算机系统概述、数据表示方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (连载)Android 8.0 : 系统
- 下一篇: The Moon and Sixpenc