04 電腦系統的資料表示法-字元碼及傳輸碼 PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

電腦系統資料表示法

- 字元碼及傳輸碼

字元碼
• 字元碼也隨著電腦一直在進步
• 較大的電腦記憶體及儲存裝制能有較豐
富的字元碼
• 最早期的電腦編碼系統是使用6個位元
來編碼
• Binary-coded decimal (BCD) 就是其中
的一種. 它是IBM 大型電腦在1950和
1960年代所採用的方式

1
• 在1964, BCD 擴充為 8-bit 碼, 稱為
Extended Binary-Coded Decimal
Interchange Code (EBCDIC)
• EBCDIC 同時支援大寫和小寫字母, 此
外, 還有特殊字元, 像是標點符號和控制
字元
• EBCDIC 和 BCD 在今日仍舊被 IBM 大
型電腦所採用

• 其它的電腦廠商選擇 7-bit ASCII


(American Standard Code for Information
Interchange) 來取代 6-bit 碼
• BCD and EBCDIC 用在打孔卡片上, 而
ASCII 則用在電信傳輸上 (Telex)
• 直到最近, 除了IBM 大型電腦外, 都
是ASCII 的天下

2
• 現在很多的系統都使用Unicode, 它是一
種16-bit的系統, 它納入了世界上所有
國家的語言
– Java 程式語言及一些作業系統現在都
內定Unicode 為它們的字元碼
• Unicode的碼空間分成六個部份. 第一
個部份是西方的字母碼, 包括英文, 希臘
字母和俄文

• Unicode碼空間的
配置如右邊所示
• 最低的Unicode 字
元編碼是和ASCII
碼相同的
• 最高的部份可以讓
使用者自行定義

3
資料記錄與傳輸碼
• 當資料字元或數值存在電腦記憶體時,
其值都是很清楚不會錯的
• 但是當這些資料是儲存在磁碟或是傳輸
到幾呎外的距離時就不一定了
– 由於實體和傳輸媒介的不確定性, 和 bytes
可能會發生錯誤或混淆
• 可以經由適當的編碼方式和不同的錯誤
偵錯技術來降低資料誤差

• 藉由在傳輸媒體上傳送, “high” 和
“low”電壓來傳送資料
• 藉由改變磁性媒介的極性來記錄資料
– 這種極性的改變稱為 flux reversals
• 一個bit 的傳輸時間, 或是一個bit的磁性
儲存區域就稱為一個bit cell

4
• 最簡單的資料記錄和傳輸的碼就是non-
return-to-zero (NRZ) 碼
• NRZ 將 1 編成 “high”, 0 編成 “low.”
• OK (ASCII碼) 會編成下面的樣子

• NRZ 碼的問題在於一常串的0和1會產生
同步上的問題
• Non-return-to-zero-invert (NRZI) 降低了
這種同步的損失, 它只有在1變0或0變1
的時候才會轉態

10

5
2.7 資料記錄與傳輸碼
• 雖然NRZI 碼防止了一長串二元1所發生
的損失, 但是並不能對一長串0的損失發
生做用
• Manchester 編碼 (也稱為相位調變) 則解
決了這個問題.它將1編成 “向上" 轉態,
而 0為 “向下" 轉態

11

• 多年以來, Manchester 碼都是區域網路


的傳輸編碼方式
• 但是這種方式在每個bit cell都會有一次
的轉態, 非常浪費傳輸的容量
• 頻率調變frequency modulation (FM) 則
是一種較有效率的編碼方法. 在FM中,
只有cell的邊界才會產生轉態. 包含1的
cells會在中間轉態

12

6
• 一開始可能會覺得FM 比 Manchester 碼來得差,
因為它在每個cell的邊界都要轉態一次
• 如果省略掉某些這種轉態, 能得到更經濟的的
編碼方式
• 修正式FM 就是. 它只有在相鄰cells包含0的情
況下才會有邊界轉態發生
• 一個包含1的MFM cell 就像一般的FM一樣, 會
在中間發生轉態

