2013年3月29日 星期五

3/22 計算機概論課程內容

錯誤更正漢明碼介紹
8 bit  為例
回家作業
16 bit 解釋
CPU(ALU AND CU)
Register: MAR , MBR, I/O AR, I/O BR, PC , AC, 等暫存器介紹
機器循環週期(擷取指令/解碼/執行/存回)


 錯誤更正碼(ECC)


ECC英文全名為Error Checking and Correction Code,中文名稱為錯誤修正碼檢查。

ECC是使用一種特殊電路,利用較複雜的演算法檢查儲存在記憶體中的資料是否一致。ECC通常在每個byte的資料使用3bit來作檢查碼。而且它不只是可以從多個位元中找出其中錯誤,並且可以將錯誤的位元並予以更正。一個有ECC的系統,不僅能容許錯誤,並可以將錯誤更正,使系統得以持續正常操作,不致因錯誤而中斷。
ECC稱為「錯誤自動檢查與更正」,這也是一種資料檢查的技術,可以檢查資料是否正確;和Parity Check主要的不同點是在只有一個錯誤的狀況下,ECC具有自動更正的能力。

記憶體要具有檢查與修復的功能,就必須記錄更多的資訊,因此這類的記憶體除了負責資料的記錄之外,還要更多的記憶體來保存核對與更正所需的資訊。以前述的Parity Check為例,每8個位元需要增加1個位元來處理。ECC也是類似的做法,但每家廠商的做法並不完全相同,必須視處理資料的方式而定,例如Intel以64個資料位元搭配8個ECC位元,另外也有以8個資料位元搭配4個ECC位元的做法。

一般來說,現今製作記憶體的技術已趨穩定,所以"並非"所有的記憶體模組都具備ECC功能;換句話說,您若是要求購買具有ECC能力的記憶體,可能會稍微貴一點。


漢明碼

漢明碼(Hamming Code),是在電信領域的一種線性偵錯碼,以發明者Richard Hamming的名字命名。漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於內存(RAM)。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。因此,當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於1時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。

在數學方面,漢明碼是一種二元線性碼。對於每一個整數m>2,存在一個編碼,帶有m個奇偶校驗位2^m-m-1個資料位。該奇偶檢驗矩陣的漢明碼是通過列出所有米欄的長度是兩兩獨立 。

如果一條訊息中包含更多用於糾錯的位,且透過妥善安排這些糾錯位使得不同的出錯位產生不同的錯誤結果,那麼我們就可以找出出錯位了。在一個7位的訊息中,單個位出錯有7種可能,因此3個錯誤控制位就足以確定是否出錯及哪一位出錯了。
漢名研究了包括五取二碼在內的編碼方案,並歸納了他們的想法。

[編輯] 通用演算法

下列通用演算法可以為任意位數位產生一個可以糾錯一位(英語Single Error Correcting)的漢明碼。
  1. 從1開始給數字的數據位(從左向右)標上序號, 1,2,3,4,5...
  2. 將這些資料位的位置序號轉換為二進制, 1, 10, 11, 100, 101, 等.
  3. 資料位的位置序號中所有為二的冪次方的位(編號1,2,4,8,等,即資料位位置序號的二進制表示中只有一個1)是校驗位
  4. 所有其它位置的資料位(資料位位置序號的二進制表示中至少2個是1)是資料位
  5. 每一位的資料包含在特定的兩個或兩個以上的校驗位中,這些校驗位取決於這些資料位的位置數值的二進制表示
    1. 校驗位 1 覆蓋了所有資料位位置序號的二進制表示倒數第一位是1的資料:1(校驗位自身,這裡都是二進制,下同),11,101,111,1001,等
    2. 校驗位 2 覆蓋了所有資料位位置序號的二進制表示倒數第二位是1的資料:10(校驗位自身),11,110,111,1010,1011,等
    3. 校驗位 4 覆蓋了所有資料位位置序號的二進制表示倒數第三位是1的資料:100(校驗位自身),101,110,111,1100,1101,1110,1111,等
    4. 校驗位 8 覆蓋了所有資料位位置序號的二進制表示倒數第四位是1的資料:1000(校驗位自身),1001,1010,1011,1100,1101,1110,1111,等
    5. 簡而言之,所有校驗位覆蓋了資料位置和該校驗位位置的二進制與的值不為0的數。
採用奇校驗還是偶校驗都是可行的。偶校驗從數學的角度看更簡單一些,但在實踐中並沒有區別。
校驗位一般的規律可以如下表示:
資料位位置1234567891011121314151617181920...
編碼後資料位置p1p2d1p4d2d3d4p8d5d6d7d8d9d10d11p16d12d13d14d15
奇偶校驗位
覆蓋率
p1XXXXXXXXXX
p2XXXXXXXXXX
p4XXXXXXXXX
p8XXXXXXXX
p16XXXXX
觀察上表可發現一個比較直觀的規律:第i個檢驗位是第2i-1位,從該位開始,檢驗2i-1位,跳過2i-1位……依次類推。例如上表中第3個檢驗位p4從第23-1=4位元開始,檢驗4、5、6、7共4位元,然後跳過8、9、10、11共4位元,再檢驗12、13、14、15共4位元……

