軟考-計算機組成原理與體系結構

目錄


轉載https://blog.csdn.net/Thanlon/article/details/100074645

計算機組成原理與體系結構

一、計算機組成原理與體系結構前言

內容概要:數據的表示、計算機結構、Flynn分類法、CISI與RISC、流水線技術、存儲系統、總線系統、可靠性、校驗碼。

二、數據的表示(進制的轉換)

1、任何進制的數轉換爲十進制

R(任何)進制轉換成十進制使用按權展開法,其具體操作方式爲:將R進制數的每一位數值用RK的方式表示,冪的底數是R,指數是K,K與該位置和小數點的距離有關。
當該位位於小數點左邊,K值是該位和小數點之間數碼的個數。
當該位位於小數點右邊,K值爲負值,其絕對值是該位和小數點之間數碼的個數加1
二進制轉十進制:101010.1010 = 1X25+1X23+1X21+1X2-1+1X2-3
七進制轉十進制:123456 = 1X75+2X74+3X73+4X72+5X71+6X70
八進制轉十進制:1234567 = 1X86+2X85+3X84+4X83+5X82+6X81+7X80
十六進制轉十進制:123456789ABCDEF = 1X1614+2X1613+3X1612+4X1611+5X1610+6X169+7X168+8X167+9X166+10X165+11X164+12X163+13X162+14X161+15X160

2、十進制轉換任何進制數

十進制轉換任意進制採用短除法。十進制除以任意進制數,將得到的餘數逆序排列

3、二進制轉八進制與十六進制

每三個二進制對應一個八進制,需要將二進制從右向左劃分,沒三位一組,高位位數不足補0
010 001 110 轉換成八進制:2 1 6
1000 1110 轉十六進制:8 E

同理,八進制或者16進制轉成二進制
2 1 6 轉換成二進制: 010 001 110
8 E 轉換成二進制:1000 1110

八進制與十六進制相互轉換

八進制轉十六進制:可以先將八進制轉成二進制,再將二進制轉成十六進制
十六進制轉八進制:同理,可以先將十六進制轉爲二進制,再將二進制轉成八進制