13

• 資料記錄與傳輸的主要挑戰在於要如何
在不消耗多餘的 資源下仍能保持同步
• Run-length-limited, RLL, 是一種特別設
計來降低一連串0和1個數的編碼方式
– 碼中會插入一些額外特別的bits
– 雖然如此, RLL 的效率也相當顯著

14

7
• RLL(d,k) 碼表示在連續的1之間, 最少會
有 d 個, 最多會有k 個連續
– 多年來RLL(2,7) 已經是磁碟儲存的大
宗了
• 相對於ASCII或EBCDIC字元, RLL(2,7)
碼的bit cells 會比較多
• 但是, 其編碼方式允許bit cells可以小一
點, 因此比MFM會其它的碼靠得更近

15

• 下圖顯示用RLL(2,7)和MFM對 OK 編碼
的比較. RLL code (下方) 比起MFM碼(上
方)的轉態數少了25%

16

8
錯誤偵測與修正
• 對任何的資料儲存實體或傳輸媒介來說,
在其使用壽命期間要100% 不發生錯誤
是不可能的
• 磁碟中有越多的bits, 以及傳輸速度越快,
就越有可能發生錯誤 – 有時是以幾何的
速度增加
• 因此, 錯誤的偵測與修正對資料傳輸和
儲存的正確性來說, 就非常的重要

17

• 檢查字元會出現在一常串數字的後面
用來預防輸入資料錯誤的發生
– UPC 條碼的最後一個字元, 以及 ISBN的
最後一碼都是檢查字元
• 越長的資料流更需要經濟和精密的錯
誤偵測機制
• Cyclic redundancy checking (CRC;循環
冗餘碼 ) 碼是一種大區塊資料用的錯誤
偵測碼

18

9
• Checksums 和 CRCs 都是對稱式錯誤偵
測碼
• 在對稱式錯誤偵測碼 中, 傳輸資料的後
面會加上一組錯誤控制位元
– 這組錯誤控制位元稱為 syndrome
• CRCs 是在模同餘2算數體上的多項式

19

• 模同餘 2 的算術很像時鐘的算術
• 在時鐘算術裡, 如果11:00再加 2 小時,
就會變成1:00點
• 在模同餘2算術中, 如果將 1 加上 1, 會
得到 0. 這道理再簡單不過了
0+0=0 0+1=1
1+0=1 1+1=0

20

10
• Ex. 用模同餘2算術找出
1111101 除以 1101 的商
和餘數
– 就像傳統的除法一樣, 先
進行一次
– 將除數放在被除數下方
進行模同餘2的減法

21

• Ex.用模同餘2算術找出
1111101 除以 1101 的商
和餘數
– 將被除數的下一個位元
往下擺
– 可以看出來 00101 無法
除以 1101, 所以在商的
部份放一個0

22

11
• Ex. 用模同餘2算術找出
1111101 除以 1101 的商
和餘數
– 1010 可被 1101除
– 進行模同餘2的減法

23

• Ex.用模同餘2算術找出
1111101 除以 1101 的商
和餘數
– 求出商為1011, 而 餘數
為 0010
– 這對計算 CRC
syndromes很有用

注意: 這個範例中的除數在模同餘多項式為:
X3 + X2 + 1
24

12
• Ex.假設要傳輸下面資訊
1111101
– 傳送和接收端決定要採用
(任意選的)多項式樣式,
1101
– 資訊串列要往左移三位(補
零),(移動位數比除數位數少
一位)
– 經由模同餘2除法可得餘數
(如右) 將其加到資訊串列的
後面: 1111101000 + 111 =
1111101111
25

– 如果沒有位元遺失或損壞
的話, 將所收到的資訊串
列除以1101, 所得到的餘
數會為0
– 右邊為計算的過程
– 真正在用時會用較長的多
項式來含蓋較大的資訊串

