วันจันทร์ที่ 23 กันยายน พ.ศ. 2556

การตรวจสอบข้อมูลบิท

การตรวจสอบบิท


         บทความนี้เป็นเนื้อหาส่วนหนึ่งของรายวิชาสถาปัตยกรรมและองค์ปรพกอบของคอมพิวเตอร์นะครับ ซึ่งเรื่องที่ผมจะนำมาเขียนในวันนี้ก็เป็นเรื่องของการใช้บิทตรวจสอบข้อมูลที่ผิดพลาดนะครับ ก่อนอื่นต้องก็ต้องขออธิบายก่อนนะครับว่าทำไมต้องมีการตรวตสอบบิท กันนะครับ

 Hard failure Soft Eror
     หมายถึง ข้อผิดพลาดที่เกิดขึ้นเนื่องจากชิพที่ผลิตขึ้นมานั้นไม่สามารถทำงานได้ตามที่ต้องการ
เป็นความผิดปกติแบบถาวร เช่น เซลล์หน่วยความจำไม่สามารถเก็บข้อมูลไว้ได้ หรือเก็บเพียงข้อมูล 0หรือ 1แต่เพียงอย่างเดียว อาจเกิดขึ้นจากสภาพการใช้งานที่ไม่เหมาะสม การใช้งานผิดประเภท หรือการเสื่อมสภาพตามอายุการใช้งาน

Soft Eror
     เป็นข้อผิดพลาดที่เกิดขึ้นอย่างไม่สามารถคาดเดาได้
เกิดจากเหตุการณ์บางอย่างที่ทำให้ข้อมูลในเซลล์หน่วยความจำบางเซลล์หรือบางกลุ่มเปลี่ยนไปจากเดิม โดยไม่ได้ทำลายเซลล์หน่วยความจำอย่างถาวร
อาจเกิดขึ้นเนื่องจากกระแสไฟฟ้าที่ไม่สม่ำเสมอ หรือการคายประจุไฟฟ้าสถิตที่มีอยู่ทุกหนทุกแห่ง

ฟังก์ชั่นในการแก้ไขข้อผิดพลาด


     ถ้าตรวจไม่พบข้อผิดพลาดใดๆ ข้อมูลนั้นก็จะถูกส่งไปใช้งาน

สามารถตรวจพบข้อผิดพลาดและสามารถที่จะแก้ไขได้ ข้อมูลและโค้ดรหัสจะถูกส่งไปให้หน่วยแก้ไขข้อมูล ซึ่งจะสร้างข้อมูลใหม่ที่ถูกต้อง และส่งไปใช้งานต่อไป

สามารถตรวจพบข้อผิดพลาดแต่ไม่สามารถแก้ไขได้ ก็จะแสดงรายงานให้ผู้ใช้ทราบ

โค้ดรหัสที่สามารถแก้ไขข้อผิดพลาดได้เรียกว่า Error-correcting code (ECC)

- ข้อมูล 4 บิต ถูกกำหนดให้เขียนไว้ในส่วนตัดด้านใน 4 ส่วน
- ส่วนที่เหลือจะถูกเติมด้วย 0หรือ 1โดยจะต้องทำให้จำนวนเลข 1ในรูปวงกลมแต่ละวงมี    จำนวนเป็นเลขคู่
- ข้อผิดพลาดที่เกิดขึ้นทำให้บิตใดบิตหนึ่งกลายเป็น 0ก็จะสามารถตรวจพบได้ทันทีด้วยการตรวจ      บิตแพริตี้
- แก้ไขโดยเปลี่ยนส่วนที่ผิดให้กลายบิตตรงกันข้าม ซึ่งจะทำให้คุณสมบัติของวงกลมทั้งสามถูกต้อง

Syndrome word

คือ ผลที่ได้จากการเปรียบเทียบข้อมูลทางตรรกะ (Comparison logic) โดยใช้ฟังก์ชั่น exclusive OR (ถ้าบิตเหมือนกันจะได้ค่าเป็น 0 ถ้าบิตต่างกันได้ค่าเป็น 1)
เนื่องจากข้อผิดพลาดอาจเกิดขึ้นในบิตใดๆ ก็ได้จากข้อมูล M บิต และข้อมูลสำหรับการตรวจสอบอีก K บิต ดังนั้นจะได้ความสัมพันธ์



สมมติว่ามีข้อมูลขนาด 8 บิต (M = 8) จะได้ว่า
ถ้า K = 3 จะได้ว่า 231 < 8 + 3
ถ้า K – 4 จะได้ว่า 24 1 > 8 + 4

การสร้าง Syndrome word ขนาด 4 บิต สำหรับข้อมูล 8 บิต
ถ้า Syndrome word มีค่าเป็น 00000000แสดงว่าไม่มีข้อผิดพลาดในข้อมูลนั้น
ถ้า Syndrome word มี 1แทรกอยู่เพียงบิตเดียว แสดงว่าข้อผิดพลาดเกิดขึ้นในบิตตรวจสอบ (1 ใน 4 บิต) จึงไม่จำเป็นต้องแก้ไข
ถ้า Syndrome word มี 1มากกว่า 1 บิต แล้ว ค่าของบิต Syndrome word จะบอกตำแหน่งข้อมูลที่ผิดพลาด ซึ่งจะต้องกลับบิตที่ตำแหน่งนั้นเป็นบิตตรงกันข้าม

ตำแหน่งของบิตข้อมูลและบิตตรวจสอบ