三、數據的表示(源碼、反碼、補碼、移碼

1、原碼

原碼是將一個數轉成二進制表達式,如果用一個字節存儲原碼不足8位高位補0。帶符號的情況下,最高位代表符號位表示正負。爲正數時,最高位爲0;爲負數時,最高位爲1。原碼是不可以在機器中做運算的,會出錯。爲了可以達到計算目的,引入接下來的幾種碼。

2、反碼
  • 正數的反碼:原碼相同
  • 負數的反碼:符號位不變,其它位按位取反
數值1 數值-1 1-1
原碼 0000 0001 1000 0001 1000 0010
反碼 0000 0001 1111 1110 1111 1111

反碼 1111 1111 的原碼 是 1000 0000 , 是-0。但0不分正負

3、補碼
  • 正數的補碼:與原碼反碼相同
  • 負數的補碼:在原來反碼的基礎上加1
數值1 數值-1 1-1
原碼 0000 0001 1000 0001 1000 0010
反碼 0000 0001 1111 1110 1111 1111
補碼 0000 0001 1111 1111 0000 0000

補碼 0000 0000 的原碼也是 0000 0000,是0。所以補碼可以在計算機中做數值運算

4、移碼

移碼是在補碼的基礎上產生的

  • 正數的移碼:補碼首位(最高位)取反
  • 負數的移碼:補碼首位(最高位)取反
數值1 數值-1 1-1
原碼 0000 0001 1000 0001 1000 0010
反碼 0000 0001 1111 1110 1111 1111
補碼 0000 0001 1111 1111 0000 0000
移碼 1000 0001 0111 1111 1000 0000

移碼 1000 0000的原碼也是 0000 0000,是0

5、數值的表示範圍
整數
原碼 -(2n-1-1)~2n-1-1
反碼 -(2n-1-1)~2n-1-1
補碼 -2n-1~2n-1-1

n 表示位數
原碼、反碼與補碼錶示範圍不同的原因是:原碼、反碼中正 0 和 負0是不同的編碼方式,而補碼中正0和負0是相同的編碼方式。正0是 0000 0000 ,補碼是 0000 0000。負0是1000 0000,補碼是 0000 0000,正0 和負0 有相同的編碼方式。故補碼的取值範圍是要比原碼和反碼少佔用一個碼,取值範圍就要比原碼和反碼多一個

四、數值的表示(浮點數運算)

1、浮點數的表示

N = M * Re
其中M是尾數,R是基數,e是指數

2、計算方式
  • 對階:對階數化爲一致,低階向高階化
  • 尾數計算:位數計算
  • 結果格式化:將計算後的結果格式化,小數點左邊需要爲1位

五、CPU結構(運算器與控制器的組成)

在這裏插入圖片描述

1、運算器
  • 算術邏輯單元ALU:與算法相關
  • 累加寄存器AC:運算過程中需要存儲一些用到的值的時候需要用到他,不止加法運算需要用到它,減法運算也需要用到它
  • 數據緩存寄存器DR:對內存儲器進行讀寫操作的時候,用來存數據的
  • 狀態條件寄存器PSW(經常考到):用於存儲計算過程中相關的標誌位,標誌位是運算時候的進位,有些運算會溢出
2、控制器
  • 程序計算器PC:調解下一個命令的位置,如果是順序執行,可以在原地基礎上加指定
  • 指令寄存器IR
  • 指令編譯器
  • 時序部件
    這部分要清楚哪些是運算器的部分,哪些是控制器的部分

六、Flynn分類法簡介

考察的問題一般是:給你一個代表性的說辭,問是哪一個體系結構,哪一種體系結構不具備一下那些特徵。

體系結構類型 結構 關鍵特性 代表
單指令流單數據流SISID 控制器部分:一個,處理器部分:一個,駐村模塊:一個 單處理器系統
單指令流多數據流SIMD 控制器部分:一個,處理器:多個主存模塊:多個 各處理器以異步的形式執行同一條命令 並列處理機,陣列處理機,超級向量處理機
多指令流單數據流 控制器部分:多個,處理器:一個,主存模塊:多個 被證明不可能,至少是不實際的 目前沒有,有文獻稱流水線計算機爲此類
多指令多數據流 控制器部分:多個,處理器:多個,主存模塊:多個 能夠實現作業、任務、指令等各級全面並行 多處理機系統多計算機

七、CISC和RISC

考察頻率比較高,考察的問題一般只有一個形式:對於CISC和RISC哪種說法是正確的?哪些說法是錯誤的?或者哪些不是CISC/RISC的特點

指令系統類型 指令 尋址方式 實現方式 其他
CISC(複雜) 數量多,使用頻率差別很大,可變長格式 支持多種 微程序控制技術(微碼) 研製週期長
RISC(精簡) 數量少,使用頻率接近,定長格式,大部分爲單週期指令,操作寄存器,中有Load/Store操作內存 支持方式少 增加通用寄存器,硬佈線邏輯控制爲主,適合採用l流水線 優化編譯,有效支持高級語言
1、CISC(複雜指令集計算機)

CISC在計算機還沒有大規模通用化的時候提出來的,需要根據不同用戶做不同的指令,那麼指令數量就會相當多。有的指令可能不經常用,有的指令卻經常使用,所以使用頻率差別大。指令都會有對應的二進制編碼,指令的編碼長度很可能不同,所以需要使用可變長的格式

2、RISC(精簡指令集計算機)

如果想買一臺計算機裝在軟件上跑,人們需要考慮把指令精簡化,讓計算機適應能力要強一些,如果把複雜的系統做簡化,把複雜的指令用最基本的操作替代。比如一個乘法指令,可以看做多個加法指令的累加。在RISC中,指令的數量少,使用的頻率也接近,使用定長格式就可以了。爲了提高效率,引入了寄存器,只有讀取和存儲操作內存。又增加了硬佈線邏輯控制,相對於軟件,雖然設計複雜,但效率高。

流水機

考察的問題一般是:主要是機器相關的問題

1、流水線的基本概念
  • 流水線
    流水線是指在執行時多條指令重複進行操作的一種準並行處理實現技術。各種部分同時處理是針對不同指令不言的。它們可同時爲多條指令的不同部分進行工作,以提高各部分的利用率和指令的平均執行速度
  • 沒有使用流水線
    執行一條指令需要經過取址、分析、執行
    在這裏插入圖片描述
    順序執行的時候,有大量部分的時間片是處於空閒狀態
    在這裏插入圖片描述
  • 使用流水線
    流水線所做的工作是把這些空閒的片給利用起來,在第一條指令做分析的同時,第二條指令開始做取址。原來是在第一條指令取址、分析、執行都做完後纔開始第二條指令。但使用流水線,第一條指令取址後,第二條指令就可以取址了。流水線不僅僅只應用在相應的計算機領域,還應用在相應的工作領域,如汽車製造
    在這裏插入圖片描述
2、流水線週期及流水線執行時間計算(考試常考)

流水線週期:(取址、分析、執行三個時間中)執行時間最長的一段
流水線計算公式 : 一條指令的執行時間 +(指令條數 -1 流水線週期*
1)理論公式:(t1+t2+…+tk)+(n-1)*△t(△t表示流水線週期)
2)實踐公式:(K+n-1)*△t(第一條指令分幾段,K就是幾)