26

13
• 資料傳輸發生錯誤被偵測到時, 比較容易
修正
– 只需要求傳輸端重送一次就可以了
• 在記憶體和資料儲存體中就不較不容易
– 一些重要的東西常常在記憶體或磁碟中只有
一份拷貝
• 因此, 要長期的提供資料的完整性就需要
有錯誤修正碼

27

• Hamming 碼和 Reed-Soloman 碼是二種


很重要的錯誤修正碼
• Reed-Soloman 碼在突發式的錯誤發生型
態則特別有用, 那是一種鄰近一連串位
元發生錯誤的情況
– 因為CD-ROMs 很容易刮傷, 所以採用某種
Reed-Soloman 錯誤偵測方式
• 因為 Hamming 碼的數學演算比Reed-
Soloman簡單很多, 所以只詳細討論
Hamming 碼

28

14
• Hamming 碼是一 種增加額外檢查位元
或同位元到資料字組的碼字組
• 二個碼字組之間的Hamming distance 就
是二個碼字組之間不一樣的位元數
• 這二個碼字組Hamming distance為 3

• 一個碼的最小Hamming distance 就是所


有的碼字組之間的最小 Hamming
distance

29

漢明碼(Hamming Code)
• 奇偶檢驗碼,是在電信領域的一種線性
偵錯碼,以發明者Richard Hamming的名
字命名
• 漢明碼在傳輸的訊息流中插入驗證碼,
以偵測並更正單一位元錯誤
– 由於簡單的漢明編碼,它們被廣泛應用於內部記憶
體(RAM)。其 SECDED (single error correction,
double error detection) 版本另外加入一檢測位元,可
以偵測兩個以下同時發生的位元錯誤,並能夠更正
單一位元的錯誤

2019/9/25 30

15
• 當傳送端與接收端的位元樣式的漢明距離
(Hamming distance) 小於或等於1時(僅有
1 bit 發生錯誤),可實現可靠的通訊
• 相對的,簡單的奇偶檢驗碼除了不能糾正
錯誤之外,也只能偵測出奇數個的錯誤
• 漢明碼是一種二元線性碼。對於每一個整
數m > 2,存在一個編碼,帶有m個奇偶
校驗位2m − m − 1個資料位。該奇偶檢驗
矩陣的漢明碼是通過列出所有欄的長度是
兩兩獨立

2019/9/25 31

• 奇偶校驗是一種添加一個奇偶位用來指
示之前的資料中包含有奇數還是偶數個
1的檢驗方式
• 如果在傳輸的過程中,有奇數個位發生
了改變,那麼這個錯誤將被檢測出來
(注意奇偶位本身也可能改變)。一般
來說,如果資料中包含有奇數個1的話,
則將奇偶位設定為1;反之,如果資料
中有偶數個1的話,則將奇偶位設定為0。
換句話說,原始資料和奇偶位組成的新
資料中,將總共包含偶數個1 32

16
• 奇偶校驗並不十分可靠,如果資料中有
偶數個位(置)發生變化,則奇偶位校驗
仍將認為正確,因此不能檢測出錯誤
• 即使奇偶校驗檢測出了錯誤,也無法指
出哪一位(置)出現了錯誤,從而進行更
正。資料必須整體丟棄並且重新傳輸
• 如果一條資訊中包含更多用於糾錯的位,
且透過妥善安排這些糾錯位使得不同的
出錯位產生不同的錯誤結果,就可以找
出出錯位

2019/9/25 33

• 漢明研究了包括五取二碼在內的編碼方
案,並歸納了它們的思想
• 舉例而言﹐先決定漢明碼的長度
• 公式﹕m+r+1  2 r
• 其中﹕m為資料所具有的位元數﹐例如m=8
表示有8位元。 r為檢查位元數(漢民碼的長
度)

2019/9/25 34