[編輯] 例子

對11000010進行漢明編碼,求編碼後的碼字。
1. 列出表格,從左往右(或從右往左)填入數位,但2的次方的位置不填。
位置1234567891011121314
資料11000010

2. 把資料行有的1的列的位置寫為二進制。
位置1234567891011121314
資料11000010
二進制001101011011

3. 收集所有二進制數位,求異或0011 \oplus 0101 \oplus 1011 =1101
4. 把1101依次填入表格中2的次方的位置。
位置1234567891011121314
資料11000010
二進制001101011011
校驗1101

5. 所以編碼後的碼字是111010010010。

 CPU(ALU and CU)


CPU為控制整部電腦運作的中心樞紐,其內部包括控制單元、算術及邏輯單元、暫存器或記憶單元。
v算術及邏輯運算單元(ALU):加、減、乘、除及比較、選擇、判斷等運算。
v控制單元(CU):翻譯程式中的指令的解碼功能及協調控制各部門依指令執行使電腦自動化處理資料。
v記憶單元(MU:儲存目前正要被處理運算的程式或資料,容量以KB為單位。
v暫存器(Register):暫時儲存資料,如用來儲存運算的累積器。其功能與記憶體相似。
 


 暫存器

暫存器Register),是中央處理器內的其中組成部份。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據位址。在中央處理器的控制部件中,包含的暫存器有指令暫存器(IR)和程式計數器(PC)。在中央處理器的算術及邏輯部件中,包含的暫存器有累加器(ACC)。
電腦架構裡,處理器中的暫存器是少量且速度快的電腦記憶體,藉由提供快速共同地存取數值來加速電腦程式的執行:典型地說就是在已知時間點所作的之計算中間的數值。
(1)   PC(程式計數器):存放正要執行的運算碼的位址。
(2)   IR(指令暫存器):存放正要執行的運算碼。
(3)   F(旗標暫存器):存放ALU運算的狀態。
(4)   一般暫存器:存放ALU運算的中間結果,如AXBXCXDX等。
(5)   SP(堆疊指標):為一種後進先出、線性的資料結構,常應用在副程式呼叫及中斷處理。
(6)   MAR(記憶體位址暫存器):到主記憶體中存取資料,必須先將位址存到MAR中。
(7)   MBR(記憶體緩衝暫存器):到主記憶體中I/O的資料暫時放到MBR中。
        (8) MDR(記憶資料暫存器):儲存機器碼指令的位址
 
 
資料暫存器
用來儲存整數數字(參考以下的浮點暫存器)。在某些簡單(或舊)的CPU,特別的資料暫存器是累加器,作為數學計算之用。
位址暫存器
持有記憶體位址,以及用來存取記憶體。在某些簡單/舊的CPU裡,特別的位址暫存器是索引暫存器(可能出現一個或多個)。
通用目的暫存器
GPRs)- 可以保存資料或位址兩者,也就是說他們是結合 資料/位址 暫存器的功用。
浮點暫存器
FPRs)- 用來儲存浮點數字。
常數暫存器
用來持有唯讀的數值(例如0、1、圓周率等等)。
向量暫存器
用來儲存由向量處理器執行SIMD指令所得到的資料。
特殊目的暫存器
儲存CPU內部的資料,像是程式計數器(或稱為指令指標),堆疊暫存器,以及狀態暫存器(或稱微處理器狀態字組)。
  • 在某些架構下,模式指示暫存器(也稱為「機器指示暫存器」)儲存和設定跟處理器自己有關的資料。由於他們的意圖目的是附加到特定處理器的設計,因此他們並不被預期會成微處理器世代之間保留的標準。
l   一般暫存器(Register)比較
類別
8086/8088暫存器(16 bit)
80386/80486暫存器(32 bit)
通用暫存器
AXBXCXDX
EAXEBXECXEDX
指標索引暫存器
SPBPSIDIIP
ESPEBPESIEDIEIP
區段暫存器
CSDSESSS
CSDSESSSFSGS
旗標暫存器
FLAG
EFLAG

 
機器循環週期(擷取指令/解碼/執行/存回)



1.指令擷取
2.指令解碼
3.指令執行
4.結果存回


I-time
nCU 從記憶體中擷取 (fetch)指令,然後放進暫存器中
nCU 將此指令解碼 (decode),並決定所需要的資料在記憶體中的位置
 
 
E-time
n執行
CU 將資料從記憶體搬移到 ALU 內的暫存器中
ALU 負責控制與執行指令
控制權回到 CU
nCU 將運算後的結果存放在記憶體或暫存器中

沒有留言:

張貼留言