例題:若指令流水線把一條指令分爲取址、分析和執行三部分,且三部分的時間分別是 取址2ns,分析2ns,執行1ns。那麼,流水線週期是多少?100條指令全部執行完畢需要的時間是多少?
1)取址、分析、執行三個時間中執行的時間最長的是取址和分析,都是2ns,所以流水線週期是2ns
2)
在這裏插入圖片描述
使用理論公式計算: 2+2+1+(100-1)*2 = 203ns
第一條指令執行的時候, 把每一段都看做是一個流水線週期。使用實踐公式計算:(3+100-1)*2 = 204ns

3、流水線吞吐率的計算
  • 流水線的吞吐率
    流水線的吞吐率(Tough Put rate,TP)是指在單位時間內流水線所完成的任務數量或輸出的結果數量。計算流水線吞吐率的最基本公式是:
    TP = 指令條數 / 流水線執行時間
    按照上述例子,計算流水線的吞吐率:
    TP = 100 / 203

  • 流水線最大吞吐率
    在這裏插入圖片描述
    1 是指 :1條指令,△t : 一個流水線週期
    理想狀態下,忽略流水線建立時間比平常執行時間多消耗的時間,建立之後每一條流水線的週期就會完成一條指令的執行

4、流水線加速比計算

完成同樣的任務,不使用流水線所用的時間和使用流水線所用的時間之比稱爲流水線的加速比。計算流水線的加速比的基本公式如下:
在這裏插入圖片描述
接着2中的例題,計算流水線的加速度比:
S = (2+2+1)*100/203 = 500/203
加速度比越高,使用流水線產生的效果越好

5、流水線的效率

流水線的效率是指流水線的設備利用率。在時空圖上,流水線的效率定義爲n個任務佔用的時空區與K個流水段總的時空區比:
流水線效率公式
有四個任務,分別是s1、s2、s3、s4,分別佔用△t、△t、△t、3△t時間,連續處理四個數據的時空區圖如下所示,求流水線的效率
在這裏插入圖片描述
流水線的效率可以這樣求:
在這裏插入圖片描述
每一個工作段,時常是相等的情況下,效率纔是最高的

九、計算機層次存儲結構

在這裏插入圖片描述
需要運行的數據,先從外存調到內存。在CPU與內存交互之間加入Cache。Cache可以將CPU與內存頻繁交互的數據暫且放入Cache。當CPU與內存重複交互相同的數據時,CPUR會直接從Cache中拿到數據,不需要再與內存交互,從Cache獲取數據時比從內存中快得多。引入Cache 是一種性價比方案,提高速度的同時,沒有增加太大的成本。另外,Cache是按照內容存儲的,在Cache中不同的內容存入不同的區域。按內容存儲的存儲器也叫做相連存儲器,它的效率要遠高於按地址存儲。

Cache 的基本概念

1、Cache的功能

提高CPU數據輸入和輸出的效率,突破嗎諾依曼瓶頸,即CPU與存儲器系統數據傳輸帶寬限制

2、Cache的定位

在計算機的存儲系統體系中,Cache是訪問速度最快的層次(考題中,如果沒有寄存器,就選擇Cache)

3、Cache改善系統性能的依據

使用Cache改善系統性能的依據是程序的局部性原理

4、求使用“Cache+主存儲器”的系統的平均週期時間

如果以代表對Cache的訪問命中率,t1 表示Cache的週期時間,t2表示主寄存器週期時間,以讀操作爲例,使用“Cache+主存儲器”的系統的平均週期時間爲t3,則:
t3 = ht1+(1-h)t1 ,其中 (1-h)又稱爲失效率(未命中率)
如訪問Cache能夠獲取數據的概率(命中率)是 h = 95%,Cache和主存儲器的週期時間分別是1ns、1000ns。如果不適用Cache時平均週期是1000ns,如果使用Cache,平均週期是 1ns
95%+1000ns
(1-95%) = 50.95ns。顯而易見,使用Cache可以大大提高效率。

十一、時間局部性與空間局部性

1、局部性原理