17
• Ex.假設資料位元 m = 4,則
(4 + r + 1)  2 r
表示r 要大於等於 3才行
– 這表示要對一個4個bit的資料字組構建一個
可更正單一位元錯誤的碼字組時, 就要增加
三個檢查位元
– 求檢查位元的數目是最難的部份, 剩下的就
很簡單了

35

• Ex. 假設資料長度 m = 8
(8 + r + 1)  2 r
表示 r 必需大於或等於 4
– 這表示要對一個8個bit的資料字組構建一
個可更正單一位元錯誤的碼字組時, 就要
增加4個檢查位元, 所以整體碼字組長度
為12
– 那如何決定這些檢查碼呢?

36

18
• 當碼字組的長度為12時, 可看到每個數
字, 從1 到12, 都可以表示成2的次方相加
– 所以
1 = 20 5 = 22 + 2 0 9 = 23 + 2 0
2 = 21 6 = 22 + 2 1 10 = 2 3 + 2 1
3 = 21+ 2 0 7 = 22 + 21 + 2 0 11 = 2 3 + 2 1 + 2 0
4 = 22 8 = 23 12 = 2 3 + 2 2
– 1 (= 20) 出現在所有的奇數數字.
– 2 (= 21) 出現在, 2, 3, 6, 7, 10, and 11.
– . . . 以此類推 . . .
–利用這個概念來產生檢查碼

37

• r=4真值表:
0. 0000 8. 1000
1. 0001 9. 1001
2. 0010 10. 1010
3. 0011 11. 1011
4. 0100 12. 1100
5. 0101
6. 0110
7. 0111

有1的位置為﹕
• 2^0: 01,03,05,07,09,11 根據位置檢查資料編
• 2^1: 02,03,06,07,10,11 碼﹐並產生檢查碼(漢明
• 2^2: 04,05,06,07,12 碼)﹐使得1的個數為偶
• 2^3: 08,09,10,11,12 數

2019/9/25 38

19
– 以長度為12的碼字組為例, 從1開始對最低位
元順序標上號碼
– 每個對應到2的次方的bit位置就是檢查位元
– 這些檢查位元就會包含每個位元數字和中的
同位位元

39

– 因為2 (= 21) 會出現在數字, 2, 3, 6, 7, 10,


and 11. 所以位置 2 會包含 3, 6, 7, 10, 和11
的同位位元
– 當使用偶同位時, 就是這些位元的模同餘2
之和
– 如下所示, 第二個位元的位置會產生0的同
位元值

那其它的同位元呢?
40

20
• Ex.

– 所有的碼字組求出後如上所示
– Bit 1檢查數字3, 5, 7, 9,和 11, 所以值為 1
– Bit 4檢查數字5, 6, 7, 和 12, 所以值為1
– Bit 8檢查數字9, 10, 11, 和 12, 所以值也是1
– 利用 Hamming演算法, 不只能偵測單一位
元錯誤, 還能加以修正

41

• Ex.

– 假設在bit 5發生錯誤. 同位位元值為


– Bit 1 檢查數字3, 5, 7, 9, 和 11. 值為 1, 但是應該
要為0
– Bit 2 檢查數字2, 3, 6, 7, 10, 和 11. 0是正確的.
– Bit 4 檢查數字5, 6, 7, 和12.值為 1, 但是應該要為
0
– Bit 8 檢查數字9, 10, 11, 和12. 這個bit正確

42

21
• Ex.

– 在 1 和 4 的位置發生錯誤
– 有二個同位位元沒錯誤發生, 得知是資料
發生錯誤, 而不是同位位元本身.
– 是那個資料位元出錯了呢? 可以藉由將位
元位置相加來找出
– 很簡單地1 + 4 = 5. 所以錯誤發生在 bit 5.
如果將 bit 5 改成 1, 那所有的同位元和資
料就回復了
43