ขออธิบายใรส่วนของครงนี้นะครับ
         ตรง Position Number หมายความว่า ให้เราเรียงบิทจากทางขวาไปทางซ้าน โดยเทียบจากเลยฐาน 10 ตาม Bit Position  ซึ่งวิธีคำนวณ Position Number ก็คือบวกเพิ่มอีก 1 บิทโดยเลขฐาน 2
ก่อนอื่นต้องทบทวนเรื่องเลขฐานสองกันก่อนเลยนะครับ สำหรับเลขฐานสองนั้นก็มีอยู่เพียงสองตัวคือ 0 กับ 1 นั้นเอง
ฐ.2       ฐ.10
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
บวกเพิ่มอีก 1 ไปเรื่อยๆ ซึ่งวิธีการตรวจสอบว่าถูกหรือไม่นั้นก็คือ




ลองเอาตัวเลขสี่หลักที่คำนวณได้มาเทียบในช่องข้างบนนี้ดูว่าตรงกับฐาน 10 ที่เปรียบเทียบหรือไม่
     ทีนี้ผมจะอธิบายต่อในส่วนของ Data Bit คือ บิทข้อมูลที่เราต้องการนำมาตรวจสอบ
     และ Check Bit คือ บืทตรวจสอบนั่นเอง












จากภาพด้านบน เราจะเห็นสมการการคำนวณ Check Bit นะครับว่า ทำอย่างไร
C1 หมายความให้เอาบิทในช่องของ Position Number ที่มีลำดับตัวแรกเป็น 1 (นับจากขวาไปซ้าย)
C2 หมายความให้เอาบิทในช่องของ Position Number ที่มีลำดับตัวที่ 2 เป็น1 (หลักอื่นจะเป็นอะไรก็แล้วแต่)
C4 หมายความให้เอาบิทในช่องของ Position Number ที่มีลำดับตัวที่ 3 เป็น1
C8 หมายความให้เอาบิทในช่องของ Position Number ที่มีลำดับตัวที่ 4 เป็น1
จากนั้นให้นำมา XOR กัน หมายความว่า บิทเหมือนกันได้ 0 ต่างกันได้ 1
1 XOR 1 = 0
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
  เครื่องหมายนี้หมายถึงการ XOR



ตัวอย่างการคำนวณบิทตรวจสอบ
เมื่อนำบิตตรวจสอบเก่าและบิตตรวจสอบใหม่มาเปรียบเทียบกันจะได้ว่า
ผลลัพธ์ที่ได้คือ 0110แสดงว่าบิตตำแหน่งที่ 6 (Bit position) หรือ D3 เป็นบิตที่ไม่ถูกต้อง
โค้ดรหัสที่กล่าวถึงจัดอยู่ในประเภท single-error-correcting (SEC) ซึ่งจะไม่สามารถตรวจสอบหรือแก้ไขใดๆ ถ้ามีบิตที่ผิดพลาดพร้อมกันมากกว่า 2 บิต

ลองทำโจทย์ซัก 1 ข้อนะครับ

สมมติว่า Data Bit คือ 11000010
Check Bit คือ 1011
เมื่อได้ Data Bit และ Check Bit มาแล้ว ก็นำลงไปเรียงในตรารางเลยครับ


หลังจากที่เรียงเสร็จแล้ว ก็ให้คำนวณหา Check Bit ว่าตรงตามที่ให้มาหรือไม่ โดยใช้สูตรนี้ครับ(ผมขอใช้ . แทนความหมายของ XOR ก็แล้วกันนะครับ)
C1 = D1 . D2 . D4 . D5 . D7 0 . 1 . 1 . 1 . 0 1
C2 = D1 . D3 . D4 . D6 . D7 0 . 0 . 1 . 1 . 0 X,OR กัน => 0
C3 = D2 . D3 . D4 . D8 1 . 0 . 1 . 1 1
C8 = D5 . D6 . D7 . D8 1 . 1 . 0 . 1 1


ดังนั้น บิท ที่ตรวจสอบได้จากการคำนวณ เท่ากับ 1101 (ให้เรียงจากล่างขึ้นบน)
จากนั้นเราจึง นำบิทที่เราคำนวณได้ ไป XOR กับ บิทตรวจสอบที่ให้มา


ผลการคำนวณคือ 0110 หมายความว่า มีการผิดพลาดตรงตำแหน่ง 0110 นั่นก็คือ ตำแหน่ง D3 นั่นเอง ให้ทำการแก้ไขบิท ตรงตำแหน่ง D3 ให้เป็นบิทตรงกันข้าม  จากเดิมเป็น 0 ให้เปลี่ยนเป็น 1 
เราก็จะได้ข้อมูลที่ถูกต้องก็คือ 11000110 นั่นเองครับ

หากจุดนี้เราทำการ XOR กันแล้ว ได้ 0000 หมายความว่าไม่มีบิทไหนผิดพลาดครับ

ลองเอาตัวอย่างนี้ไปทำดูนะครับ
1. ข้อมูล 11000001 บิตตรวจสอบ 0100
2. ข้อมูล 01111001 บิตตรวจสอบ 1111
3. ข้อมูล 00110110 บิตตรวจสอบ 0111
4. ข้อมูล 10101010 บิตตรวจสอบ 0100

5. ข้อมูล 10001111 บิตตรวจสอบ 0111 

  สุดท้ายนี้ขอขอบคุณข้อมูลจาก
 SCT 0001 สถาปัตยกรรมและองค์ประกอบของคอมพิวเตอร์          สำนักวิชาคอมพิวเตอร์และเทคโนโลยีสารสนเทศ มหาวิทยาลัยราชภํฏเชียงรายเป็นอย่างสูงครับ