計算機在處理數據和程序時,一般會有某一個時段集中去訪問某些指令或者說某個時刻集中讀取某些空間的數據。在多級存儲體系中,可以用來解決存儲量與存儲速度之間的矛盾。速度快的成本太高、代價太大,只能做小容量。成本低的,速度慢,有了局部性原理可以得到最合適的性價比

2、時間局部性

剛剛訪問完的數據,再次訪問,再次訪問時直接在Cache中調用數據,而不是從內存中。

3、空間局部性

訪問一個空間,再次訪問它鄰近的空間。如果對數組的初始化、先訪問索引爲0的數組,再訪問索引爲1的數組

十二、隨機存儲器與只讀存儲器

1、主存的分類

考察的問題一般是:主存的分類和主存的編址,主存的編址考察概率比較高

  • 隨機存取存儲器
    在這裏插入圖片描述
    內存一旦斷電,數據就會丟失(被清除)
  • 只讀存儲器
    在這裏插入圖片描述
    斷電後,也可以存儲數據。存儲BIOS的芯片就是ROM的存儲芯片
2、主存編址
  • 兩個84位的存儲器,可以組成一個88位的存儲器,也可以組成16*16位的存儲器
    在這裏插入圖片描述
    編址練習題:
    內存從AC000H到C7FFFH,共有(1)K個地址單元,如果該內存按字編址,由28片存儲器芯片構成。已知構成此內存芯片每片有16K個存儲單元,則該芯片每個存儲單元存儲(2)位?

十三、磁盤工作原理

存取時間 = 尋道時間 + 等待時間(平均定位時間+轉動延遲)
注意:尋道時間是指磁頭移動到磁道所需要的時間;等待時間是指等待讀寫的扇區轉到磁頭下方所用的時間

例題:假設某磁盤的某個磁道劃分成11個物理塊,每塊存放1個邏輯記錄。邏輯記錄R0,R1,,,R9,R10存放在同一磁道上,記錄的存放順序上下表所示:

物理塊 1 2 3 4 5 6 7 8 9 10 11
邏輯記錄 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10

如果磁盤旋轉週期是33ms,磁頭當前處於R0的開始處。若系統使用單緩衝區順序處理這些記錄,每個記錄處理事件是33ms,則處理這11個記錄最長時間是多少?若對信息存儲進行優化分佈後,處理11個記錄的最少時間是多少?

十四、計算機總線

1、內部總線

微機內部各個外圍芯片與處理器之間的總線,是芯片級別的總線

2、系統總線

系統總線是微機中各個插件版和系統版之間的總線,屬於插件版級別。比如PCI、VGA接口

  • 數據總線
    數據總線是用來傳輸數據的,如果再64bit的計算機中,一個字就是64bit。總線的寬度就是64bit,一個週期能夠傳輸的數據量是64bit
  • 地址總線
    如果地址總線是32位,地址的空間是22,也就是4G的寬度。如果用的操作系統是32位,那麼它能夠管理的內存只有4G。如果用到的內存超過4G,就可以考慮使用64位的操作系統,否則操作系統是管理不了這麼多的內存空間的。系統總線只有那麼寬,那麼可管理的內存空間就只有那麼大。我們的操作系統之所以能夠裝64位系統,來管理更大的空間,是因爲硬件有這個寬度支持
  • 控制總線
    適用於發送控制信號的總線
外部總線

微機與外部設備的總線

十五、串聯繫統與並聯系統可靠度的計算

考察的問題一般是:主要是計算,給你一個串並聯交織在一起的模型,你要能夠計算出它響應的可靠度

1、串聯繫統

在這裏插入圖片描述
n個子系統串聯在一起、形成了一個大的系統。再串聯繫統中,所有的子系統都必須正常運行,整個系統才正常。只要有一個系統出問題了,整個系統就不能運行了

  • 可靠度的計算
    R : 表示可靠度
    總可靠度R = R1 x R1 x R2 x…x Rn,也就是把每個子系統的可靠度相乘
  • 失效率的計算
    λ : 表示失效率
    總是效率 λ = λ1+λ2+λ3+…+λn,也就是把所有子系統的失效率加起來
2、並聯系統

在這裏插入圖片描述
多個子系統並聯在一起,並聯系統中多個子系統只要有一個子系統能夠運行,整個系統都能運行

  • 可靠度計算
    R = 1-(1-R1)x(1-R2)x… x(1-Rn)
  • 失效率的計算
    λ = 1-R
3、模冗餘系統(幾乎不會考到)
4、混合系統(常考)