• Ex. 檢查傳輸過程中那一位元發生錯誤
• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料: 0 1 0 0 1 1 0 1 0 1 1 0
• 接收資料: 0 1 0 1 1 1 0 1 0 1 1 0
• 檢查同位元(如果為偶數個1﹐則表示正
確﹐用0表示﹐有錯誤用1表示)
• 2^0: 01,03,05,07,09,11 => 0,1,1,1,1,1 => 1
• 2^1: 02,03,06,07,10,11 => 1,1,0,1,0,1 => 0
• 2^2: 04,05,06,07,12 => 0,1,0,1,0 => 0
• 2^3: 08,09,10,11,12 => 1,1,0,1,0 => 1

• 1001=9 第9個碼發生錯誤
2019/9/25 44

22
• EX. 檢查傳輸過程中那一位元發生錯誤
• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料: 0 1 0 0 1 1 0 1 0 1 1 0
• 接收資料: 0 1 0 0 0 1 0 1 0 1 1 0
• 檢查同位元(如果為偶數個1﹐則表示正確﹐用
0表示﹐有錯誤用1表示)
• 2^0: 01,03,05,07,09,11 => 0,1,1,1,0,1 => 0
• 2^1: 02,03,06,07,10,11 => 1,1,0,1,0,1 => 0
• 2^2: 04,05,06,07,12 => 0,1,0,1,0 => 0
• 2^3: 08,09,10,11,12 => 0,0,0,1,0 => 1

• 所以1000=8 第8個碼發生錯誤
2019/9/25 45

• Ex. 檢查傳輸過程中沒有位元發生錯誤
• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料: 0 1 0 0 1 1 0 1 0 1 1 0
• 接收資料: 0 1 0 0 1 1 0 1 0 1 1 0
• 檢查同位元(如果為偶數個1﹐則表示正確﹐
用0表示﹐有錯誤用1表示)
• 2^0: 01,03,05,07,09,11 => 0,1,1,1,0,1 => 0
• 2^1: 02,03,06,07,10,11 => 1,1,0,1,0,1 => 0
• 2^2: 04,05,06,07,12 => 0,1,0,1,0 => 0
• 2^3: 08,09,10,11,12 => 1,0,0,1,0 => 0

• 所以0000=0表示沒有發生錯誤!
2019/9/25 46

23
• Ex. 假設傳輸過程有2位元發生錯誤
• 12 11 10 9 8 7 6 5 4 3 2 1

• 原始資料: 0 1 0 0 1 1 0 1 0 1 1 0
• 接收資料: 0 1 0 1 1 0 0 1 0 1 1 0
• 檢查同位元(如果為偶數個1﹐則表示正確﹐用
0表示﹐有錯誤用1表示)
• 2^0: 01,03,05,07,09,11 => 0,1,1,0,1,1 => 0
• 2^1: 02,03,06,07,10,11 => 1,1,0,0,0,1 => 1
• 2^2: 04,05,06,07,12 => 0,1,0,0,0 => 1
• 2^3: 08,09,10,11,12 => 1,1,0,1,0 => 1
• 1110=14表示有1個以上發生錯誤,但無法更正

2019/9/25 47

Conclusion
• 電腦用二元數字系統以bits, bytes, 和
words的型式儲存資料
• 十六進制以四個位元一組, 稱為nibbles
(或 nybbles)
• 有號整數能以1補數, 2補數, 或符號大小
表示法儲存
• 浮點數通常使用 IEEE 754 浮點數標準

48

24
• 字元資料用ASCII, EBCDIC, 或
Unicode儲存
• 發展特別的編碼方式, 使資料傳輸和儲
存更可靠且更經濟
• 錯誤偵測和修正碼有其必要性, 因為不
能期望傳輸或儲存媒體不會發生錯誤
• CRC, Reed-Soloman, 以及 Hamming 碼
是三種最重要的錯誤控制碼

49

25

You might also like