在這裏插入圖片描述
將串聯和並聯聯合到一起,求系統的可靠度。先從總體上看是串行還是並行,然後再確定下計算那一部分,再計算哪一部分

十六、校驗碼的概念

1、什麼是檢錯和糾錯
  • 檢錯:檢查出錯誤
  • 糾錯:不但要檢查出錯誤,還需要糾正錯誤
2、什麼是碼距

一個編碼系統的碼距是整個編碼系統中任意(所有)兩個碼字的最小距離
例如:
若用一位長度的二進制編碼,若A = 1,B = 0,A 與B之間的碼距爲1(A需要修改一位才能變成B)
若用兩位長度的二進制編碼,以A=11,B=00爲例,A與B之間的碼距爲2(A需要修改2位才能變成B)
若用三位長度的二進制編碼,以A=111,B=000爲例,可選用A=111,B=000作爲合法編碼,A與B之間的碼距爲3(A需要修改3位才能變成B)

十七、循環校驗碼(CRC)

循環校驗碼是一種可以做檢錯但是不能糾錯的一種編碼

1、模2除法

模2除法是指在做除法運算的過程中不計其進位的除法
在這裏插入圖片描述

2、CRC編碼

例題:原始報文爲:11001010101,其生成多項式爲 :x4+x3+x+1,對其進行CRC編碼後的結果爲?

  1. 將生成的多項式轉換成二進制形式:x4+x3+x+1也就是 11011
  2. 在原始報文的後面加上生成多項式位數減去1個0,也就是4個0(其實是補餘數的位數)
  3. 模2除法,模2除法得到4位餘數,將4位餘數替換剛剛補上的4個0,就得到了CRC編碼
    在這裏插入圖片描述

得到的結果是 11001010101 0011 。 將得到的結果與11011做模2運算,得到的結果應該是0, 就對了

十八、奇偶校驗碼

1、基本概念

奇偶校驗碼也是一種校驗碼,它用來檢測數據傳輸過程中是否發生錯誤,是衆多校驗碼中最爲簡單的一種。
它有兩種校驗方法:奇校驗偶校驗
跟CRC類似,也是在原始的碼流後面,加上校驗位,不同的是,它的校驗位只有一位,要麼是0,要麼是1,並且它的校驗位還可以放在碼流的前面。
校驗位的作用是保持碼流中的1的個數滿足(奇數個 或者 偶數個)
奇校驗:原始碼流+校驗位 總共有奇數個1
偶校驗:原始碼流+校驗位 總共有偶數個1
在這裏插入圖片描述

2、應用舉例

奇偶校驗碼一個最常見的應用場合就是 ASCII碼
ASCII碼佔用一個字符,低7位是有效位,最高位用作奇偶校驗
在這裏插入圖片描述

3、檢錯能力

只能檢測出原始碼流中的出錯了奇數個錯誤
例如還是 ASCII碼 大寫字母A

奇校驗 正確碼流 11000001(校驗位是保證碼流中的1個數爲奇數個)
錯1位 11000011 變成了偶數個,能檢測出錯誤
錯2位 11000010 變成了奇數個,不能檢測出錯誤
錯3位 11001010 變成了偶數個,能檢測出錯誤

偶校驗 正確碼流 01000001
錯1位 01000011 變成了奇數個1,能檢測出錯誤
錯2位 01000010 變成了偶數個1,不能檢測出錯誤
錯3位 01001010 變成了奇數個1,能檢測出錯誤

4、奇校驗還是偶校驗

在實際應用中,到底是選擇奇校驗還是選擇偶校驗?其實都是有應用的
奇校驗一個重要的特徵是產生不了全0代碼,所以在實際操作過程中選擇的時候要考慮到這一點

十九、海明校驗碼(難點考察頻率高)

1、基本概念

海明碼j具有檢錯和糾錯雙功能,它基於奇偶校驗原理,只能檢查出某一位錯碼的位置。當有多位錯碼時,它就不適用了。

異或運算
異或運算,相異爲1,相同爲0。它也叫模2和、模2加法,本質上是不帶進位的加法 ,數學符號是 ⊕;
計算機符號 “xor”;
C語言中異或符號是 ^;
常用的公式是: (a ^ b) ^ a = b,即兩個數異或結果在與其中一個數異或得到的是另一個數。
常用的應用:多用在一些加密算法中,將要加密的數據和一些已知的數進行異或運算,得到加密後的數據。

2、 海明碼的校驗位數

下面本例以 1010110 爲例進行海明碼編碼
第一步先確定需要多少位校驗碼位數。
設數據有n位,校驗碼有x位。則校驗碼一共有2x中取值方式。其中需要一種取值方式表示數據正確,剩下2x-1中取值方式表示有一種數據出錯。因爲編碼後的二進制串有n+x位,因此x應該滿足:
2x-1 >= n + x
使不等式成立的x的最小值就是校驗碼的位數。在本例中,n
=7,解得 x =4。

信息碼和校驗碼的對應關係如下表:
在這裏插入圖片描述

3、校驗碼的位置

校驗碼在二進制中的位置爲2的整數冪,即 1、2、4、8、16…剩下的位置是信息碼,如圖,綠色爲校驗位:
在這裏插入圖片描述
本例的校驗碼位置如下圖:
在這裏插入圖片描述

4、計算校驗碼的值

由於奇偶校驗原理一樣,偶校驗的計算更爲簡單,實際中多爲偶校驗,本例中也以偶校驗進行計算
在這裏插入圖片描述
如圖中:
第一行中每個X跳過1位;第一行所有的X值進行異或是0;第一行的X對應的數據位位置轉化爲二進制最後一位都是1,即是xxx1這種形式
第二行中每2個X跳過2位;第二行所有的X值進行異或是0;第二行的X對應的數據位位置轉化爲二進制倒數第二位一位都是1,即是xx1x這種形式
第三行中每4個X跳過4位,第三行所有的X值進行異或是0,;第三行的X對應的數據位位置轉化爲二進制倒數第三位一位都是1,即是x1xx這種形式
第四行中每8個X跳過8位,第四行所有的X值進行異或是0;第四行的X對應的數據位位置轉化爲二進制倒數第四位一位都是1,即是1xxx這種形式

下面計算本例,將表格中的位置用二進制表示:
在這裏插入圖片描述
x1的計算:
x1是第一個校驗碼,位置對應欄所有最後一位爲1(xxx1格式)的異或爲0,即
x1 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 0 = 0
則x1 = 0;

x2計算:
x2是第二個校驗碼,位置對應欄中所有倒數第二位爲1(xx1x格式)的異或爲0,即
x2 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0;
則x2 = 1;

x3計算:
x3是第三個校驗碼,位置對應欄所有倒數第三位爲1(x1xx格式)的異或爲0,即:
x3 ⊕ 0 ⊕ 1 ⊕ 0 = 0;
則x3 = 1;

x4計算:
x4是第四個校驗位,位置對應欄所有倒數第四位爲1(1xxx格式)的異或爲0,即:
x4 ⊕ 1 ⊕ 1 ⊕ 0 = 0;
則x4 = 0;

**所以最終 海明碼爲 0 1 1 1 010 0110

5、海明碼的校驗

假設位置爲1011的數據傳輸錯誤,由0變成1,則校驗糾錯的過程爲:
將所有位置形如 xxx1,xx1x,x1xx,1xxx的數據分別異或。
xxx1:0 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 = 1
xx1x:1 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1
x1xx:1 ⊕ 0 ⊕ 1 ⊕ 0 = 0
1xxx:0 ⊕ 1 ⊕ 1 ⊕ 1 = 1
那麼出錯數據的位置爲 1011,這樣便可得到出錯的位置

假設同時有兩個位置出錯,本例中設位置 爲 1010 對應數據1-> 0,位置 1011 對應位置 0-> 1,則推出校驗糾錯過程:
xxx1 : 0 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 = 1
xx1x: 1 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 1 = 0
x1xx: 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0
1xxx: 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0

那麼校驗出的錯誤位是 0001 ,即第一位;但實際上是倒數第二位和倒數第一位都有錯誤,說明海明碼不能校驗兩位及以上出錯的數據,即 海明碼只能檢測並糾正一位錯誤

例題:求 1011的海明碼
已知數據位數 n = 4,校驗位x
2x-1 >= n + x ,得 x = 3
或者直接由圖可知:
在這裏插入圖片描述

0001 0010 0011 0100 0101 0110 0111
x1 x2 1 x3 0 1 1

由 x1 ⊕ 1 ⊕ 0 ⊕ 1 = 0 得 x1 = 0
由 x2 ⊕ 1 ⊕ 1 ⊕ 1 = 0 得 x2 = 1
由 x3 ⊕ 0 ⊕ 1 ⊕ 1 = 0 得 x3 = 0

則海明碼爲:0110011

發佈了22 篇原創文章 · 獲贊 32 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章