วันเสาร์ที่ 14 มีนาคม พ.ศ. 2552

คำนำ

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

สารบัญ

สารบัญ


บทที่ 1 - พื้นฐานสถาปัตยกรรมคอมพิวเตอร์
บทที่ 2 - ข้อมูล (Data)
บทที่ 3 - การคำนวณทางคณิตศาสตร์ หน่วยประมวลผล

ทางคณิตศาสตร์และตรรกะ (ALU)
บทที่ 4 - ชุดคำสั่ง (Instruction Sets)
บทที่ 5 - การออกแบบโปรเซสเซอร์ (Processor Design)
บทที่ 6 - การนำข้อมูลเข้าและการส่งข้อมูลออก
บทที่ 7 - การคำนวณทางคณิตศาสตร์
บทที่ 8 - รูปแบบของคำสั่งและการบ่งตำแหน่งที่อยู่
บทที่ 9 - โครงสร้างและหน้าที่ของซีพียู
บทที่ 10 - บัสและอินเทอร์เฟซ (Bus & Interface)
บทที่ 11 - อินพุต/เอาต์พุต (Input/Output)
บทที่ 12 - หน่วยควบคุมและเส้นทางข้อมูล
บทที่ 13 - การสื่อสาร,เครือข่ายและอินเทอร์เน็ต
บทที่ 14 - มัลติโปรเซสเซอร์ (Multiprocessors)
บทที่ 15 - ระบบปฏิบัติการ (Operating Systems
)

บทที่ 1 - พื้นฐานสถาปัตยกรรมคอมพิวเตอร์


พื้นฐานสถาปัตยกรรมคอมพิวเตอร์













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


ประเภทของคอมพิวเตอร์
- คอมพิวเตอร์ระดับยิ่งใหญ่ หรือซุปเปอร์คอมพิวเตอร์ (Super Computer)
- คอมพิวเตอร์ระดับใหญ่ หรือเมนเฟรมคอมพิวเตอร์ (Mainframe Computer)
- คอมพิวเตอร์ระดับเล็ก หรือมินิคอมพิวเตอร์ (Mini Computer)
- คอมพิวเตอร์ส่วนบุคคล หรือพีซี (PC : Personal Computer)
- คอมพิวเตอร์ขนาดสมุดบันทึก หรือโน็ตบุค (Notebook Computer)
- คอมพิวเตอร์ที่ทำหน้าที่เลขาส่วนตัว หรือพีดีเอ (PDA : Personal Digital Assistant)
- คอมพิวเตอร์เครือข่าย หรือเน็ต (Net)

องค์ประกอบระบบคอมพิวเตอร์
- ฮาร์ดแวร์ (Hardware)
- ซอฟต์แวร์ (Software)
- บุคลากร (Pepleware)
- ข้อมูล (Data)
- กระบวนการทำงาน (Procedure)

ฮาร์ดแวร์ (Hardware)
- หน่วยรับข้อมูลหรืออินพุต (Input Unit)
- หน่วยประมวลผลกลางหรือซีพียู (CPU : Central Processing Unit)
- หน่วยเก็บข้อมูล (Storage)
- หน่วยเก็บข้อมูลหรือความจำหลัก (Primary Storage หรือ Main Memory)
- หน่วยเก็บข้อมูลสำรอง (Secondary Storage)
- หน่วยแสดงข้อมูลหรือเอาต์พุต (Output Unit)



โครงสร้างระบบคอมพิวเตอร์ด้านอินพุต/เอาต์พุต
ซอฟต์แวร์ (Software)

- ซอฟต์แวร์ระบบ (System Software)
- โปรแกรมระบบปฏิบัติการ (OS : Operating System)
- โปรแกรมแปลภาษาคอมพิวเตอร์ (Translator Program)
- ยูทิลิตี้หรือโปรแกรมอรรถประโยชน์ (Utility Program)
- ซอฟต์แวร์สำเร็จรูป (Package)
- ซอฟต์แวร์ประยุกต์ (Application Software)


บุคลากร (Peopleware)
- ออกแบบและวิเคราะห์ระบบ (System Analysis and Design)
- โปรแกรมเมอร์ (Programming)
- ผู้บริหารฐานข้อมูล (Database Administrator : DBA)
- ผู้ปฏิบัติการ (Operator)
- ผู้ใช้ (User)
- ผู้บริหาร (Manager)

ข้อมูล (Data)
ข้อมูลเป็นสิ่งที่ต้องบันทึกลงไปในคอมพิวเตอร์ พร้อมกับโปรแกรมที่นักคอมพิวเตอร์ได้เขียนไปเพื่อผลิตผลลัพธ์ที่ต้องการออกมา หน่วยที่เล็กที่สุดของข้อมูลได้แก่ ตัวอักขระ (Character) ซึ่งจะประกอบไปด้วยตัวอักษร ตัวเลข และสัญลักษณ์ต่างๆ เมื่อนำตัวอักขระเหล่านี้มารวมกัน จะทำให้ได้หน่วยข้อมูลที่ใหญ่ขึ้น คือ ฟิลด์ (Field) เมื่อนำฟิลด์หลายๆ ฟิลด์มาประกอบกันจะเป็น เรกคอร์ด (Record) และถ้านำหลายๆ เรกคอร์ดมาประกอบกันจะเป็นไฟล์ (File) และหากนำหลายๆ ไฟล์มารวมกัน ในลักษณะที่มีความสัมพันธ์กันในแต่ละไฟล์ด้วยจะกลายเป็นฐานข้อมูล (Database)


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


วิวัฒนาการของคอมพิวเตอร์
- ลูกคิด (Abacus)
- John Napier สร้างเครื่องคิดเลขที่เรียกว่า “Napier’s Bones”
- Henry Briggs คิดค้นแบบคำนวณตารางลอการิทึม
- Edmund Gunter ได้นำค่าลอการิทึมของ Briggs มาแกะลงไม้บรรทัด
- William Aughtred ได้นำความคิดของ Gunter มาสร้าง Slide Rule ซึ่งถือว่าเป็นคอมพิวเตอร์อนาลอกเครื่องแรกของโลก
- Charles Babbage สร้างเครื่องมือที่ชื่อ “อนาไลติคัล เอ็นจิน“ (Analytical engine)
- Ada Lovelace โปรแกรมเมอร์คนแรกของโลก => ภาษา Ada





ยุคคอมพิวเตอร์
- ยุคแรก (ค.ศ.1945-1955) เป็นยุคคอมพิวเตอร์พื้นฐาน ที่เป็น หลอดสูญญากาศใช้ยูทิลิตี้แบบธรรมดา
- ยุคที่ 2 (ค.ศ.1955-1964) เป็นยุคทรานซิสเตอร์ ที่ช่วยให้คอมพิวเตอร์มีความน่าเชื่อถือมากขึ้น
- ยุคที่ 3 (ค.ศ.1965-1980) เริ่มมีการคิดค้นและผลิต IC (Integrated Circuit) ทำให้คอมพิวเตอร์มีขนาดเล็กลง มีการพัฒนาภาษาขั้นสูง
- ยุคที่ 4 (ค.ศ.1980-ปัจจุบัน) มีความซับซ้อนมากขึ้น ใช้ระบบปฏิบัติการแบบ multi-mode ใช้คุณลักษณะเวอร์ชวลแมชชีน (Virtual machines) และมีการสื่อสารข้อมูล
- ยุคที่ 5 คอมพิวเตอร์ในอนาคต



สถาปัตยกรรมคอมพิวเตอร์คืออะไร ?
- ผู้ออกแบบระบบ IBM System/360 “สถาปัตยกรรมคอมพิวเตอร์ หมายถึงโครงสร้างของคอมพิวเตอร์ที่โปรแกรมเมอร์ของระบบจะต้องเข้าใจในภาษาเครื่องเพื่อเขียนโปรแกรมให้เครื่องทำงานได้อย่างถูกต้อง”
- Bell และ Newell ให้แนวคิดของสถาปัตยกรรมคอมพิวเตอร์ในรูปแบบระดับชั้นที่เรียกว่า hierarchical, multilevel descriptionระดับทั้ง 4 ประกอบด้วยระดับวงจรอิเล็กทรอนิกส์ (Electronics Circuit Level), ระดับการออกแบบลิจิก (Logic Design Level), ระดับการโปรแกรม (Programming Level) และระดับการสวิตช์โปรเซสเซอร์และหน่วยความจำ (Processor-Memory-Switch Level)


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

- ช่องการสื่อสารข้อมูลที่เชื่อมระบบเข้าด้วยกันอาจจะเป็นการเชื่อมต่อระหว่างอุปกรณ์ 2 อุปกรณ์ หรือเป็นสวิตช์ที่ซับซ้อนที่เชื่อมต่อหลาย ๆ องค์ประกอบเข้าด้วยกัน
- แผนภาพ PMS แทนส่วนประกอบหลักของเครื่องคอมพิวเตอร์ส่วนบุคคลแอปเปิลแมคอินทอช (Apple Macintosh) ในตอนต้นจะใช้ช่องสื่อสารข้อมูลเดี่ยวที่เรียกว่า “บัส” (bus) ซึ่งจะเชื่อมต่อส่วนประกอบหลักทั้งหมด จนเมื่อบัสเป็นสวิตช์จะมีส่วนประกอบเพียงสองส่วนที่สามารถติดต่อซึ่งกันและกันในเวลาหนึ่ง ๆ เมื่อสวิตช์ถูกสร้างขึ้นเพื่อการถ่านโอนข้อมูลของอุปกรณ์อินพุต/เอาต์พุต

โมเดลของ von Neumann
- เครื่องของ von Neumann ทั้งโปรแกรมและข้อมูลจะใช้หน่วย ความจำเดียวกัน โดยจะมี program counter (PC) ชี้คำสั่งปัจจุบันในหน่วยความจำ เมื่อไม่มีคำสั่ง branch จะมีการดึงคำสั่งจากหน่วยความจำมาประมวลผลเรียงลำดับเรื่อยไปจนกว่าจะหมดคำสั่ง

บทที่ 2 - ข้อมูล (Data)


ข้อมูล
(Data)
ข้อมูลเป็นองค์ประกอบที่สำคัญอย่างหนึ่งในระบบคอมพิวเตอร์ เป็นสิ่งที่ต้องป้อนเข้าไปในคอมพิวเตอร์ พร้อมกับโปรแกรมที่นักคอมพิวเตอร์เขียนขึ้นเพื่อผลิตผลลัพธ์ที่ต้องการออกมา ข้อมูลที่สามารถนำมาใช้กับคอมพิวเตอร์ได้ มี 5 ประเภท คือ ข้อมูลตัวเลข (Numeric Data) ข้อมูลตัวอักษร (Text Data) ข้อมูลเสียง (Audio Data) ข้อมูลภาพ (Images Data) และข้อมูลภาพเคลื่อนไหว (Video Data)
โครงสร้างข้อมูล (Data Structure)
บิต (Bit) คือ ข้อมูลที่มีขนาดเล็กที่สุด เป็นข้อมูลที่เครื่องคอมพิวเตอร์สามารถเข้าใจและนำไปใช้งานได้ ซึ่งได้แก่ เลข 0 หรือ เลข 1 เท่านั้น
ไบต์ (Byte) หรือ อักขระ (Character) ได้แก่ ตัวเลข หรือ ตัวอักษร หรือ สัญลักษณ์พิเศษ 1 ตัว เช่น 0, 1, …, 9, A, B, …, Z และเครื่องหมายต่างๆ ซึ่ง 1 ไบต์จะเท่ากับ 8 บิต หรือ ตัวอักขระ 1 ตัว เป็นต้น
ฟิลด์ (Field) ได้แก่ ไบต์ หรือ อักขระตั้งแต่ 1 ตัวขึ้นไปรวมกันเป็นฟิลด์ เช่น เลขประจำตัว ชื่อพนักงาน เป็นต้น
เรคคอร์ด (Record) ได้แก่ ฟิลด์ตั้งแต่ 1 ฟิลด์ ขึ้นไป ที่มีความสัมพันธ์เกี่ยวข้องรวมกันเป็นเรคคอร์ด เช่น ชื่อ นามสกุล เลขประจำตัว ยอดขาย ข้อมูลของพนักงาน 1 คน เป็น 1 เรคคอร์ด
ไฟล์ (Files) หรือ แฟ้มข้อมูล ได้แก่ เรคคอร์ดหลายๆ เรคคอร์ดรวมกัน ซึ่งเป็นเรื่องเดียวกัน เช่น ข้อมูลของประวัติพนักงานแต่ละคนรวมกันทั้งหมดเป็นไฟล์หรือแฟ้มข้อมูลเกี่ยวกับประวัติพนักงานของบริษัท เป็นต้น
ฐานข้อมูล (Database) คือ การเก็บรวบรวมไฟล์ข้อมูลหลายๆ ไฟล์ที่เกี่ยวข้องกันมารวมเข้าด้วยกัน เช่น ไฟล์ข้อมูลของแผนกต่างๆ มารวมกันเป็นฐานข้อมูลของบริษัท เป็นต้น

การวัดขนาดข้อมูล
ในการพิจารณาว่าข้อมูลใดมีขนาดมากน้อยเพียงไร เรามีหน่วยในการวัดขนาดของข้อมูลดังต่อไปนี้
8 Bit = 1 Byte
1,024 Byte = 1 KB (กิโลไบต์)
1,024 KB = 1 MB (เมกกะไบต์)
1,024 MB = 1 GB (กิกะไบต์)
1,024 GB = 1TB (เทระไบต์)

บทที่ 3 - การคำนวณทางคณิตศาสตร์ หน่วยประมวลผลทางคณิตศาสตร์และตรรกะ (ALU)

การคำนวณทางคณิตศาสตร์
หน่วยประมวลผลทางคณิตศาสตร์และตรรกะ (ALU)
หน่วยประมวลผลทางคณิตศาสตร์และตรรกะ
ALU เป็นส่วนประกอบที่เป็นอิเล็กทรอนิกส์ที่ใช้พื้นฐานทางดิจิตอลลอจิก ทำหน้าที่ประมวลผลในคอมพิวเตอร์ทั้งทางด้านคณิตศาสตร์และตรรกะ โดยซีพียูจะมี ALU ประกอบอยู่ภายในซีพียู โดยซีพียูจะใช้งาน ALU ร่วมกับหน่วยควบคุม (Control Unit) รีจิสเตอร์ หน่วยความจำ และอุปกรณ์อินพุต/เอาต์พุต
ALU
การเปลี่ยนเป็นค่าตรงข้าม
ใช้ sign-and-magnitude
+21 = 00010101
-21 = 10010101 sign-and-magnitude
ใช้ 2’s complement
+21 = 00010101 2’s complement
= 11101010 กลับค่าแต่ละบิต
+ 1
-21 = 11101011
การบวกและการลบ
ใช้ 2’s complement
- ใช้หลัก a-b = a+(-b)
- ไม่คิดตัวทด และค่าสูงสุดไม่เกินของจำนวนบิต
การบวกและการลบ
ใช้ 1’s complement

- ถ้ามีตัวทดเกิดขึ้น จะนำไปบวกเข้ากับค่าผลลัพธ์ที่ได้
การคูณ
จำนวนเต็มไม่มีเครื่องหมาย
- ตั้งตัวคูณให้ตำแหน่งขวาสุดตรงกับตัวตั้ง
- ผลคูณย่อยที่เกิดขึ้นตำแหน่งขวาสุดให้ตรงตัวคูณ
- นำผลคูณย่อยมารวมกัน
- จำนวนเต็มมีเครื่องหมาย (บวก)
- จำนวนเต็มมีเครื่องหมาย (ลบ)
การหาร
-การบวกและลบเลขทศนิยม
- การตรวจสอบค่า 0
- การปรับเลขชี้กำลังให้เท่ากัน
- ทำการบวกหรือลบค่าของจำนวนนั้น (Mantissa)
- ปรับให้อยู่ในรูปแบบทั่วไป
การคูณเลขทศนิยม
- โฟลว์ชาร์ตแสดงการคูณเลขทศนิยม (Z <--X x Y)
การหารเลขทศนิยม
- โฟลว์ชาร์ตแสดงการคูณเลขทศนิยม (Z <--X / Y)
Haft Adder และ Full Adder
- ตารางค่าความจริงของการบวกเลข 2 บิต และวงจรสำหรับการบวกเลข 2 บิต
- ตารางค่าความจริงการบวกเลข 3 บิต (2 บิตและมีตัวทด) และสัญลักษณ์ Full Adder
- วงจร Full Adder ที่เกิดจาก Haft Adder 2 ตัว
Ripple-Carry Adder
- Ripple-Carry Adder (ขนาด 4 บิต)
- ตัวบวกขนาด 16 บิตที่เกิดจากการเรียงต่อกันของ Ripple-Carry Adder 4 ตัว

Ripple-Borrow Subtractor
- ตัวลบขนาด 16 บิตที่เกิดจากการเรียงต่อกันของ Ripple-Borrow Subtractor 4 ตัว

บทที่ 4 - ชุดคำสั่ง (Instruction Sets)

ชุดคำสั่ง
(Instruction Sets)
ชุดคำสั่ง
- โปรเซสเซอร์ใช้คำสั่งได้ตามคำสั่งที่ถูกบรรจุลงใน ALU
- คำสั่งหลาย ๆ คำสั่งที่บรรจุลงใน ALU นี้เรียกว่าชุดคำสั่งของเครื่อง (Machine Instructions Sets)
- ชุดคำสั่งนี้ทำให้ผู้ออกแบบระบบคอมพิวเตอร์และโปรแกรมเมอร์อยู่ในขอบเขต เดียวกัน
- ผู้ออกแบบระบบมองว่าชุดคำสั่งประกอบด้วยฟังก์ชันพื้นฐานสำหรับการทำงานของคอมพิวเตอร์
- อาจกล่าวได้ว่าการสร้างโปรเซสเซอร์ก็คือการสร้างชุดคำสั่งนั่นเอง
- โปรแกรมเมอร์จะต้องพิจารณาถึงโครงสร้างของรีจิสเตอร์และหน่วยความจำ ประเภทข้อมูลในเครื่อง และฟังก์ชันของ ALU เพื่อเขียนโปรแกรมสั่งให้ซีพียูทำงาน
คุณสมบัติพื้นฐานของคำสั่ง
ชุดคำสั่ง (Instruction Sets) หมายถึงชุดของคำสั่งที่โปรเซสเซอร์เอ็กซิคิวต์เพื่อดำเนินการตามที่โปรแกรมเมอร์ต้องการ อาจเรียกชุดคำสั่งว่า “คำสั่งเครื่อง” (machine instructions) หรือ “คำสั่งคอมพิวเตอร์” (computer instructions) ก็ได้ ในแต่ละชุดคำสั่งอาจจะมีคำสั่งที่หลากหลายประกอบอยู่ เช่น คำสั่งสำหรับการบวก ซีพียูจะต้องมีคำสั่งในการโหลดข้อมูลจากรีจิสเตอร์ลงหน่วยความจำ แล้วเรียกใช้คำสั่งสำหรับการบวก หลังจากนั้นจะมีคำสั่งเพื่อเก็บค่าผลลัพธ์กลับรีจิสเตอร์อีกครั้ง
- ชุดคำสั่งของแต่ละโปรเซสเซอร์จะมีความแตกต่างกัน
- สิ่งที่แตกต่างกันอาจจะเป็นขนาดของคำสั่ง ประเภทของโอเปอเรชัน ประเภทของโอเปอแรนด์ หรือประเภทของผลลัพธ์ก็ได้
- ชุดคำสั่งที่แตกต่างกันนี้อาจจะเกิดจากโครงสร้างภาษาชั้นสูงที่โปรแกรมเมอร์ใช้งาน เช่น ภาษา C Pascal หรือ Ada เป็นต้น
- โปรแกรมภาษาชั้นสูงเหล่านี้จะถูกคอมไพล์ (compile) ด้วยคอมไพเลอร์หรือตัวแปรภาษานั้นให้เป็นภาษาเครื่องเพื่อทำงานต่อไป
- ต้องมีการคอมไพล์ใหม่ให้ตรงกับโปรเซสเซอร์ที่ใช้งาน
- การคอมไพล์ใหม่เป็นการเปลี่ยนภาษาชั้นสูงให้เป็นภาษาเครื่องตามชุดคำสั่งของซีพียูนั่นเอง
วงรอบคำสั่ง
- การทำงานของคอมพิวเตอร์คือการที่โปรเซสเซอร์เอ็กซิคิวต์คำสั่งในโปรแกรมตามลำดับเรื่อยไปตั้งแต่ต้นจนจบ
- รูปแบบคำสั่งที่ง่ายที่สุดจะมี 2 ขั้นตอนคือการที่โปรเซสเซอร์อ่านหรือเฟ็ตช์คำสั่ง (fetches) จากหน่วยความจำครั้งละ 1 คำสั่ง หลังจากนั้นจะเอ็กซิคิวต์ (execute) ตามคำสั่งนั้น
- Instruction Address Calculation (IAC) หาตำแหน่งที่เก็บคำสั่งต่อไปที่โปรเซสเซอร์จะอ่านเข้ามา
- Instruction Fetch (IF) อ่านคำสั่งจากตำแหน่งบนหน่วยความจำลงในโปรเซสเซอร์
- Instruction Operation Decoding (IOD) วิเคราะห์คำสั่งเพื่อพิจารณาประเภทของโอเปอเรชั่นที่กระทำและที่จะใช้
- Operand Address Calculation (OAC) หาตำแหน่งของโอเปอเรชัน
- Operation Fetch (OF) อ่านโอเปอร์แรนด์จากหน่วยความจำหรืออุปกรณ์อินพุตเอาต์พุต
- Data Operation (DO) นำข้อมูลกระทำตามโอเปอเรชั่น
- Operand Store (OS) เขียนผลลัพธ์ลงในหน่วยความจำ
ส่วนประกอบคำสั่งเครื่อง
- Operation code : กำหนดโอเปอเรชันที่จะกระทำ (เช่น ADD, I/O) โอเปอเรชันถูกกำหนดด้วยเลขฐานสองที่เรียกว่า operation code หรือ opcode
- Source operand reference : กำหนดส่วนอ้างอิงของโอเปอแรนด์ที่ใส่เข้ามาสำหรับโอเปอเรชัน
- Result operand reference : อ้างอิงถึงผลลัพธ์จากโอเปอเรชัน
- Next instruction reference : บอกซีพียูว่าจะไปอ่านคำสั่งต่อไปได้จากไหนหลังจากเอ็กซิคิวต์คำสั่งนี้เสร็จสมบูรณ์แล้ว
ประเภทคำสั่ง
- Data processing : คำสั่งทางคณิตศาสตร์และตรรกะ
- Data storage : คำสั่งจัดการหน่วยความจำ
- Data movement : คำสั่งจัดการอินพุต/เอาต์พุต
- Control : คำสั่งตรวจสอบเงื่อนไขและกระโดดไปทำงาน
จำนวนแอ็ดเดรส
- One-address
- Two-address
- Three-address
- Zero-address
- โดยทั่วไปการกล่าวถึงสถาปัตยกรรมคอมพิวเตอร์จะกล่าวถึงจำนวนแอ็ดเดรส
- ปัจจุบันมีความสำคัญน้อยกว่าการออกแบบซีพียู
- จำนวนแอ็ดเดรสของระบบมีผลต่อวงรอบการทำงานของคำสั่งเครื่อง
- ยิ่งมีจำนวนแอ็ดเดรสมากก็จะยิ่งทำให้วงรอบการทำงานน้อยลง ทำให้ทำงานได้เร็วขึ้น
การออกแบบชุดคำสั่ง
- Operation repertoire : จำนวนโอเปอเรชันที่มีให้เลือกใช้ รวมทั้งความซับซ้อนของโอเปอเรชันที่ควรเป็น
- Data type : ความหลากหลายของประเภทของข้อมูลที่ทำโอเปอเรชัน
- Instruction format : ความยาวของคำสั่ง (เป็นบิต) จำนวนแอ็ดเดรส ขนาดของฟิลด์ และอื่น ๆ
- Register : จำนวนรีจิสเตอร์ที่คำสั่งสามารถอ้างอิงและใช้ประโยชน์ได้
ประเภทโอเปอเรชัน
- โอเปอเรชันทางด้านการถ่ายโอนข้อมูล (Data transfer)
- โอเปอเรชันทางด้านคณิตศาสตร์ (Arithmetic)
- โอเปอเรชันทางด้านตรรกะ (Logical)
- โอเปอเรชันทางด้านการแปลงค่า (Conversion)
- โอเปอเรชันทางด้านอุปกรณ์อินพุต/เอาต์พุต (I/O)
- โอเปอเรชันทางด้านการควบคุมระบบ (System control)
พื้นฐานของโอเปอเรชันสามารถแบ่งเป็นกลุ่ม ๆ ได้คือ
ประเภทโอเปอแรนด์
- แอ็ดเดรส
- ตัวเลข
- คาแรกเตอร์
- ข้อมูลตรรกะ
ประเภทของโอเปอแรนด์มีดังนี้
ประเภทข้อมูลของ Pentium

- General ประเภทข้อมูลที่เป็น Byte, word, doubleword, quadword
- Integer ค่าเลขฐานสองที่มีเครื่องหมาย
- Ordinal ค่าจำนวนเต็มไม่มีเครื่องหมาย
- Unpacked binary coded decimal (BCD)การแสดงค่าของตัวเลข BCD ในช่วง 0-9
- Packed BCD ไบต์ที่แสดงตัวเลข BCD 2 ค่า อยู่ระหว่าง 0-99
- Near pointer แอ็ดเดรสขนาด 32 บิต ใช้สำหรับ พอยเตอร์เพื่ออ้างอิงในหน่วยความจำ
- Bit field ชุดของบิตที่เรียงต่อเนื่อง แต่ละบิตมีความเป็นอิสระ
- Byte string byte , word , doubleword ที่เรียงต่อเนื่องกัน
- Floating point ตัวเลขที่เป็นทศนิยม
- Addressing : การกำหนดโหมดของแอ็ดเดรสสำหรับโอเปอแรนด์
โครงสร้างข้อมูลตัวเลขของ Pentium
ประเภทข้อมูลของ PowerPC

- Unsigned byte ใช้ทางตรรกะและคณิตศาสตร์ของจำนวนเต็ม
- Unsigned Halfword เหมือนกับ Unsigned byte แต่ใช้ 16 บิต
- Signed Halfword ใช้สำหรับคำสั่งทางคณิตศาสตร์
- Unsigned Word ใช้ทางตรรกะและเป็นแอ็ดเดรสพอยเตอร์
- Signed Word ใช้สำหรับคำสั่งทางคณิตศาสตร์
- Unsigned Doubleword ใช้เป็นแอ็ดเดรสพอยเตอร์
- Byte String ขนาด 0-128 ไบต์

บทที่ 5 - การออกแบบโปรเซสเซอร์


การออกแบบโปรเซสเซอร์
(Processor Design)
โปรเซสเซอร์และซีพียู
- โปรเซสเซอร์ (Processor) จะเป็นตัวประมวลผลเพียงตัวเดียว
- ซีพียู (CPU : Central Processing Unit) หมายถึงหน่วยประมวลผลกลางที่หมายรวมถึงตัวประมวลผล, หน่วยประมวลผลทางคณิตศาสตร์และตรรกะ (ALU) และหน่วยควบคุม (Control Unit)
องค์ประกอบของซีพียู
- สถาปัตยกรรมของซีพียูเป็นตัวบ่งบอกถึงลักษณะเฉพาะ และลักษณะการทำงานที่สำคัญของซีพียู
- อาจจะเรียกอีกแบบหนึ่งว่า “สถาปัตยกรรมชุดคำสั่ง” (ISA : Instruction Set Architecture)
- ลักษณะเฉพาะของซีพียูนี้กล่าวรวมไปถึง จำนวนและประเภทของรีจิสเตอร์, วิธีการกำหนดโหมดของแอ็ดเดรสของหน่วยความจำ และการออกแบบชุดคำสั่งต่าง ๆ (Instruction Sets)
- ปัจจุบันนี้แบ่งออกเป็น 2 กลุ่มคือ CISC (Complex Instruction Set Computers) และ RISC (Reduced Instruction Set Computers)
โครงสร้างการเอ็กซิคิวต์คำสั่งใน CISC และ RISC
ลักษณะเฉพาะของ CISC
- มีการรวมเอาคุณสมบัติด้านต่าง ๆ เช่น การกำหนดโหมดของแอ็ดเดรส (Addressing Mode) หรือประเภทคำสั่ง (Instruction Type) เข้าด้วยกันเพื่อปรับปรุงขีดความสามารถในการทำงาน
- นักออกแบบมองว่าปริมาณการใช้หน่วยความจำ และเวลาที่ใช้ในการเข้าถึงต่าง ๆ ในการทำงานของคอมพิวเตอร์ต้องมองเป็นราคาต่อหน่วย
- สถาปัตยกรรมแบบ CISC มีจำนวน Addressing Mode หลายแบบ
- ลักษณะนี้ส่งผลให้ชุดคำสั่งที่ใช้มีขนาด และใช้เวลาในการประมวลผลแตกต่างกัน
- ผู้ใช้ยอมรับและพอใจ เนื่องจากผู้ใช้สามารถเพิ่มจำนวนโอเปอเรชันบนโปรแกรมที่มีขนาดเท่าเดิมได้
ลักษณะเฉพาะของ RISC
- หนึ่งชุดคำสั่งต่อวงรอบ
- ความยาวของชุดคำสั่งคงที่
- ติดต่อกับหน่วยความจำด้วยคำสั่งโหลดและสโตร์เท่านั้น
- การใช้การกำหนดโหมดของแอ็ดเดรสที่เรียบง่าย
- การใช้โอเปอเรชันที่เรียบง่ายและมีจำนวนจำกัด
- การหน่วงเวลาชุดคำสั่งบางประเภท
- การใช้เทคนิคพรีเฟ็ตช์ และสเปคคูเลทีฟ
- การแบ่งหน้าที่ให้คอมไพเลอร์จัดการ
ยุคเชื่อมต่อระหว่าง CISC กับ RISC
- เดิมคอมพิวเตอร์ยุคแรกจะประมวลผลชุดคำสั่งทีละคำสั่งในหนึ่งช่วงเวลา
- นักออกแบบได้พยายามที่จะปรับปรุงอัตราการประมวลผลชุดคำสั่งให้เพิ่มมากขึ้นโดยใช้วิธีการโอเวอร์แลป (Overlap) ชุดคำสั่งให้มีมากกว่าชุดคำสั่งในการประมวลผลแต่ละครั้ง
- วิธีการโอเวอร์แลปดังกล่าวนี้ต่อมารู้จักกันในชื่อของ Pipelining และ Superscalar
- หลักการทั่ว ๆ ไป ของการประมวลผลชุดคำสั่งคือคอมพิวเตอร์จะโหลดชุดคำสั่งที่ต้องการประมวลผลมาจากหน่วยความจำ เราเรียกขั้นตอนนี้ว่าดึงหรือเฟ็ตช์คำสั่ง (Fetch)
- หลังจากนั้นก็จะทำการประมวลผลหรือเอ็กซิคิวต์ (Execute) แล้วจึงจะเฟ็ตช์ชุดคำสั่งต่อไปเข้ามาหลังจากประมวลผลชุดคำสั่งแรกเสร็จสิ้น
- วิธีการเพิ่มประสิทธิภาพด้วยการโอเวอร์แลปก็คือการเฟ็ตช์ชุดคำสั่งถัดไปเข้ามาก่อนที่ชุดคำสั่งแรกจะทำเสร็จ เราเรียกว่า พรีเฟ็ตช์ (Prefetch)
- อีก เทคนิคที่คล้ายกันเรียกว่าซุปเปอร์สเกลลาร์ (Superscalar) ซึ่งเป็นเทคนิคที่ใช้กับโปรเซสเซอร์ที่มีความสามารถรับชุดคำสั่งเข้าไปประมวลผลได้ทีละหลาย ๆ ชุดคำสั่งพร้อม ๆ กัน
- เทคนิคไปป์ไลน์และซุปเปอร์สเกลลาร์ไม่สามารถนำมาใช้กับ CISC ได้ เนื่องจาก CISC มีความยาวของชุดคำสั่งที่ไม่แน่นอน และ Addressing mode ที่หลากหลายและซับซ้อนทำให้ลดประสิทธิภาพของ CISC ลง
กรณีตัวอย่าง CISC : Motorola MC68000
- สถาปัตยกรรมของซีพียูและหน่วยความจำ
- CPU register
- Memory
- การกำหนดโหมดของแอ็ดเดรส (Addressing Mode)
- รูปแบบคำสั่งของ MC68000 (Instruction Formats)
กรณีตัวอย่าง RISC : The SPARC
- สถาปัตยกรรมของโปรเซสเซอร์และหน่วยความจำของ SPARC
- แยกกลุ่มรีจิสเตอร์ระหว่าง Integer register และ Floating-point register
- มี Branch delayที่ต้องการโปรแกรมเคาเตอร์ (PC) 2 ชุด
- Processor state ประกอบด้วยรีจิสเตอร์ 32 ชุด
- ชุดคำสั่งมีขนาดคงที่ 32 บิต
- อินสตรัคชันรีจิสเตอร์ (IR)มีขนาด 32 บิต
- หน่วยความจำมีขนาด 32 บิตมีขนาดได้ถึง 232 ไบต์
- มีการกำหนดใช้ MMU (Memory Mapping Unit) ทำให้สามารถอ้างอิงเนื้อที่บนหน่วยความจำได้มากขึ้น
- การกำหนดโหมดของแอ็ดเดรสของ SPARC (Addressing Mode)
- register + register
- register + sign-extended, immediate 13-bit constant
- รูปแบบคำสั่งของ SPARC (Instruction Formats)

บทที่ 6 - การนำข้อมูลเข้าและการส่งข้อมูลออก

การนำข้อมูลเข้าและการส่งข้อมูลออก
(Pipeline, Scalar & Vector Processor)

ความรู้ทั่วไปเกี่ยวกับหน่วยรับและส่งข้อมูล
หน่วยรับส่งข้อมูลเข้าออก ทำหน้าที่เป็นตัวกลาง การถ่ายเทข้อมูลระหว่างระบบคอมพิวเตอร์กับโลกภายนอก โดยโลกภายนอกจะหมายถึงอุปกรณ์บริวารประเภทต่าง ๆ เช่น แป้นพิมพ์ จอภาพ เครื่องพิมพ์ นอกจากนี้อุปกรณ์บริวารยังหมายถึง อุปกรณ์ที่ใช้ในงานอื่น ๆ ที่ต่อเชื่อมอยู่กับระบบคอมพิวเตอร์ เช่น ในเครื่องคอมพิวเตอร์ที่ใช้ในกระบวนการผลิตในโรงงานอุตสาหกรรม อาจจะต่อเชื่อมอยู่กับอุปกรณ์วัดหรือควบคุมอุณหภูมิ อุปกรณ์เครื่องมือวัดต่าง ๆ เป็นต้น หน่วยรับส่งข้อมูลเข้าออก บางทีจะเรียกว่า อุปกรณ์เชื่อมต่อไอโอ หรือเรียกทับศัพท์ว่า อุปกรณ์อินเตอร์เฟส (interface) เนื่องจากอุปกรณ์เชื่อมต่อนี้จะเป็นชุดของวงจร ซึ่งอาจจะเป็นชุดมาตรฐานที่ติดตั้งมาพร้อมกับระบบคอมพิวเตอร์ ได้แก่ ชุดเชื่อมต่อแป้นพิมพ์ เมาส์ เครื่องพิมพ์ หรืออาจจะผลิตออกมาเป็นแผงวงจร (การ์ด) เพื่อนำไปเสียบลงในช่องขยายเพิ่ม (Expansion slot) ในระบบคอมพิวเตอร์ ดังนั้นจึงอาจจะเรียกว่า อินเตอร์เฟสการ์ดหรือโมดูลไอโอ (คำว่าไอโอ หมายถึง Input / Output)
หน่วยรับส่งข้อมูลเข้าออกจะจัดข้อมูลที่รับจากอุปกรณ์ต่อพ่วงให้อยู่ในรูปที่เหมาะสมแล้วส่งให้ระบบคอมพิวเตอร์ ในทางกลับกันก็จะสามารถรับข้อมูลจากระบบคอมพิวเตอร์ แล้วจัดให้อยู่ในรูปที่เหมาะสม เพื่อส่งให้อุปกรณ์ต่อพ่วง การทำหน้าที่ดังกล่าวนี้ เนื่องจากรูปแบบทางข้อมูลที่ใช้ในอุปกรณ์ต่อพ่วงและระบบคอมพิวเตอร์ โดยปกติจะมีรูปแบบที่แตกต่างกัน
หน่วยรับข้อมูลเข้าออกแต่ละหน่วย จะเชื่อมต่ออยู่กับบัสหลัก คือ บัสตำแหน่ง บัสข้อมูล และบัสควบคุม ดังนั้นการบ่งชื่อหรือตำแหน่งของหน่วยรับส่งข้อมูลเข้าออก สามารถ ทำได้สองวิธี วิธีแรกโดยการจัดให้หน่วยรับส่งข้อมูลเข้าออกเป็นส่วนหนึ่งของหน่วยความจำหลัก จึงสามารถที่จะใช้ คำสั่ง ส่งข้อมูลเข้าออกหน่วยรับส่งข้อมูลเข้าออกได้เช่นเดียวกับคำสั่งที่ใช้กับหน่วยความจำปกติ วิธีที่สองทำโดยการจัดวงจรเพิ่มเติมเพื่อบ่งตำแหน่งหรือรหัสประจำหน่วยรับส่งข้อมูลเข้าออก กรณีนี้จะต้องใช้คำสั่งเฉพาะของหน่วยรับส่งข้อมูลเข้าออก
การเชื่อมต่ออุปกรณ์ต่อพ่วงปกติจะไม่สามารถเชื่อมต่อเข้าโดยตรงกับบัสหลัก แต่จะต่อผ่านโมดุลไอโอโดยมีเหตุผลดังนี้
- อุปกรณ์ต่อพ่วงมีอยู่จำนวนมาก ซึ่งมีวิธีทำงานที่แตกต่างกันทำให้ไม่มีความเหมาะสมในการปล่อยให้ซีพียู เป็นตัวควบคุมการทำงานอุปกรณ์ทั้งหมด
- อัตราการถ่ายเทข้อมูลของอุปกรณ์ต่อพ่วงนั้นช้ากว่าความเร็วในการทำงานของซีพียู มาก ดังนั้นจึงเป็นการไม่เหมาะสมที่จะต่ออุปกรณ์เหล่านี้เข้ากับบัสโดยตรง
- อัตราการถ่ายเทข้อมูลของอุปกรณ์บางชนิด สูงกว่าความเร็วของหน่วยความจำหลัก หรือแม้กระทั่ง ซีพียู ซึ่งก็ไม่เหมาะสมที่จะนำอุปกรณ์เหล่านี้ต่อเข้าโดยตรงกับบัสเช่นกัน
- โครงสร้างข้อมูลหรือขนาดของเวิร์ดไม่เหมือนกับรูปแบบหรือขนาดที่เครื่องคอมพิวเตอร์ใช้อยู่

รูปแบบการรับและส่งข้อมูล
หน่วยรับส่งข้อมูลเข้าออก มีการรับส่งข้อมูลอยู่ 2 ระบบ ได้แก่ การรับส่งข้อมูลแบบขนานหรืออาจเรียกว่า PIO (parallel Input / Output) ซึ่งจะสามารถรับส่งข้อมูลได้ครั้งละหลายบิต เช่น 4, 8, 16 หรือ 32 บิต นอกจากการรับส่งข้อมูลแล้ว จะต้องมีการแลกเปลี่ยนสัญญาณควบคุมระหว่างหน่วยรับส่งข้อมูลเข้าออกและอุปกรณ์ต่อพ่วงด้วย ทั้งนี้เพื่อรักษาจังหวะในการถ่ายเทข้อมูล ระหว่างหน่วยรับส่งข้อมูลเข้าออกและอุปกรณ์ต่อพ่วง สัญญาณควบคุมมีประโยชน์มากเพราะโดยปกติ อุปกรณ์ต่อพ่วงจะมีการทำงานในอัตราที่ช้ากว่าระบบคอมพิวเตอร์ หากระบบคอมพิวเตอร์ส่งข้อมูลด้วยอัตราความเร็วจนอุปกรณ์ต่อพ่วงรับไม่ทัน ก็จะเกิดการสูญหายของข้อมูล วิธีแก้ก็คืออุปกรณ์ต่อพ่วงจะมีสัญญาณคอยแจ้งว่าตนเองพร้อมที่จะรับข้อมูลเพิ่มเติม (ready) และหน่วยรับส่งข้อมูลเข้าออกก็จะมีสัญญาณคอยแจ้งว่าจะมีการส่งข้อมูล การประสานงานกันระหว่างสัญญาณทั้งสองนี้ เรียกว่า วิธีจับมือ (handshaking) ระหว่างหน่วยรับส่งข้อมูลเข้าออกและอุปกรณ์ต่อพ่วงซึ่งจะทำให้การรับส่งข้อมูลที่มีประสิทธิภาพขึ้น

หน้าที่และโครงสร้างของหน่วยรับและส่งข้อมูลเข้าออก
หน้าที่ของหน่วยรับและส่งข้อมูล
หน่วยรับส่งข้อมูลเข้าออกหรือโมดูลไอโอ จะเป็นตัวคั่นกลางระหว่างระบบคอมพิวเตอร์และอุปกรณ์ต่อพ่วง ดังนั้น โมดูลไอโอซึ่งทำหน้าที่บริการทั้งสองด้าน หน้าที่หลักของโมดูลไอโอ สามารถแบ่งออกได้ดังนี้
- การควบคุมและรักษาจังหวะการทำงาน
- การสื่อสารกับโปรเซสเซอร์และสื่อสารกับอุปกรณ์ต่อพ่วง
- การจัดการบัฟเฟอร์
- การตรวจสอบข้อผิดพลาด
ในช่วงเวลาใด ๆ ก็ตาม โปรเซสเซอร์อาจจะทำการสื่อสารกับอุปกรณ์ภายนอกหนึ่งอย่างหรือมากกว่านี้ ในรูปแบบที่ไม่สามารถคาดเดาได้ ซึ่งขึ้นอยู่กับความต้องการไอโอของโปรแกรมที่ทำงานอยู่ในเวลานั้น ทรัพยากรภายใน เช่น หน่วยความจำหลักและบัสหลัก จะต้องถูกนำมาใช้ในงานร่วมกันระหว่างกิจกรรมหลายชนิด ร่วมทั้งการอ่านหรือบันทึกข้อมูลผ่านโมดูลไอโอ ดังนั้นฟังก์ชันไอโอจึงหมายถึง ความต้องการในการควบคุมและการจับเวลา(control and timing)เพื่อการประสานงานให้ข้อมูลสามารถไหลผ่านทางทรัพยากรภายในในอุปกรณ์ภายนอกได้ตัวอย่างเช่น การควบคุมการถ่ายเทข้อมูลจากอุปกรณ์ภายนอกมายังโปรเซสเซอร์ อาจจะเกี่ยวพันกับการทำงานดังนี้
- โปรเซสเซอร์ทำการติดต่อกับโมดูลไอโอ เพื่อตรวจสอบสถานะของอุปกรณ์ที่ต้องการใช้งาน
- โมดูลไอโอส่งข้อมูลแสดงสถานะกลับมาให้
- ถ้าอุปกรณ์นั้นสามารถใช้งานได้ และพร้อมที่จะถ่ายเทข้อมูล โปรเซสเซอร์จะร้องขอถ่ายเทข้อมูลผ่านการออกคำสั่งไปยังโมดูลไอโอ
- โมดูลไอโอได้รับข้อมูลชุดแรก (8 บิตหรือ16 บิต)มาจากอุปกรณ์ภายนอก
- ข้อมูลถ่ายเทจากโมดูลไอโอต่อไปกับโปรเซสเซอร์
ถ้าระบบคอมพิวเตอร์มีบัสหลักใช้งาน การโต้ตอบระหว่างโปรเซสเซอร์และโมดูลไอโอจะเกี่ยวข้องกับการถือครองบัส เหตุการณ์ที่สมมติยังแสดงให้เห็นว่า โมดูลไอโอจะต้องสื่อสารกับโปรเซสเซอร์และสื่อสารกับอุปกรณ์ภายนอก การสื่อสารกับโปรเซสเซอร์เกี่ยวข้องกับสิ่งต่อไปนี้
- การถอดรหัสคำสั่ง (command decoding) : โมดูลไอโอรับคำสั่งจากโปรเซสเซอร์ซึ่งปกติจะส่งสัญญาณมาทางบัสควบคุมการทำงาน(control bus)ตัวอย่างเช่นโมดูลไอโอสำหรับขับดิสก์จะรับคำสั่งเช่น READ SECTOR,WRITE SECTOR,SEEK track number,และ SCAN record ID คำสั่งสองคำสั่งหลังจำเป็นต้องมีการส่งผ่านตัวกำหนดค่ามาด้วย ซึ่งจะส่งมาทางบัสสำหรับถ่ายเทข้อมูล
- ข้อมูล (Data) : โปรเซสเซอร์จะแลกเปลี่ยนข้อมูลกับโมดูลไอโอ ผ่านทางบัสสำหรับถ่ายเทข้อมูล
- การรายงานสถานะ (status reporting) : เนื่องจากอุปกรณ์ต่อพ่วง มักจะมีความเร็วต่ำมาก จึงมีความจำเป็นต้องทราบสถานะการทำงานของอุปกรณ์ ตัวอย่างเช่น ถ้าโมดูลไอโอถูกสั่งให้อ่านข้อมูลส่งมาให้โปรเซสเซอร์ อุปกรณ์ดังกล่าวอาจจะยังไม่ว่างเนื่องจากกำลังให้บริการคำสั่งที่มาก่อนหน้านี้ ข้อเท็จจริงข้อนี้สามารถส่งยังโปรเซสเซอร์ผ่านทางสัญญาณสถานะการทำงาน ซึ่งโดทั่วไปมีอยู่สองอย่างคือ BUSY (ไม่- - การรับรู้ที่อยู่ (address recognition): อุปกรณ์ไอโอก็คล้ายกับหน่วย ความจำ คือแต่ละ เวิร์ด จะมีหมายเลขที่อยู่เฉพาะเป็นของตนเอง นั้นคืออุปกรณ์ไอโอแต่ละชิ้นจะต้องมีหมายเลขเฉพาะสำหรับการอ้างอิงเป็นของตนเอง ดังนั้นโมดูลไอโอจะต้องสามารถรับรู้หมายที่อยู่เฉพาะของอุปกรณ์แต่ละชนิดได้
อีกด้านหนึ่ง โมดูลไอโอจะต้องสามารถสื่อสารกับอุปกรณ์ไอโอได้ การสื่อสารนี้ได้แก่การออกคำสั่ง รายงานสถานะการทำงาน และการถ่ายเทข้อมูล
งานที่มีความสำคัญมากที่สุดส่วนหนึ่งของโมดูลไอโอคือ การทำบัฟเฟอร์สำหรับข้อมูล (data buffering) ความต้องการนี้จะถ่ายเทข้อมูลไปยังหรือมาจากหน่วยความหลักหรือโปรเซสเซอร์นั้นสูงมาก แต่อัตราการถ่ายเทข้อมูลของอุปกรณ์ต่อพ่วงต่าง ๆ นั้นช้ามากกว่าหลายเท่าตัว และยังมีอัตราการถ่ายเทที่แตกต่างกันในช่วงที่กว้างมากด้วย ข้อมูลที่ถูกส่งมาจากหน่วยจำหลัก ถูกส่งมายังโมดูลไอโอในลักษณะที่มีความเร็วสูงมากแต่เป็นช่วงสั้น ๆ เรียกว่า เบิรซท์ (burst) ข้อมูลนั้นจะถูกเก็บไว้ในบัฟเฟอร์ของโมดูลไอโอ จากนั้นจึงถูกส่งไปยังอุปกรณ์ต่อพ่วงด้วยความเร็วต่ำเท่ากับอุปกรณ์นั้นๆ ซึ่งในด้านที่รับข้อมูลนั้นก็จะทำงานที่ความเร็วสูงมาก เพื่อไม่ให้หน่วยความจำต้องมาถูกบังคับให้ทำงานช้าลงเพราะอุปกรณ์ความเร็วต่ำ โมดูลไอโอจึงสามารถทำงานเท่ากับหน่วยความจำและโปรเซสเซอร์ และจะต้องสามารถทำงานได้ช้ามากเท่ากับความเร็วของอุปกรณ์ต่อพ่วงแต่ละตัวที่มีใช้งาน ในทางกลับกันถ้าอุปกรณ์ไอโอทำงานที่ความเร็วสูงมากกว่าที่หน่วยความจำจะทำงานตามได้ทันแล้ว โมดูลไอโอจะต้องใช้เทคนิคบัฟเฟอร์กับอุปกรณ์นั้น

โครงสร้างของโมดูลไอโอ
โมดูลไอโอแต่ละโมดูลมีความแตกต่างกันมากมายหลายแบบขึ้นอยู่กับชนิดและการทำงานของอุปกรณ์ต่อพ่วง จำนวนอุปกรณ์ที่ต่อพ่วงโมดูลที่จะควบคุมได้ ในที่นี้จะกล่าวถึงรูปแบบทั่วไปเท่านั้น แสดงบล็อกไดอะแกรมของโมดูลไอโอทั่วไป โมดูลไอโอจะมีส่วนที่เชื่อมต่อระบบคอมพิวเตอร์โดยผ่าน บัสหลัก ได้แก่ บัสข้อมูล บัสตำแหน่งและบัสควบคุม ข้อมูลที่ส่งผ่านโมดูลจะผ่านบัฟเฟอร์ที่เป็นรีจีสเตอร์ข้อมูล ซึ่งรีจีสเตอร์นี้จะทำหน้าที่พักข้อมูลที่รับจากซีพียูเพื่อส่งไปให้อุปกรณ์ต่อพ่วงหรือทำหน้าที่รับข้อมูลจากอุปกรณ์ต่อพ่วงเพื่อส่งไปให้ซีพียู
การควบคุมไอโอด้วยโปรแกรม
วิธีการทำงานของไอโอมีอยู่สามวิธี วิธีแรกคือการควบคุมด้วยโปรแกรม(programmed I/O) ข้อมูลจะเกิดการแลกเปลี่ยนระหว่างโปรเซสเซอร์กับโมดูลไอโอ โปรเซสเซอร์จะประมวลผลโปรแกรมที่เป็นการออกคำสั่งโดยตรงเกี่ยวกับการทำงานของไอโอรวมทั้งการตรวจสอบสถานะของอุปกรณ์ การสั่งอ่านหรือบันทึกข้อมูล และการถ่ายเทข้อมูล เมื่อโปรเซสเซอร์ออกคำสั่งไปยังโมดูลไอโอ โปรเซสเซอร์จะต้องรอจนกว่าการตอบสนองต่อคำสั่งนั้นจะสิ้นสุด ถ้าโปรเซสเซอร์ทำงานได้เร็วกว่าโมดูลไอโอ การรอคอยนี้จะเป็นการเสียเวลาของโปรเซสเซอร์เป็นอย่างยิ่ง วิธีที่สองเรียกว่า การควบคุมไอโอผ่านกระบวนการอินเทอร์รัพท์ (Interrupt-driven I/O) โปรเซสเซอร์จะออกคำสั่งไอโอ แล้วหันกลับไปประมวลผลคำสั่งอื่นต่อไป เมื่อโมดูลไอโอทำงานที่ได้รับมอบนั้นเสร็จเรียบร้อยแล้วก็จะส่งสัญญาณผ่านอินเทอร์รัพท์มาบอกให้ทราบ ทั้งสองวิธีนี้โปรเซสเซอร์จะต้องรับผิดชอบในการดึงข้อมูลออกมาจากหน่วยความจำหลักและส่งไปให้โมดูลไอโอ และจะต้องจัดการบันทึกข้อมูลที่ได้รับจากโมดูลไอโอเข้าไปในหน่วยความจำสำหรับการอ่านข้อมูล วิธีที่สามคือ ดีเอ็มเอ หรือการเข้าถึงหน่วยความจำหลักโดยตรง (Direct memory access: DMA) ด้วยวิธีการนี้ โมดูลไอโอและหน่วยความจำหลักจะแลกเปลี่ยนข้อมูลกันโดยตรง โดยที่โปรเซสเซอร์จะมีส่วนร่วมในการทำงานน้อยมาก
การควบคุมไอโอด้วยโปรแกรมนั้น เมื่อซีพียูประมวลผลโปรแกรมหลักจะทำการตรวจสอบรีจีสเตอร์สถานะ (I/O status register) ของไอโอเป็นระยะ ๆ (ตามเวลาที่กำหนดไว้) ว่าอุปกรณ์ต่อพ่วงใดแสดงความพร้อมที่จะขอติดต่อกับซีพียู หรืออีกกรณีหนึ่งเมื่อซีพียูพบคำสั่งที่เกี่ยวข้องกับไอโอ ซีพียูก็จะเรียกใช้ชุดคำสั่งหรือโปรแกรมย่อย เพื่อให้บริการอุปกรณ์ต่อพ่วงนั้น จากนั้นก็จะเปลี่ยนบิตบอกสถานะของโมดูลไอโอให้เป็น “0” หรือเป็นค่าที่เหมาะสม เพื่อเมื่อปฏิบัติเสร็จเรียบร้อยโมดูลไอโอก็จะไม่ทำอะไรต่อ ดังนั้นจึงเป็นหน้าที่ของ ซีพียูที่จะคอยตรวจสอบ ดูสถานะของโมดูลไอโอจนพบว่างานที่ได้สั่งให้ทำนั้นเสร็จเรียบร้อยแล้ว

ในการประมวลผลคำสั่งที่เกี่ยวข้องกับไอโอ ซีพียูจะต้องกำหนดหมายเลขที่อยู่หรือแอดเดรสของโมดูลไอโอและอุปกรณ์ต่อพ่วง หรืออุปกรณ์ต่อพ่วงแต่ละชนิดจะได้รับหมายเลขที่ไม่ซ้ำกัน เมื่อซีพียูส่งคำสั่งไอโอมายังโมดูลไอโอ คำสั่งนั้นจะระบุหมายเลขที่อยู่ของอุปกรณ์ต่อพ่วงที่ต้องการไว้ด้วยเสมอ ดังนั้นโมดูลไอโอจะต้องตรวจสอบสัญญาณที่มาตามสายสัญญาณว่า เป็นหมายเลขที่อยู่ของตนเองหรือไม่ คำสั่งที่ต้องการให้อุปกรณ์ต่อพ่วงปฏิบัติจะมี 4 อย่างด้วยกันคือ
- การควบคุม (Control) : ใช้ในการกระตุ้นให้อุปกรณ์ไอโอพร้อมที่จะปฏิบัติงาน และบอกให้ทราบว่าจะต้องทำงานอะไร ตัวอย่างเช่น หน่วยเทปแม่เหล็กอาจได้รับคำสั่งให้ม้วนเทปกลับหรือหมุนเทปไปข้างหน้าหนึ่งระเบียน คำสั่งเหล่านี้จะได้รับการปรับแต่งให้มีความเหมาะสมกับอุปกรณ์แต่ละชนิด
- การทดสอบ (Test) : ใช้สำหรับการทดสอบสถานะการทำงานหลายอย่างของโมดูลไอโอและอุปกรณ์ โปรเซสเซอร์จะต้องการทราบว่าอุปกรณ์ที่ต้องการใช้งานนั้น มีความพร้อมใช้งานอยู่หรือไม่ หรือต้องการทราบว่าคำสั่งที่ให้ปฏิบัติก่อนหน้านี้ได้เสร็จเรียบร้อยหรือยัง หรือว่ามีข้อผิดพลาดใด ๆ เกิดขึ้นหรือไม่
- การอ่านข้อมูล (Read) : จะทำให้โมดูลไอโออ่านข้อมูลมาจากอุปกรณ์ที่ต่อพ่วงและใส่เข้าไว้ในบัฟเฟอร์ จากนั้นโปรเซสเซอร์จะสามารถนำข้อมูลไปใช้ โดยออกคำสั่งให้โมดูลไอโอใส่ข้อมูลเข้าไปในบัสนำสั่ง- การบันทึกข้อมูล (Write) : จะทำให้โมดูลไอโอนำข้อมูล (ไบต์ หรือ เวิร์ด) จากบัสนำส่งข้อมูล ไปส่งต่อให้กับอุปกรณ์ต่อพ่วงที่ต้องการ

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

ในไมโครโปรเซสเซอร์แทบทุกประเภท การอินเทอร์รัพท์กระทำโดยการที่อุปกรณ์ต่อพ่วงส่งสัญญาณอิเล็กทรอนิกส์ไปเปลี่ยนระดับตรรกะที่ขาหนึ่งของไมโครโปรเซสเซอร์ เราเรียกขานั้นว่า ขาอินเทอร์รัพท์ เพื่อแจ้งให้ไมโครโปรเซสเซอร์ทราบ กระบวนการในการเกิดอินเทอร์รัพท์ จะเกิดเหตุการณ์ดังต่อไปนี้
- อุปกรณ์ไอโอจะส่งสัญญาณอินเทอร์รัพท์ไปยังซีพียู
- ซีพียูทำการประมวลผลคำสั่งในโปรแกรมที่กำลังทำงานอยู่จนเสร็จเรียบร้อย (เฉพาะคำสั่งที่กำลังทำอยู่นั้น) ก่อนที่จะตอบสนองต่ออินเทอร์รัพท์
- ซีพียูจะทำการทดสอบอินเตอร์รัพท์ ตรวจสอบว่ามีเพียงอินเทอร์รัพท์เดียว และส่งสัญญาณตอบรับไปยังอุปกรณ์ที่ส่งสัญญาณอินเทอร์รัพท์นั้น การตอบรับจะทำให้อุปกรณ์นั้นหยุดส่งสัญญาณอินเทอร์รัพท์
- ซีพียูจะเตรียมการประมวลผลโปรแกรมสำหรับอินเทอร์รัพท์นั้น (เรียกว่า interrupt routine) ซึ่งเริ่มต้นด้วยการบันทึกข้อมูลที่เกี่ยวข้องกับการประมวลผลโปรแกรมที่กำลังทำงานอยู่นั้น (ก่อนเกิดอินเทอร์รัพท์) ประกอบด้วย (1) สถานะการทำงานของโปรเซสเซอร์ซึ่งเก็บอยู่ในรีจีสเตอร์ตัวหนึ่ง เรียกว่า Program status word (PSW) และ (2) ตำแหน่งของคำสั่งต่อไปที่จะถูกประมวลผล ซึ่งเก็บอยู่ในรีจีสเตอร์เรียกว่า Program counter (PC) ข้อมูลเหล่านี้อาจถูกเก็บในสแต็กควบคุมการทำงานของระบบ)
- โปรเซสเซอร์จะดึงคำสั่งแรกของโปรแกรมสำหรับอินเทอร์รัพท์ที่เกิดขึ้นนั้น ขึ้นมาทำงานเพื่อตอบเสนองต่ออินเทอร์รัพท์ โปรแกรมดังกล่าวอาจเป็นเพียงโปรแกรมเดียวสำหรับอินเทอร์รัพท์แต่ละอย่าง หรือโปรแกรมเดียวสำหรับอุปกรณ์แต่ละอย่าง ซึ่งขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์หรือระบบปฏิบัติการที่เลือกใช้ ในกรณีที่มีโปรแกรมสำหรับอินเทอร์รัพท์มากกว่าหนึ่งโปรแกรม โปรเซสเซอร์จะต้องทำการตัดสินใจเลือกโปรแกรมหนึ่งขึ้นมาทำงานซึ่งข้อมูลสำหรับการตัดสินใจนี้อาจถูกส่งมาพร้อมกับสัญญาณอินเทอร์รัพท์แล้ว หรือโปรเซสเซอร์อาจจะต้องส่งสัญญาณไปถามอุปกรณ์ที่เป็นผู้ส่งสัญญาณอินเทอร์รัพท์เข้ามาจึงจะสามารถเลือกโปรแกรมที่ถูกต้องได้
- ณ เวลานี้ โปรแกรมเคาน์เตอร์และ PSW ที่เกี่ยวข้องกับโปรแกรมที่ถูกขัดจังหวะการทำงานได้ถูกบันทึกไว้ในสแต็กของระบบเรียบร้อยแล้ว อย่างไรก็ตาม ยังคงมีข้อมูลอื่นที่ถือได้ว่าเป็นส่วนหนึ่งของสถานะของโปรแกรมที่กำลังถูกประมวลผลอยู่ นั่นคือข้อมูลที่เก็บอยู่ใน รีจีสเตอร์ภายในตัวโปรเซสเซอร์จะต้องถูกบันทึกไว้เช่นเดียวกัน เนื่องจากรีจีสเตอร์เหล่านี้อาจถูกใช้โดยโปรแกรมสำหรับอินเทอร์รัพท์ ดังนั้นข้อมูลในรีจีสเตอร์เหล่านี้ (และอาจหมายถึงข้อมูลแสดงสถานะอื่น ๆ ) จะต้องถูกบันทึกไว้ด้วย โดยทั่วไปโปรแกรมสำหรับอินเทอร์รัพท์จะเริ่มต้นการทำงานด้วยการบันทึกข้อมูลในรีจีสเตอร์ลงในสแต็ก
- โปรแกรมนี้ก็จะเริ่มทำงานต่อไป ด้วยการตรวจสอบสถานะที่เกี่ยวข้องกับการทำงานไอโอที่ต้องการ หรือเหตุการณ์อื่นที่ทำให้เกิดอินเทอร์รัพท์ การทำงานนี้อาจรวมถึงการส่งคำสั่งเพิ่มเติมหรือการส่งการตอบรับไปยังอุปกรณ์ไอโอ
- เมื่อโปรแกรมอินเทอร์รัพท์ทำงานเสร็จแล้ว ก็จะปิดท้ายด้วยการคืนค่าให้แก่ รีจีสเตอร์ในซีพียูที่นำมาจากสแต็กของระบบ
- การทำงานส่วนสุดท้ายคือ การคืนค่าให้แก่ PSW และโปรแกรมเคาน์เตอร์ที่นำมาจากสแต็กของระบบ ทำให้คำสั่งต่อไปที่จะถูกประมวลผลนั้นถูกอ่านมาจากคำสั่งในตำแหน่งต่อไปของโปรแกรมที่ถูกขัดจังหวะการทำงานก่อนหน้านี้

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

การเชื่อมต่อโมดูลไอโอกับอุปกรณ์ต่อพ่วง
การติดต่อสื่อสารระหว่างคอมพิวเตอร์กับอุปกรณ์ภายนอกหรืออุปกรณ์ต่อพ่วง ซึ่งมีอยู่มากหมายหลายประเภท เช่น แป้นพิมพ์ เครื่องพิมพ์ สแกน โมเด็ม เป็นต้น ซึ่งอุปกรณ์เหล่านี้จะต้องอาศัยช่องทาง (port) สำหรับส่งถ่ายข้อมูล พอร์ตหรือช่องทางนี้มีการทำงานอยู่สองแบบ คือ ทำงานแบบอนุกรม (serial) และทำงานแบบขนาน (parallel) ดังได้กล่าวมาแล้วในหัวข้อ 6.3 ในการทำงานของส่วนเชื่อมต่อแบบขนานจะมีสายสัญญาณหลายเส้นเชื่อมต่อระหว่างโมดูลไอโอและอุปกรณ์ต่อพ่วงทำให้สามารถถ่ายโอนข้อมูลได้หลายบิตพร้อม ๆ กัน ส่วนการเชื่อมต่อแบบอนุกรมจะมีสายสัญญาณเพียงเส้นเดียวเท่านั้นที่ใช้ในการถ่ายโอนข้อมูล ซึ่งจะถูกส่งออกครั้งละหนึ่งบิต การเชื่อมต่อแบบขนานมักจะใช้ เชื่อมต่อกับอุปกรณ์ต่อพ่วงที่สามารถทำได้อย่างรวดเร็ว เช่น ฮาร์ดดิสก์หรือเทปแม่เหล็ก ในขณะที่การเชื่อมต่อแบบอนุกรมจะนำไปใช้กับอุปกรณ์ที่มีความเร็วต่ำ เช่น เครื่องพิมพ์ จอภาพ เป็นต้น ในปัจจุบันได้มีการขยายการเชื่อมต่อแบบอนุกรมความเร็วสูงสุดขึ้นมาใช้งาน ซึ่งจะทำให้การเชื่อมต่อแบบขนานมีความสำคัญลดลง การเชื่อมต่อแบบอนุกรม ความเร็วสูงที่กำลังได้รับ ความนิยมก็คือ USB และ FireWire
มาตรฐานการเชื่อมต่อ USB
USB ย่อมาจาก Universal Serial Bus เป็นมาตรฐานการเชื่อมต่ออุปกรณ์ ไอโอ ภายนอกแบบใหม่สำหรับเครื่องคอมพิวเตอร์ในระดับพีซีที่ใช้งานง่ายราคาถูก สามารถจัด คอนฟิกูเรชันได้ง่ายอีกทั้งมีความเร็วอีกทั้งมีความเร็วในการถ่ายเทข้อมูลสูงสุด ซึ่งสามารถสนับสนุนการถ่ายข้อมูลที่ความเร็ว12Mb/วินาที ลักษณะของข้อมูลสามารถเป็นได้ทั้งรูปแบบการถ่ายเทข้อมูลในลักษณะกระแสและแพ็กเก็ต (Packet ในที่นี้จะหมายถึงในลักษณะรูปแบบของข้อมูลที่มีแบบแผนตายตัวที่เรียกว่า Frame ที่ประกอบด้วยส่วนหัว ส่วนข้อมูลและส่วนหางที่ใช้ตรวจสอบความผิดพลาดของข้อมูล)
การที่ USB สนับสนุนการส่งถ่ายข้อมูลหลายรูปแบบดังกล่าว จึงทำให้ USB สามารถรับรองอุปกรณ์ ไอโอ ได้หลากหลาย เช่น เมาส์ แป้นพิมพ์ กล้องถ่ายภาพและอุปกรณ์เชื่อมต่อ ISDN นอกจากนี้ USB ยังยอมให้เชื่อมต่อแบบ Hot plug ซึ่งหมายถึงความสามารถติดตั้งอุปกรณ์ไอโอ ได้ทันที่โดยไม่ต้องปิดเครื่องคอมพิวเตอร์เสียก่อน
อุปกรณ์ที่ทำงานภายใต้ USB สามารถทำงานที่ความเร็วต่ำได้แก่ 1.5 Mb/วินาที หรือความเร็วสูงสุดคือ 12 Mb/วินาที ซึ่งข้อดีของการทำงานที่เร็วต่ำหมายถึงสัญญาณ
รบกวนที่เกี่ยวกับสนามแม่เหล็กไฟฟ้าจะมีน้อยกว่าอุปกรณ์ที่ทำงานด้วยความเร็วสูง ด้วยเหตุนี้จึงมีความน่าเชื่อถือมากกว่า
USB มีรูปแบบความเร็วในการถ่ายเทข้อมูล 2 แบบ ได้แก่ แบบความเร็วสูงสุด ซึ่ง USB ใช้เพื่อการส่งข่าวสารและถ่ายเทข้อมูลที่ความเร็ว 12 Mbps อุปกรณ์ที่ทำงานความเร็วสูงสุด ได้แก่ ซิปไดรฟ์ สแกนเนอร์ และเครื่องพิมพ์ เป็นต้น ส่วนแบบความเร็วต่ำอยู่ที่ 1.5 Mbps อุปกรณ์ที่ทำงานบนความเร็วต่ำ ได้แก่ แป้นพิมพ์ เมาส์ จอยสติก เป็นต้น โดยมี USB Host ที่ตั้งบนเมนบอร์ด ทำหน้าที่จัดการดูแลช่องสัญญาณและความเร็วของ USB ในแต่ละพอร์ต รวมทั้งควบคุมการสื่อสารและการถ่ายเทข้อมูล ระหว่าง USB Host กับอุปกรณ์ USB
ข้อดีของการใช้ USB มีหลายประการดังต่อไปนี้
- ราคาประหยัด USB ช่วยประหยัดค่าใช้จ่ายในการติดตั้งอุปกรณ์ไอโอรอบข้างของพีซี
- Hot Plug ท่านสามารถติดตั้งอุปกรณ์ ได้ทันที่โดยไม่ต้องปิดเครื่องคอมพิวเตอร์เสียก่อน การติดตั้งแบบนี้จะไม่ส่งผลกระทบต่อ USB รวมทั้งอุปกรณ์ข้างเคียง
- ใช้คอนเน็กเตอร์แบบเดี่ยว ด้วยคอนเน็กเตอร์ 1 ช่องสามารถติดตั้งอุปกรณ์ USB ใดก็ได้ แต่ถ้าต้องการเชื่อมต่ออุปกรณ์ USB มากกว่านี้ต้องติดตั้งผ่านฮับ USB
- สนับสนุนอุปกรณ์ความเร็วต่ำและความเร็วสูง USB สามารถสนับสนุนอุปกรณ์ที่ทำงานด้วยความเร็วต่ำได้แก่ 1.5 Mb/วินาที และสูงสุดที่ความเร็ว 12 Mb/วินาที ด้วยความเร็วต่ำจะทำให้ USB ทำงานได้ดีกับอุปกรณ์ USB ราคาถูก เนื่องจากสามารถใช้สายสัญญาณเชื่อมต่อที่ไม่ต้องมีระบบป้องกันการรบกวนของสนามแม่เหล็ก
- สามารถจ่ายไฟจากสายเคเบิล อุปกรณ์ไอโอที่เชื่อมต่อภายนอกสามารถรับแรงดันไฟเลี้ยงอุปกรณ์จากสายเคเบิล USB โดยเฉพาะแรงดันไฟขนาด 5.0 Vdc นอกจากนี้กระแสไฟที่ส่งออกมาผ่านทางสายเคเบิลนี้มีขนาด 100-500 mA ทั้งนี้ขึ้นอยู่กับ USB ฮับ
- มีระบบตรวจสอบและแก้ไขความผิดพลาด ระบบ USB ยังมีการตรวจสอบความผิดพลาดรวมทั้งการแก้ไขในขณะที่มีการส่งถ่ายข้อมูลไปมาระหว่างอุปกรณ์ USB กับ USB อินเทอร์เฟส กรณีที่ตรวจพบความผิดพลาดระหว่างการถ่ายเทข้อมูลจะพยายามรับส่งข้อมูลกันใหม่อีกครั้ง ซึ่งเพิ่มความน่าเชื่อถือในการขนถ่ายข้อมูล
- ประหยัดพลังงาน อุปกรณ์ USB จะเข้าสู่การหยุดทำงานชั่วคราวถ้าไม่มีการทำงานใด ๆ เกิดขึ้นบนระบบบัสหลังจาก 3 มิลลิวินาทีผ่านไป และในขณะที่อยู่ในห้วงของการหยุดทำงานชั่วคราวดังกล่าว ระบบจะกินกระแสไฟเพียง 500 ไมโครแอมแปร์เท่านั้น
- สามารถสนับสนุนรูปแบบการถ่ายเทข้อมูล 4 แบบ ระบบ USB สนับสนุนการขนถ่ายข้อมูลได้ 4 รูปแบบ ได้แก่ Bulk, Isochronous, Interrupt และ Control Transfers
มาตรฐานการเชื่อมต่อ FireWire
การเชื่อมต่อแบบ ไฟร์ไวร์ (Fi-Wi) เป็นการเชื่อมต่อกับอุปกรณ์ต่อพ่วงแบบอนุกรม ที่กำลังได้รับความนิยมอีกแบบหนึ่งนอกจากจะเป็นมาตรฐานการเชื่อมต่อในระบบคอมพิวเตอร์แล้วยังนำไปใช้เป็นมาตรฐานการเชื่อมต่ออุปกรณ์อีเล็กทรอนิกส์ เครื่องใช้ในบ้านได้อีก ได้แก่ อุปกรณ์เกี่ยวกับภาพ เสียง และเกมส์ เป็นต้น ในปัจจุบันความเร็วของโปรเซสเซอร์ขึ้นไปถึงระดับ GHz หรือพันล้านเฮิรตซ์ต่อวินาที ในขณะที่อุปกรณ์บันทึกข้อมูลก็สามารถบันทึกข้อมูลได้ในระดับ gigabyte หรือ พันล้านไบต์ ทำให้ความต้องการทางไอโอสำหรับเครื่องคอมพิวเตอร์ส่วนบุคคล เครื่องเวิร์คสเตชัน และเครื่องเซิร์ฟเวอร์เพิ่มขึ้นอย่างมาก แม้ว่าจะมีเทคโนโลยีช่องสื่อสารไอโอความเร็วสูงที่ได้รับการพัฒนาขึ้นมาสำหรับเครื่องเมนเฟรม และซูเปอร์คอมพิวเตอร์ ซึ่งอาจนำมาใช้งานได้ แต่ก็เป็นอุปกรณ์ที่มีราคาแพงมาก และมีขนาดใหญ่เกินกว่าที่จะนำมาใช้ในเครื่องคอมพิวเตอร์ขนาดเล็ก ทำให้เกิดการค้นคว้าพัฒนาส่วนติดต่อความเร็วสูงขึ้นมาทดแทนระบบSCSI และระบบอื่น ๆ ที่ใช้อยู่ในปัจจุบัน ผลที่ได้รับจากการค้นคว้าคือมาตรฐาน IEEE 1394 ซึ่งเป็นบัสแบบอนุกรมประสิทธิภาพสูง เรียกชื่อทั่วไปว่า FireWire
FireWire มีข้อดีเหนือกว่าส่วนติดต่อไอโอแบบเก่าหลายประการ นั่นคือ เป็นระบบที่มีความเร็วสูง ราคาต่ำ และสร้างขึ้นมาใช้งานได้ง่าย อันที่จริงแล้ว ระบบนี้ไม่ได้นำมาใช้งานเฉพาะในระบบคอมพิวเตอร์เท่านั้น แต่ยังสามารถนำไปใช้ในอุปกรณ์ดิจิตอลอื่น ๆ ได้ เช่น กล้องดิจิตอล เครื่องเล่นวิดีโอ และโทรทัศน์ ในระบบเหล่านี้ FireWire ถูกนำมาใช้ในการถ่ายโอนข้อมูลทางด้านภาพ ซึ่งมีแหล่งที่มาจากอุปกรณ์ดิจิตอล
จุดเด่นของส่วนติดต่อแบบ FireWire คือการใช้การสื่อสารแบบอนุกรม การสื่อสารแบบขนาน เช่น ระบบ SCSI นั้นจะต้องใช้สายสัญญาณเป็นจำนวนมากกว่า ทำให้ต้องใช้สายขนาดใหญ่ หัวเชื่อมต่อก็ต้องมีขนาดใหญ่ตามไปด้วย มีราคาแพงกว่า และมีโอกาสที่จะชำรุดเสียหายมากกว่า สายเคเบิลที่มีสายสัญญาณอยู่ข้างในหลายเส้นมีฉนวนภายในเพื่อป้องกันสัญญาณรบกวนกันเองภายในสาย นอกจากนี้ ส่วนติดต่อแบบขนานจะต้องมีการเทียบจังหวะการทำงานของสัญญาณในสายทุกเส้น ให้ตรงกัน ซึ่งปัญหาเหล่านี้ยิ่งทวีความรุนแรงเมื่อสายมีขนาดยาวขึ้น

สรุป
หน่วยรับส่งข้อมูลเข้าออก ทำหน้าที่เป็นตัวกลาง การถ่ายเทข้อมูลระหว่างระบบคอมพิวเตอร์กับโลกภายนอก หรือเป็นอุปกรณ์เชื่อมต่อระหว่างระบบคอมพิวเตอร์กับอุปกรณ์ ต่อพ่วง ซึ่งอาจเรียกว่า อุปกรณ์อินเตอร์เฟส เนื่องจากชุดอุปกรณ์ดังกล่าวประกอบขึ้นเป็นโมดูลชุดวงจรอีเล็กทรอนิกส์ จึงเรียกว่า โมดูลไอโอ การรับส่งข้อมูลของโมดูลไอโอจะทำได้สองรูปแบบ คือ การรับส่งข้อมูลแบบขนาน การรับส่งแบบนี้ทั้งด้านที่ติดต่อกับซีพียูและด้านที่ติดต่อกับอุปกรณ์ ต่อพ่วง จะเป็นการรับส่งแบบขนานทั้งสองด้าน การรับส่งจะกระทำได้ตั้งละหลายบิต อีกรูปแบบหนึ่งเป็นการรับส่งแบบอนุกรม การรับส่งแบบนี้ทางด้านนี้ติดต่อกับซีพียู จะเป็นการรับส่งแบบขนานส่วนทางด้านอุปกรณ์ต่อพ่วงจะเป็นการรับส่งแบบอนุกรมซึ่งจะรับส่งครั้งละหนึ่งบิต
โครงสร้างหน่วยรับส่งข้อมูล จะมีส่วนประกอบที่สำคัญ ได้แก่ รีจีสเตอร์ข้อมูล ซึ่งจะทำหน้าที่เป็นตัวพักข้อมูล รีจีสเตอร์สถานะและรีจีสเตอร์ควบคุม ซึ่งจะควบคุมและให้จังหวะการทำงานของโมดูลไอโอ นอกจากนั้นก็จะมีวงจรลอจิกเพื่อเชื่อมต่อเข้าระบบบัสของคอมพิวเตอร์ และเชื่อมต่อเข้าอุปกรณ์ต่อพ่วง การควบคุมการทำงานของโมดูลไอโอ จะทำได้ 3 วิธี ได้แก่ การควบคุมด้วยโปรแกรม การควบคุมด้วยอินเทอร์รัพท์ และการควบคุมด้วย ดีเอ็มเอ วิธีที่มีประสิทธิภาพที่สุด ได้แก่ ดีเอ็มเอ แต่อย่างไรก็ตามการทำงานจริงก็ยังใช้ทั้ง 3 วิธี
มาตรฐานการเชื่อมต่อ USB และ FireWire เป็นการเชื่อมต่อแบบอนุกรม ซึ่งปัจจุบันเป็นมาตรฐานหนึ่งที่ถูกติดตั้งมากับระบบคอมพิวเตอร์ USB ให้ความเร็วในการรับส่งข้อมูลได้ที่ 1.5 – 12 Mbps สามารถต่อพ่วงอุปกรณ์ได้มากถึง 127 อุปกรณ์ ส่วน FireWire ความเร็วในการรับส่งอยู่ที่ 200 – 800 Mbps และต่อพ่วงอุปกรณ์ได้ถึง 63 อุปกรณ์

วันศุกร์ที่ 13 มีนาคม พ.ศ. 2552

บทที่ 7 - การคำนวณทางคณิตศาสตร์

การคำนวณทางคณิตศาสตร์

การบวกเลขฐานสอง
การบวกเลขฐานสอง หรือเลขไบนารี คล้ายกับการบวกเลขฐานสิบที่เราคุ้นเคย แต่การบวกเลขฐานสองนั้นง่ายกว่า เพราะมีเพียง 4 กรณี เท่านั้นที่จะต้องจำ คือ
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
การอธิบายและเขียนเลขฐานต่าง ๆ 4 อย่าง คือ เลขฐานสอง เลขฐานสิบ เลขฐานแปด และเลขฐานสิบหก ตัวเลขบางจำนวนอาจทำให้สับสน เช่น 10 อาจเป็นเลขฐานใดก็ได้ใน 4 อย่างที่กล่าวมา ดังนั้นเพื่อให้เกิดความแตกต่างจึงต้องใช้ ตัวห้อย (subscripts) เป็นตัวเลขแทนเลขฐานนั้น ๆ ดังนี้
2 แทน เลขฐานสอง
8 แทน เลขฐานแปด
10 แทน เลขฐานสิบ
16 แทน เลขฐานสิบหก

การบวกเลขฐานสองหลายบิต
การบวกเลขฐานสองหลายบิต จะต้องนำตัวตั้ง และตัวบวกมาตั้งให้บิตขวาสุดของแต่จำนวนตรงกัน ดังแสดงในตัวอย่าง
1 1 1 0 0
+ 1 1 0 0 1
?
เริ่มต้นบวกที่คอลัมน์ขวาสุด
1 1 1 0 0
+ 1 1 0 0 1
1
ต่อไปบวกคู่บิต ในคอลัมน์ที่ 2 และคอลัมน์ที่ 3
1 1 1 0 0
+ 1 1 0 0 1
1 0 1
ต่อไปบวกคู่บิต ในคอลัมน์ที่ 4 คือ 1 + 1 = 10 ใส่ 0 มีตัวทด 1 ให้วางตัวทดในตำแหน่งถัดไปที่สูงขึ้น
ตัวทด → 1
1 1 1 0 0
+ 1 1 0 0 1
0 1 0 1
ในคอลัมน์สุดท้ายจะต้องบวกกัน 3 บิต (รวมตัวทด) คือ 1 + 1 + 1 = 10 + 1 = 11
ตัวทด → 1
1 1 1 0 0
+ 1 1 0 1 0
1 1 0 1 0 1

การลบเลขฐานสอง
มีกฎพื้นฐานอยู่ 4 อย่าง สำหรับการลบเลขฐานสอง ดังนี้
0 – 0 = 0
0 – 0 = 1
1 – 1 = 0
10 – 1 = 1
รลบเลขฐานสองที่มีหลายบิต จะทำเช่นเดียวกับการบวก คือ จะเริ่มลบจากคอลัมน์ หรือบิตทางขวาก่อน (LSB) ไปจนถึงคอลัมน์ซ้ายสุด (MSB) ดังตัวอย่างต่อไปนี้
101 0 1
– 1 0 0 1 1
?
มลบจากคอลัมน์ขวาสุด (LSB)
1 0 0 1
– 1 0 0 1 1
0
เลขฐานสองแบบไม่มีเครื่องหมาย
บางครั้งข้อมูลที่เป็นจำนวนค่าตัวเลข จะคำนึงถึงเฉพาะขนาด หรือแมกนิจูด (magnitude) อย่างเดียว จะไม่สนใจเครื่องหมายบวก ( + ) หรือลบ ( – ) ตัวอย่างเช่น เลขฐานสองขนาด 8 บิต จะมีขนาด ตั้งแต่น้อยที่สุด คือ 0000 0000 ไปจนถึงขนาดมากที่สุดคือ 1111 1111 หรือถ้าเป็นเลขฐานสิบหก จะเริ่มตั้งแต่ 00H ถึง FFH และถ้าเป็นเลขฐานสิบ ก็คือ 0 ถึง 255
จำนวนที่แสดงเฉพาะขนาด เราเรียกว่า จำนวนแบบไม่มีเครื่องหมาย ถ้าเป็นเลขฐานสอง ก็จะเป็นเลขฐานแบบไม่มีเครื่องหมาย บิตทุกบิตบนจำนวนนั้นจะเป็นค่าน้ำหนัก ซึ่งเทียบได้กับเลขฐานสิบทุกบิต แต่เราก็สามารถที่จะทำการบวกหรือลบได้ตามปกติ
ในไมโครคอมพิวเตอร์ยุคแรกจะสามารถประมวลผลได้ครั้งละ 8 บิต ดังนั้นขนาดของผลลัพธ์ที่ได้ก็จะต้องอยู่ระหว่าง 0 ถึง 255 แต่ถ้าต้องการขนาดที่มากกว่า 255 จะต้องใช้เลขฐานสองขนาด 16 บิต ซึ่งหมายถึงการประมวลผลต้องทำ 2 ครั้ง คือ ทำ 8 บิตต่ำ (lower byte) ก่อนแล้วไปทำ 8 บิตสูง (upper byte) ดังแสดงในตัวอย่างที่ 7.4
การบวกเลขฐานสองขนาด 8 บิต ถ้าผลบวกมีค่ามากกว่า 255 เราเรียกว่า โอเวอร์โฟลว์ (overflow) ซึ่งจะเกิดตัวทดในคอลัมน์ที่ 9 ในระบบไมโครโปรเซสเซอร์จะมีวงจรที่จะแจ้งเตือนเรียกว่า แฟลกตัวทด (carry flag) เมื่อมีตัวทดเกิดขึ้น ผลลัพธ์ที่ได้จะไม่ถูกต้อง

เลขฐานสองที่มีเครื่องหมาย
ในเลขฐานสิบที่มีเครื่องหมายติดลบ จะเขียนเครื่องหมายลบไว้ข้างหน้าของขนาดตัวเลข เช่น –1, –2, –3 เป็นต้น ส่วนเลขที่มีจำนวนบวก ถ้าจะเขียนเครื่องหมายบวกข้างหน้าขนาดตัวเลขก็ได้ เช่น +1, +2, +3 หรือ อาจไม่ต้องเขียนก็หมายถึงเลขจำนวนบวก ถ้าแปลงเลขฐานสิบให้เป็นเลขฐานสอง และมีเครื่องหมายติดลบด้วยก็ได้ –001, –010, –011 หรือถ้าเป็นจำนวนบวกก็จะได้ +001, +010, +011 แต่การนำข้อมูลเหล่านี้ไปประมวลผลในระบบดิจิตอลจะไม่สามารถประมวลผลได้ ระบบจะทำงานได้เฉพาะข้อมูลดิจิตอลที่เป็น 0 และ 1 เท่านั้น ดังนั้นเครื่องหมายบวก (+) จึงถูกกำหนดให้เป็นค่าลอจิก 0 และเครื่องหมายลบ (–) ถูกกำหนดให้เป็นค่าลอจิก 1 จึงทำให้ +001, +010 และ +011 ถูกเปลี่ยนเป็นรหัส 4 บิต ดังนี้ 0001, 0010 และ 0011 ส่วนจำนวนลบจะได้รหัส 4 บิต เช่นกัน คือ 1001, 1010 และ 1011
ตัวเลขดังกล่าวประกอบด้วยบิตเครื่องหมาย และตามด้วยกลุ่มบิตที่แสดงขนาดของตัวเลข เราจะเรียกข้อมูลที่มีรูปแบบดังกล่าวนี้ว่า เลขฐานสองชนิดบอกเครื่องหมาย – ขนาด หรือ Sign – magnitude ดังตัวอย่างข้อมูลที่ถูกเปลี่ยนให้เป็นเลขฐานสองชนิดบอกเครื่องหมาย ดังต่อไปนี้
+5 → 0000 0101
–5 → 1000 0101
+128 → 0000 0000 1000 0000
–128 → 1000 0000 1000 0000

บทที่ 8 - รูปแบบของคำสั่งและการบ่งตำแหน่งที่อยู่


รูปแบบของคำสั่งและการบ่งตำแหน่งที่อยู่

รหัสที่ใช้แทนอักขระ
ตัวอักษร ตัวเลขและสัญลักษณ์ หรือที่เรียกว่าอักขระในไมโครคอมพิวเตอร์จะแทนด้วยรหัสไบนารี ทุกครั้งที่เรากดแป้นพิมพ์ เช่น ปุ่มอักษร A ระบบก็จะรับอักษร A เข้าไปและแปลงเป็นรหัสไบนารี (เข้ารหัส) 1 ไบต์ เป็นต้น ในตารางที่ 8.1 แสดงมาตรฐานการใช้รหัสไบนารีแทนอักขระที่นิยมแพร่หลายในระบบไมโครคอมพิวเตอร์เรียกว่ารหัส ASCII (อ่านว่า แอสกี้) ย่อมาจาก American Standard Code for Interchange จะใช้แทนทั้งสระ พยัญชนะ ตัวเลข สัญลักษณ์ ทั่วไป และอักษรที่ใช้ควบคุม เช่น LF คือ Line Feed หมายถึงให้เลื่อนไปบรรทัดถัดไป เป็นต้น
จากตารางที่ 8.1 จะสังเกตเห็นว่าอักษรหรือสัญลักษณ์ 1 ตัวแทนได้ด้วยไบนารี 7 บิต แต่เนื่องจากระบบไมโครคอมพิวเตอร์จะใช้ 8 บิต (หรือ 1 ไบต์) เป็นมาตรฐาน ทำให้บิตเหลืออีก 1 บิต เป็นบิตสูงสุด (หมายถึงบิตซ้ายมือสุด) ซึ่งเราอาจให้บิตนี้เป็น 0 หรือ 1 ก็ได้

รูปแบบคำสั่ง
ไมโครโปรเซสเซอร์ไม่ว่าจะผลิตจากบริษัทไหนก็แล้วแต่ จะมีชุดคำสั่งประจำไมโคร-โปรเซสเซอร์เบอร์นั้น เช่น 8080 ของบริษัทอินเทลก็จะมีชุดคำสั่งเฉพาะของ 8080 ขณะที่ 6800 ของ โมโตโรลาก็จะมีชุดคำสั่งเฉพาะของ 6800 เป็นต้น คำสั่ง 8080 จะมาใช้กับ 6800 ไม่ได้และในทางกลับกัน คำสั่งของ 6800 จะใช้กับ 8080 ก็ไม่ได้ อย่างไรก็ดี ไม่ว่าจะเป็นคำสั่งของไมโครโปรเซสเซอร์เบอร์ใด พื้นฐานก็คือคำสั่งจะอยู่ในลักษณะไบนารี คำสั่งหนึ่งคำสั่งอาจประกอบด้วยไบต์เดียว สองไบต์ สามไบต์ หรือสี่ไบต์แล้วแต่กรณี ไบต์แรกของคำสั่งเรียกว่า โอเปอเรชันโค้ด (operation code)

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

ชนิดของคำสั่ง
คำสั่งในภาษาระดับสูง เช่น Pascal หรือ FORTRAN ตัวอย่างคำสั่ง เช่น
X = X + Y
ประโยคนี้บอกให้คอมพิวเตอร์นำค่าของตัวแปร Y บวกกับค่าที่เก็บในตัวแปร X แล้วเก็บผลลัพธ์ไว้ที่ X นักศึกษาอาจจะสงสัยว่า คำสั่งเช่นนี้เมื่ออยู่ในรูปแบบคำสั่งคอมพิวเตอร์แล้วจะมีหน้าตาเป็นอย่างไร สมมุติว่าตัวแปร X และ Y อ้างอิงถึงข้อมูลที่ตำแหน่ง 513 และ 514 ตามลำดับ สมมติต่อไปว่าให้ใช้ชุดคำสั่งที่ง่ายต่อการทำความเข้าใจแล้ว ประโยคดังกล่าวจะถูกแปลเป็นคำสั่ง

ที่อยู่อ้างอิงในคำสั่งเครื่อง
วิธีการหนึ่งที่นิยมใช้ในการอธิบายสถาปัตยกรรมของเครื่องคอมพิวเตอร์ คือ การอธิบายจำนวนของ “ที่อยู่อ้างอิง” ในคำสั่งเครื่องแต่ละคำสั่ง วิธีการนี้ได้รับความนิยมน้อยลงเมื่อการออกแบบซีพียูมีความสลับซับซ้อนมากขึ้น อย่างไรก็ตาม ก็ยังคงเป็นวิธีการที่มีประโยชน์สำหรับการวิเคราะห์ความแตกต่างของซีพียู
คำสั่งเครื่องแต่ละคำสั่ง มีความจำเป็นต้องอ้างอิงที่อยู่เป็นจำนวนเท่าใด คำสั่งเกี่ยวกับคณิตศาสตร์และตรรกะ มักจะต้องการการอ้างอิงที่อยู่ของตัวถูกดำเนินการ (Operand) มากกว่าคำสั่งชนิดอื่น โดยทั่วไปคำสั่งในกลุ่มนี้จะเป็นคำสั่งประเภท unary (ต้องการตัวถูกดำเนินการเพียงตัวเดียว) หรือ binary (ต้องการตัวถูกดำเนินการสองตัว) ดังนั้นจึงต้องการอ้างอิงถึงที่อยู่ของตัวถูกดำเนินการสูงสุดสองตัว ผลลัพธ์ที่ได้จากการคำนวณจะต้องถูกนำไปเก็บไว้ในหน่วยความจำ จึงอาจต้องการอ้างอิงที่อยู่แห่งที่สามในแต่ละคำสั่งนั้น ประการสุดท้ายเมื่อการประมวลผลคำสั่งนั้นสิ้นสุดลง ก็มีความจำเป็นจะต้องอ้างอิงที่อยู่ของคำสั่งในลำดับต่อไป
ด้วยเหตุผลดังกล่าว ทำให้น่าเชื่อว่าคำสั่งแต่ละคำสั่งจะต้องการการอ้างอิงที่อยู่สี่แห่งด้วยกัน(ที่อยู่สำหรับตัวถูกดำเนินการสองตัว ที่อยู่สำหรับเก็บผลลัพธ์ และที่อยู่สำหรับคำสั่งต่อไป) ในทางปฏิบัติแทบจะไม่มีคอมพิวเตอร์เครื่องใดที่มีการอ้างอิงที่อยู่มากถึงสี่แห่ง คำสั่งส่วนใหญ่จะอ้างอิงที่อยู่จำนวนระหว่างหนึ่งถึงสามที่อยู่ต่อคำสั่ง และนำที่อยู่ของคำสั่งต่อไปใส่ไว้ในรีจิสเตอร์แยกต่างหาก (เรียกว่า Program counter) ซึ่งแยกออกจากรีจิสเตอร์ที่ใช้ในคำสั่งเครื่อง

ชนิดของตัวถูกดำเนินการ
คำสั่งเครื่องทำงานกับข้อมูลซึ่งสามารถแบ่งออกตามชนิดหรือประเภทได้ดังนี้
- ตำแหน่งที่อยู่ (address)
- ตัวเลข (Number)
- ตัวอักษร (Character)
- ข้อมูลตรรกะ (Logical data)
อันที่จริงตำแหน่งที่อยู่ก็เป็นข้อมูลชนิดหนึ่ง ในหลายกรณีมีการคำนวณเกิดขึ้นกับตัวถูกกระทำที่ถูกอ้างอิงในคำสั่งเครื่อง เพื่อกำหนดตำแหน่งที่อยู่ในหน่วยความจำหลัก หรือในหน่วยความจำเสมือน ในกรณีเช่นนี้ ตำแหน่งที่อยู่จะถูกคำนวณในลักษณะเดียวกันกับเลขแบบไม่มีเครื่องหมาย
ข้อมูลชนิดอื่นได้แก่ ตัวเลข ตัวอักษร และข้อมูลตรรกะ ซึ่งจะอธิบายถึงรายละเอียดในลำดับต่อไป นอกจากนี้แล้ว คอมพิวเตอร์บางเครื่องยังได้กำหนดข้อมูลหรือโครงสร้างข้อมูลชนิดพิเศษขึ้นใช้งาน เช่น ข้อมูลชนิดที่สามารถทำงานกับตัวถูกกระทำที่เป็นกลุ่มตัวอักษร (string) ได้โดยตรง

ข้อมูลตัวเลข
ภาษาเครื่องทุกชนิดจะมีข้อมูลชนิดตัวเลขไว้ใช้งาน แม้กระทั่งงานที่ไม่เกี่ยวข้องกับตัวเลขก็ยังมีความจำเป็นจะต้องใช้ตัวเลขมาช่วยในการนับ บอกความกว้างหรือขนาดของข้อมูล และอื่น ๆ ความแตกต่างที่สำคัญระหว่างตัวเลขที่ใช้ในทางคณิตศาสตร์ทั่วไป กับตัวเลขที่เก็บอยู่ในเครื่องคอมพิวเตอร์คือ ตัวเลขคอมพิวเตอร์มีขนาดที่จำกัดเนื่องจากเหตุผลสองประการคือ ประการแรก ตัวเลขที่เก็บอยู่ในคอมพิวเตอร์นั้นถูกจำกัดขนาดด้วยรูปแบบที่ใช้อยู่ในเครื่องนั้น ประการที่สอง ในกรณีของเลขจำนวนจริงก็ถูกจำกัดขนาดด้วยระดับความเที่ยงตรงที่ต้องการนักพัฒนาโปรแกรมจึงต้องทำความเข้าใจในผลที่เกิดขึ้นจากการปัดเศษ การ overflow และการ underflow
ข้อมูลชนิดตัวเลขมักจะแบ่งออกเป็นสามชนิด คือ
- เลขจำนวนเต็ม (Integer of fixed point)
- เลขจำนวนจริง (Floating point)
- เลขฐานสิบ (Decimal point)
โดยธรรมชาติแล้วการทำงานภายในเครื่องคอมพิวเตอร์นั้นใช้เลขฐานทั้งหมด แต่ส่วนที่ต้องติดต่อกับผู้ใช้ที่เป็นมนุษย์นั้นจะจำเป็นจะต้องใช้เลขฐานสิบ ดังนั้นจึงมีความจำเป็นที่จะต้อง
ข้อมูลตัวอักษร
รูปแบบข้อมูลที่ใช้งานทั่วไปคือตัวอักษร (text) หรือข้อความ (character string) ข้อมูลที่เป็นข้อความนั้น เป็นรูปแบบที่สะดวกสบายต่อคน แต่ในเวลาเดียวกันก็เป็นรูปแบบที่ไม่สามารถเก็บไว้ในคอมพิวเตอร์ หรือนำไปประมวลผลได้โดยง่าย เนื่องจากระบบดังกล่าวถูกออกแบบมาให้ทำงานกับเลขฐานสองเท่านั้น ดังนั้นจึงได้มีการประดิษฐ์รหัสสำหรับการเก็บข้อมูลตัวอักษรไว้ในคอมพิวเตอร์ รหัสแบบแรกที่ได้รับการออกแบบนำมาใช้งานคือ รหัสมอส (Morse code) ในปัจจุบันโค้ดรหัสที่ถูกนำมาใช้อย่างแพร่หลายเรียกว่า International Reference Alphabet (IRA) ซึ่งมีชื่อเรียกในประเทศสหรัฐอเมริกาว่า รหัสแอสกี้ (ASCII) ดังแสดงตัวอย่างในตาราง 8.1 รหัส IRA ได้รับความนิยมนำไปใช้งานทั่วโลก ตัวอักษรแต่ละตัวในรหัสนี้ถูกแทนด้วยเลขฐานสองจำนวน 7 บิต ทำให้สามารถกำหนดสัญลักษณ์ได้ 128 แบบ ซึ่งเป็นจำนวนที่มากเกินพอสำหรับตัวอักษรที่สามารถพิมพ์ออกทางเครื่องพิมพ์ได้ รหัสส่วนหนึ่งจึงถูกนำไปใช้เป็นหรัสควบคุม (control characters) รหัสควบคุมบางส่วนถูกนำมาใช้ในการควบคุมลักษณะการพิมพ์ในแบบต่าง ๆ ในขณะที่รหัสที่เหลือถูกนำไปใช้ในการสื่อสารข้อมูล รหัส IRA จะถูกเก็บและเรียกใช้เป็นข้อมูลขนาด 8 บิตต่อตัวอักษรเสมอ โดยบิตที่ 8

ข้อมูลตรรกะ
โดยปกติข้อมูลแต่ละเวิร์ด หรือแต่ละหน่วยที่สามารถอ้างอิงได้ (เช่น ไบต์ halfword, และอื่น ๆ ) จะถือเสมือนหนึ่งว่าเป็นข้อมูลหน่วยเดียว แต่ในบางครั้งก็มีความจำเป็นจะต้องพิจารณาข้อมูลในแต่ละหน่วยนั้นครั้งละ 1 บิต ซึ่งจะมีค่าเป็น “0” หรือ “1” เมื่อข้อมูลถูกมองในลักษณะนี้เรียกว่าเป็นข้อมูลแบบตรรกะ
การมองข้อมูลครั้งละ 1 บิตมีประโยชน์สองประการ ประการแรก บางครั้งก็มีความจำเป็นจะต้องเก็บข้อมูลอาร์เรย์แบบบูลลีน หรือข้อมูลที่เป็นเลขฐานสองโดยตรง ซึ่งข้อมูลแต่ละตัวจะกินเนื้อที่เพียง 1 บิตเท่านั้น การเก็บข้อมูลแบบตรรกะจึงถูกนำมาใช้ในงานประเภทนี้ได้อย่างมีประสิทธิภาพ ประการที่สอง ในบางครั้งก็มีความจำเป็นจะต้องจัดการกับข้อมูลธรรมดาครั้งละ 1 บิต ตัวอย่างเช่น ในการทำงานกับเลขจำนวนจริงโดยใช้ซอฟต์แวร์ จะต้องมีการเลื่อนตำแหน่งบิตข้อมูลเกิดขึ้น หรือในการแปลงเลขจากรหัส IRC เป็นรหัส BCD ก็ต้องอาศัยการเลื่อนบิตเช่นกัน
สังเกตว่าจากตัวอย่างทั้งสองที่ยกมานั้น ข้อมูลเดียวกันบางครั้งจะต้องอยู่ในรูปแบบตรรกะ บางครั้งก็อยู่ในรูปแบบของตัวเลข หรือตัวอักษร ชนิดของข้อมูลของหน่วยข้อมูลใด ๆ จะถูกกำหนดโดยชนิดของการกระทำที่เกิดขึ้นกับข้อมูลหน่วยนั้น ซึ่งจะไม่เกิดขึ้นในการทำงานของคำสั่งภาษาคอมพิวเตอร์ระดับสูง
การบ่งตำแหน่งที่อยู่
เมื่อ ซีพียู จะทำงานตามคำสั่ง ที่เขียนไว้ในหน่วยความจำ จะต้องนำคำสั่งจากหน่วยความจำถ่ายลงสู่ ซีพียูแล้วจึงจะประมวลผลตามวัฏจักรดังได้กล่าวมาแล้ว แต่ละคำสั่งจะมี ออปโค้ด เป็นไบต์แรก แล้วตามด้วยข้อมูลหรือตำแหน่งข้อมูลในไบต์ที่สองและสาม เมื่อซีพียู แปลรหัสออปโค้ดแล้วจะทราบว่า จะต้องไปนำข้อมูลจากที่ใดมาปฏิบัติต่อ เพื่อให้คำสั่งนั้นแล้วเสร็จ ในหัวข้อนี้จะกล่าวถึงวิธีต่าง ๆ ที่ซีพียูไปนำข้อมูลมาจากหน่วยความจำวิธีดังกล่าวนี้เรียกว่า การแบ่งตำแหน่งที่อยู่หรือ แอดเดรสซิงโหมด (Addressing mode)
การบ่งตำแหน่งทันที
การบ่งตำแหน่งทันที (immediate mode) เป็น รูปแบบของการบ่งตำแหน่งที่ง่ายที่สุดคือ ตัวถูกกระทำจะปรากฏอยู่ ในคำสั่งนั้น หรือค่าของตัวถูกกระทำปรากฏอยู่กับคำสั่ง หรือค่าของตัวถูกกระทำจะเขียนตามหลังคำสั่งตำแหน่งที่ติดต่อกัน ซึ่งหมายความว่า เราสามารถที่จะดึงตัวถูกกระทำจากหน่วยความจำได้ ในเวลาเดียวกันกับที่ดึงคำสั่ง (Instruction fetch) ขึ้นมาทำงาน ดังนั้นจึงประหยัดวงรอบของการของการอ้างอิงหน่วยความจำไปได้หนึ่งรอบ ข้อด้อยวิธีการนี้คือ ขนาด ตัวเลขถูกจำกัดโดยขนาดของฟิลด์ที่อยู่ (Address field ) ซึ่งในคำสั่งส่วนใหญ่มักจะ มีขนาดเล็ก (เช่น20 บิต) เมื่อเทียบกับข้อมูล ขนาดหนึ่ง เวิร์ด (ปกติยาว 32 บิต)
การบ่งตำแหน่งโดยตรง
รูปแบบที่จัดว่าง่ายอีกวิธีหนึ่งคือ การบ่งตำแหน่งโดยตรง (direct addressing) ซึ่งเขตข้อมูลตำแหน่งที่อยู่จะบรรจุตำแหน่งจริงของตัวถูกกระทำเอาไว้ดังนี้
EA (Effective Address) = A
วิธีการนี้ได้รับความนิยมในการใช้งานกับคอมพิวเตอร์รุ่นแรก ๆ แต่ไม่เป็นที่นิยมใช้ในปัจจุบัน การประมวลผลจะต้องใช้วงรอบการอ้างอิงหน่วยความจำเพิ่มขึ้นอีกหนึ่งรอบ โดยที่ไม่ต้องมีการคำนวณเพิ่มเติม ข้อด้อยประการสำคัญคือ ขอบเขตที่จำกัดในการอ้างอิงตำแหน่งข้อมูลในหน่วยความจำ
การบ่งตำแหน่งทางอ้อม
เนื่องจากวิธีการอ้างอิงโดยตรงนั้น ความยาวของเขตข้อมูลตำแหน่งที่อยู่มักจะมีขนาดสั้นกว่าความยาวของหนึ่งเวิร์ดจึงทำให้ขอบเขตในการอ้างอิงข้อมูลลดลง การแก้ปัญหานี้ทำได้โดยการใช้ขอบเขตข้อมูลตำแหน่งที่อยู่ในการอ้างอิงถึงตำแหน่งเวิร์ดในหน่วยความจำที่เก็บตำแหน่งที่แท้จริงของข้อมูลเอาไว้ วิธีการนี้เรียกว่า การอ้างอิงทางอ้อม (indirect addressing) มีรูปแบบดังนี้
EA = (A)
เครื่องหมายวงเล็บในที่นี้ใช้ในความหมายว่า “ค่าที่เก็บอยู่ในตำแหน่งที่อ้างถึงโดย A (เขตข้อมูลตำแหน่งที่อยู่ในคำสั่ง)” ข้อดีของวิธีการนี้คือ ถ้าเวิร์ดในหน่วยความจำมีขนาด N บิต จะทำให้ผู้ใช้สามารถอ้างอิงข้อมูลได้มากถึง 2N เวิร์ด ข้อเสียคือ คำสั่งประเภทนี้จะต้องอ้างอิงหน่วยความจำเพิ่มขึ้นอีก 2 วงรอบ จึงจะสามารถอ่านค่าตัวถูกกระทำและประมวลผลได้ นั่นคือหนึ่งวงรอบสำหรับอ่านเวิร์ดที่อ้างอิงถึงโดย A และอีกหนึ่งวงรอบสำหรับอ่านค่าข้อมูลที่แท้จริงที่เก็บอยู่ในตำแหน่งเวิร์ดที่ถูกระบุโดย A นั้น

การบ่งตำแหน่งผ่านรีจีสเตอร์
การอ้างอิงผ่านรีจีสเตอร์โดยตรง (register addressing) มีความคล้ายคลึงกับการอ้างอิงโดยตรง สิ่งที่แตกต่างกันก็คือ เขตข้อมูลตำแหน่งที่อยู่ในคำสั่งเครื่องจะบรรจุหมายเลขของ รีจีสเตอร์ที่อ้างอิง แทนการกำหนดตำแหน่งที่อยู่ในหน่วยความจำ
EA = R
โดยปกติเขตข้อมูลตำแหน่งที่อยู่ที่กำหนดหมายเลขของรีจีสเตอร์นั้น จะมีขนาดระหว่าง 3 ถึง 5 บิต ทำให้สามารถอ้างอิงรีจีสเตอร์ได้ตั้งแต่ 8 ถึง 32 ตัว
ข้อได้เปรียบของการอ้างอิงรีจีสเตอร์โดยตรงได้แก่ (1) คำสั่งเครื่องต้องการพื้นที่ขนาดเล็กมากสำหรับการอ้างอิงหมายเลขรีจีสเตอร์ และ (2) ไม่ต้องเสียเวลาในการอ้างอิงหน่วยความจำเพื่ออ่านข้อมูลตัวถูกกระทำ เวลาที่ใช้ในการอ้างอิงข้อมูลในรีจีสเตอร์ที่เก็บอยู่ภายในตัวซีพียูนั้น น้อยกว่าเวลาที่ใช้อ้างอิงข้อมูลในหน่วยความจำมาก อย่างไรก็ตาม ข้อจำกัดของวิธีการนี้คือมีพื้นที่
สำหรับเก็บข้อมูลขนาดจำกัดมาก

บทที่ 9 - โครงสร้างและหน้าที่ของซีพียู

โครงสร้างและหน้าที่ของซีพียู

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

- ดึงคำสั่งเข้ามา (fetch instruction) คือการที่ซีพียูอ่านคำสั่งมาจากหน่วยความจำหลักเข้ามาเก็บไว้ภายในตัวซีพียู
- แปลความหมายของคำสั่ง (interpret instruction) คำสั่งจะถูกแปลความหมาย เพื่อจะได้ทราบว่า คำสั่งนั้นต้องการ
ให้ทำงานอย่างใด
- ดึงข้อมูล (fetch data) การประมวลผลคำสั่งเครื่องหนึ่งคำสั่ง อาจจำเป็นต้องอ่านข้อมูลจากหน่วยความจำหลักหรืออุปกรณ์
ไอโอเข้ามาด้วย
- ประมวลผลข้อมูล (process data) การประมวลผลคำสั่งอาจเกี่ยวข้องกับการทำงานทางคณิตศาสตร์หรือตรรกะ
- การบันทึกข้อมูล (write data) ผลการประมวลผลข้อมูลอาจต้องการให้บันทึกผลลัพธ์ที่ได้ไว้ในหน่วยความจำหลักหรืออุปกรณ์ไอโอ

การจัดองค์ประกอบของรีจีสเตอร์ภายในซีพียู
การแบ่งกลุ่มรีจีสเตอร์อาจจะแบ่งได้หลายวิธี สำหรับในบทนี้จะแบ่งออกเป็นสองกลุ่มคือ
1) รีจีสเตอร์ที่ผู้ใช้มองเห็นได้ รีจีสเตอร์ในกลุ่มนี้อนุญาตให้คำสั่งในโปรแกรมสามารถลดการอ้างอิงข้อมูลในหน่วยความจำหลัก
โดยนำรีจีสเตอร์มาใช้งานแทน
2) รีจีสเตอร์สำหรับการควบคุมและรายงานสถานะการทำงาน รีจีสเตอร์ในกลุ่มนี้ถูกนำไปใช้โดยหน่วยควบคุม เพื่อควบคุมการทำงาน
ของซีพียู และถูกใช้โดยคำสั่งพิเศษของระบบปฏิบัติการในการควบคุมการประมวลผลของโปรแกรม

รีจีสเตอร์ส่วนที่ผู้ใช้มองเห็น
รีจีสเตอร์ส่วนที่ผู้ใช้สามารถมองเห็นได้นั้น หมายถึง รีจีสเตอร์ที่สามารถใช้คำสั่งภาษาเครื่องควบคุมและใช้งานได้ผ่านการประมวลผล
โดยซีพียู รีจีสเตอร์กลุ่มนี้แบ่งออกเป็นประเภทดังนี้
- รีจีสเตอร์ใช้งานทั่วไป สามารถนำไปใช้งานได้หลายหน้าที่ตามที่ผู้พัฒนาโปรแกรมต้องการ แต่อาจมีรีจีสเตอร์บางตัวถูกกำหนด
ไว้ใช้งานกับเลขจำนวนจริงหรือเป็นตัวชี้ตำแหน่งในสแต๊ก ในบางกรณีรีจีสเตอร์ใช้งานทั่วไปสามารถนำไปใช้งานในการกำหนดที่อยู่
เช่น การอ้างอิงที่อยู่แบบรีจีสเตอร์ทางอ้อมหรือแบบดีสเพลชเมนต์ ตัวอย่าง รีจีสเตอร์ใช้งานทั่วไป ได้แก่ รีจีสเตอร์เก็บข้อมูลของซีพียู
8086 (AX, BX, CX, และ DX) เป็นต้น
- รีจีสเตอร์สำหรับเก็บตำแหน่งที่อยู่ อาจเป็นรีจีสเตอร์สำหรับใช้งานทั่วไป หรือเป็นรีจีสเตอร์ที่กำหนดให้ใช้การอ้างอิงเกี่ยวกับตำแหน่ง
ที่อยู่โดยตรง ตัวอย่าง รีจีสเตอร์เหล่านี้ ได้แก่
- ตัวชี้ตำแหน่งเซ็กเมนต์ (segment pointers) : ในเครื่องที่ใช้วิธีกำหนดตำแหน่งที่อยู่แบบเซ็กเมนต์ จะมีรีจีสเตอร์เซ็กเมนต์
(segment register) ในบางกรณีอาจมีการใช้รีจีสเตอร์มากกว่าหนึ่งตัว เช่น ตัวหนึ่งใช้สำหรับระบบปฏิบัติการและอีกหนึ่งใช้สำหรับ
โปรเซสที่กำลังถูกประมวลผล
- ตัวชี้ตำแหน่งดรรชนี (index registers) : รีจีสเตอร์ในกลุ่มนี้ใช้สำหรับการกำหนดตำแหน่งที่อยู่แบบ indexed
addressing และอาจเป็นชนิด autoindexing ก็ได้
- ตัวชี้ตำแหน่งในสแต็ก (stack pointer) : ถ้าคอมพิวเตอร์นั้นใช้ระบบ user-visible stack addressing
สแต็กที่นำมาใช้งานจะะเก็บอยู่ในหน่วยความจำและจะมีจีสเตอร์ตัวหนึ่งที่ใช้ในการชี้ตำแหน่งข้อมูลตัวบนสุดในสแต็กนั้น
วิธีการนี้ช่วยให้สามารถอ้างอิงตำแหน่งข้อมูลโดยนัยได้ นั่นคือการใช้คำสั่ง PUSH, POP และคำสั่งอื่น ๆ ที่เกี่ยวกับสแต็กก็ไม่มีความ
จำเป็นจะต้องบอกตำแหน่งตัวถูกกระทำที่เก็บอยู่ในสแต็กนั้น
- รีจีสเตอร์สำหรับเก็บเงื่อนไขการทำงาน การเก็บเงื่อนไขการทำงานจะมีกลุ่มรีจีสเตอร์ที่ถูกกำหนดค่าขึ้นมาให้สอดคล้องกับผลการ
ประมวลผลของซีพียู เช่น การคำนวณทางคณิตศาสตร์ อาจทำให้ผลลัพธ์มีค่าเป็นจำนวนบวก จำนวนลบ เป็นศูนย์หรือ โอเวอร์โพลว์ก็ได้
กลุ่มบิตเหล่านี้ มักจะเรียกว่า "แฟล็ก” (Flags) ซึ่งจะแสดงไปพร้อม ๆ กับผลลัพธ์ที่คำนวณได้ และถูกเก็บไว้ในตำแหน่งที่
เก็บผลลัพธ์แล้ว บิตพิเศษกลุ่มนี้จะกำหนดค่าขึ้นมาให้สอดคล้องกับผลลัพธ์ที่ประมวลได้ เพื่อนำไปใช้ทดสอบค่าตามเงื่อนไขต่าง ๆ ที่ต้องการ

รีจีสเตอร์ควบคุมและแสดงสถานะ
เป็นกลุ่มรีจีสเตอร์ที่ส่วนใหญ่จะไม่ยินยอมให้ผู้ใช้มองเห็น บางส่วนอาจยินยอมให้ใช้คำสั่งเครื่องในการประมวลผลได้
แต่ต้องกระทำในฐานะของระบบปฏิบัติการเท่านั้น ซีพียูแต่ละรุ่นจะมีการจัดองค์ประกอบของรีจีสเตอร์แตกต่างกัน
ส่วนใหญ่จะแบ่งรีจีสเตอร์สำหรับควบคุมและแสดงสถานะออกเป็นสี่ประเภทดังนี้
- PC (Program counter) เป็นรีจีสเตอร์ที่เก็บที่อยู่ของคำสั่งที่จะถูกประมวลผลในลำดับต่อไป
- IR (Instruction register) เป็นรีจีสเตอร์ที่เก็บคำสั่งเครื่องที่ถูกอ่านจากหน่วยความจำหลักเข้ามาเก็บ
- MAR (Memory address register) ใช้เก็บตำแหน่งที่อยู่อ้างอิงในหน่วยความจำหลัก
- MBR (Memory buffer register) ใช้เก็บข้อมูลขนาด 1 เวิร์ด ล่าสุดที่ถูกอ่านเข้ามาในซีพียูหรือ
ใช้เก็บข้อมูลเพื่อเตรียมบันทึกลงในหน่วยความจำหลัก
โดยทั่วไป ซีพียูจะปรับปรุงค่าในรีจีสเตอร์ PC ทันทีภายหลังจากที่ได้อ่านคำสั่งเข้ามา เพื่อให้รีจีสเตอร์ PC นี้ชี้ตำแหน่ง
คำสั่งที่จะถูกอ่านเข้ามาในลำดับต่อไปเสมอ คำสั่งประเภท branch หรือ skip ทำให้เกิดการเปลี่ยนแปลงค่าในรีจีสเตอร์
นี้ได้ คำสั่งที่ถูกอ่านเข้ามาจะถูกนำไปเก็บไว้ที่รีจีสเตอร์ IR ซึ่งจะถูกวิเคราะห์รหัสดำเนินงาน และตัวกำหนดค่าตัวถูกกระทำ

การออกแบบซีพียูจะต้องกล่าวถึงรีจีสเตอร์ตัวหนึ่ง หรือกลุ่มหนึ่งที่เรียกว่า Program status word (PSW)
ซึ่งใช้เก็บข้อมูลสถานะการทำงานของซีพียูดังต่อไปนี้
- Sign : ใช้เก็บบิตเครื่องหมายของผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุด
- Zero : บิตนี้จะมีค่าเป็น “1” ถ้าผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดมีค่าเป็น “0”
- Carry : บิตนี้จะมีค่าเป็น “1” ถ้าผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดเกิดการยืมเลขจาก
หลักที่สูงกว่า หรือมีการทดเลขบิตที่มีค่าเกินบิตสูงสุด
- Equal : บิตนี้จะมีค่าเป็น “1” ถ้าผลการเปรียบเทียบทางตรรกะมีค่าเท่ากัน
- Overflow : ใช้สำหรับบอกให้ทราบว่า ผลลัพธ์ที่เกิดขึ้นจากการประมวลผลคำสั่งทางคณิตศาสตร์ครั้งล่าสุดเกิด overflow
- Interrupt enable/disable : ใช้ในการสั่งให้กระบวนการอินเทอร์รัพท์ทำงานหรือหยุดทำงาน
- Supervisor : ใช้ในการบอกสถานะ การทำงานของซีพียูว่า ในขณะนั้นมีสถานะเป็น user หรือ supervisor
คำสั่งเครื่องบางส่วนที่เป็นคำสั่งสงวน จะสามารถประมวลผลได้ และเนื้อที่หน่วยความจำบางส่วนจะสามารถอ้างอิงถึงได้ก็ต่อเมื่อซีพียูอยู่ในสถานะ supervisor เท่านั้น

ตัวอย่างการจัดองค์ประกอบของรีจีสเตอร์ภายในซีพียู
การจัดองค์ประกอบของรีจีสเตอร์จะขอยกตัวอย่างซีพียูของอินเทล ตระกูล 80XX ดังแสดงในภาพที่ 9.3 เป็นซีพียู 8086 การออกแบบองค์ประกอบของรีจีสเตอร์ โดยถือว่า รีจีสเตอร์ทุกตัวเป็นรีจีสเตอร์พิเศษ แม้ว่ารีจีสเตอร์บางตัวจะสามารถนำมาใช้เป็นรีจีสเตอร์ใช้งานทั่วไปได้ก็ตาม ซีพียู 8086 ประกอบด้วยรีจีสเตอร์สำหรับเก็บข้อมูลขนาด 16 บิต จำนวน 4 ตัว ซึ่งอาจจะใช้เพียง 8 บิตหรือใช้ทั้ง 16 บิต ผสมผสานกันก็ได้ รีจีสเตอร์สำหรับเก็บข้อมูลสามารถ

บทที่ 10 - บัสและอินเทอร์เฟซ (Bus & Interface)

บัสและอินเทอร์เฟซ
(Bus & Interface)
บัสและอินเทอร์เฟซ
- คำสั่งที่ถูกเอ็กซิคิวต์ในซีพียูโดยการย้ายข้อมูลในรูปแบบที่ต่างกันไม่ว่าจะเป็นการย้ายข้อมูลจากรีจิสเตอร์ไปสู่รีจิสเตอร์
หรือระหว่างรีจิสเตอร์กับหน่วยความจำนอกจากข้อมูลที่เป็นตัวเลขแล้ว ข้อมูลยังสามารถรวมคำสั่งและแอ็ดเดรสไปพร้อม ๆ กัน
ด้วยดังนั้นข้อมูลที่ถ่ายโอนระหว่างไอโอโมดูล, หน่วยความจำ และซีพียูจะคล้ายกันการเชื่อมต่อทางกายภาพที่ทำให้ข้อมูลสามารถ
ถ่ายโอนจากแหล่งหนึ่งไปอีกแหล่งหนึ่งในระบบคอมพิวเตอร์เรียกว่า “บัส” (bus)
- บัสมีการเชื่อมต่อดีไวซ์ตั้งแต่สองดีไวซ์ขึ้นไป
- มีสัญญาณควบคุมให้ดีไวซืใดส่งก่อน ดีไวซ์ใดต้องรอ
- ในช่วงเวลาเดียวกันไม่มีดีไวซ์ที่ส่งข้อมูลพร้อมกัน
- บัสที่ทำหน้าที่เชื่อมต่อส่วนหลัก ๆ ของคอมพิวเตอร์ (โปรเซสเซอร์, หน่วยความจำ และไอโอ) เรียกว่า “บัสระบบ” (System bus)
- ปกติจะมีการโหลดโอเปอเรชันและข้อมูลจากหน่วยความจำไปยังโปรเซสเซอร์
- ส่วนการเขียนข้อมูลจากโปรเซสเซอร์ลงหน่วยความจำจะทำในทิศทางตรงข้าม
- การกระทำกับหน่วยความจำผ่านทางบัสระบบเป็นโอเปอเรชันที่เป็น “สลาฟ” (slave)
- ซีพียูสามารถเชื่อมต่อโดยตรงกับบัสระบบทำให้เรียกว่า “มาสเตอร์” (master)
โครงสร้างพื้นฐานของบัส
- โครงสร้างบัส SCSI
- ประเภทของบัส (Type)
- การควบคุมบัส (Arbitration)
- รูปแบบการเข้าจังหวะ (Timing)
- ขนาดบัส (Width)
- ประเภทการถ่ายโอนข้อมูล(Data transfer type)
- Split transaction
การออกแบบบัส
Dedicate : เป็นบัสที่มีการกำหนดหน้าที่ไว้อย่างชัดเจนและถาวร ซึ่งจะเห็นได้ชัดคือบัสย่อยในระบบคอมพิวเตอร์
เช่น แอ็ดเดรสบัส, ดาต้าบัส หรือคอนโทรลบัสที่จะทำหน้าที่กำหนดแอ็ดเดรส, ส่งข้อมูล และสัญญาณควบคุม ตามลำดับ
Multlplexed : บัสที่สามารถทำหน้าที่ได้หลายอย่าง ไม่มีการกำหนดอย่างชัดเจนและถาวร การทำหน้าที่อะไรนั้น
ขึ้นอยู่กับสัญญาณควบคุม
ประเภทของบัส
Centralized : มีดีไวซ์ที่เรียกว่า “คอนโทรลเลอร์” (Controller) หรือ “อาร์บิเตอร์” (Arbiter)
อาจจะเป็นหน่วยแยกหรือรวมอยู่กับโปรเซสเซอร์ก็ได้ โดยดีไวซ์นี้มีหน้าที่จัดสรรเวลาการใช้บัสให้กับดีไวซ์อื่นที่ร้องขอมา
Distributed : ไม่มีคอนโทรลเลอร์ที่คอยควบคุมการใช้บัส แต่จะมีวงจรพิเศษที่เรียกว่า “แอ็กเซสคอนโทรลลอจิก”
(Access Control Logic) อยู่ในตัวเอง และจะทำงานร่วมกันในแบ่งการใช้บัสร่วมกัน
การควบคุมบัส
Synchronous : จะมีดีไวซ์หนึ่งบนบัสนั้นที่มีเครื่องกำเนิดสัญญาณนาฬิกาและทำหน้าที่ส่งชุดสัญญาณ 0 และ 1
ในช่วงเวลา
Asynchronous : ไม่มีสัญญาณนาฬิกาของบัส ดีไวซ์ที่เป็นมาสเตอร์ของบัสแบบนี้จะวางทุกสิ่งที่ต้องการลงบนบัส
(แอ็ดเดรส, ดาต้า และคอนโทรล) และกำหนด MSYN (master synchronization) ดีไวซ์ที่เป็นสลาฟจะทำงาน
ของตนและเมื่อเสร็จสิ้นจะกำหนด SSYN (slave synchronization) หลังจากนั้นดีไวซ์ที่เป็นมาสเตอร์จะปลดปล่อย
MSYN แล้วส่งสัญญาณไปปลดปล่อย SSYN
ขนาดของบัส
ทุกบัสสนับสนุนการเขียน (จากมาสเตอร์ไปสลาฟ) และการอ่าน (จากสลาฟไปมาสเตอร์) สำหรับแอ็ดเดรสบัส/ดาต้าบัสที่
เป็นแบบ multiplexed ในขั้นแรกบัสจะถูกกำหนดให้เป็นแอ็ดเดรสบัสก่อน (เพื่อกำหนดแอ็ดเดรส) หลังจากนั้นจะถูกกำหนด
เป็นดาต้าบัส (เพื่อส่งข้อมูล) สำหรับโอเปอเรชันการอ่าน จะมีการรอให้ข้อมูลถูกดึงจากสลาฟมาวงบนบัสก่อน แต่สำหรับโอเปอเรชัน
ทั้งอ่านและเขียน อาจจะต้องมีการรอ เพื่อการเพิ่มการควบคุมและเลือกดีไวซ์ให้รับสิทธิ์การใช้บัสต่อไป เช่น กำหนดสิทธิ์ให้ดีไวซ์สามารถ
อ่านและเขียนได้ เป็นต้น
การถ่ายโอนข้อมูล
โดยปกติดีไวซ์ที่สามารถทำการอ่านและเขียนได้จะมีบัสมาสเตอร์ ถ้าบัสใดเป็นมัลติเพิลมาสเตอร์ (multiple master)
แสดงว่ามีหลาย ๆ ซีพียู หรือเมือไอโอสามารถกำหนดให้ทำงานกับบัสได้ ในระบบมัลติเพิลมาสเตอร์นี้จะต้องมีอาร์บิเตอร์เพื่อตัดสิน
ว่าดีไวซ์ใดจะได้สิทธิ์การใช้บัสนั้นในช่วงเวลาต่อไป อาร์บิเตอร์จะมีการจัดระดับความสำคัญของดีไวซ์แบบคงที่ แต่ในบางระบบที่มี
daisy-chains จะมีการให้สิทธิ์แบบสุ่มก็ได้ ในระบบมัลติเพิลมาสเตอร์นั้น บัสสามารถมีแบนด์วิธ (bandwidth)
ที่มากกว่าโดยใช้แพ็กเก็ต (packet) เพื่อให้บัสทำงานเต็มที่ เทคนิคนี้เรียกว่า “Split transaction”
มาตรฐานของบัสที่มีการใช้งานอย่างแพร่หลายในพีซี

PCI (Peripheral Component Interconnect)
-มีอัตราเร็ว 2 แบบคือ 33 และ 66 เมกะเฮิร์ต ปัจจุบันบนเมนบอร์ดมีสล็อตสูงสุด 5 สล็อตสำหรับติดตั้งอุปกรณ์ และสามารถ
รองรับการทำงานของการ์ด PCI แบบบัสมาสเตอร์ (สนับสนุนการถ่ายโอนข้อมูลความเร็วสูง โดยไม่ผ่าน DMA) เช่น
SCSI หรือ LAN card เป็นต้น
-ความกว้างของดาต้าบัสมีทั้งแบบ 32 และ 64 บิต โดยมีแบนด์วิธสูงสุดที่ 533 เมกะบิตต่อวินาที และสามารถถ่ายโอนข้อมูล
ในรูปแบบของ Burst Mode
- แรงดันไฟฟ้าที่ใช้กับบัสแบบ PCI นี้มี 2 แบบคือ ใช้แรงดันไฟฟ้าขนาด +3.3 โวลต์ สำหรับเครื่องพีซีทั่วไป และแรงดันขนาด
+5 โวลต์ สำหรับคอมพิวเตอร์ที่ใช้ซีพียูแบบ RISC เช่น Alpha ของ DEC
- ใช้เทคนิคที่ใช้แอ็ดเดรสบัส/ดาต้าบัสเป็นแบบ multiplexed ทำให้ลดขนาดจำนวนขาของสล็อต PCI
- ใช้ระบบ Plug & Play ทำให้สามารถติดตั้งอุปกรณ์ได้โดยไม่ต้องตั้งค่าคอนฟิกกุเรชัน ทำให้ลดปัญหาการเกิดอินเทอร์รัพต์
- มีระบบ Write Posting และ Read Prefetching ทำให้ประหยัดเวลาในการเตรียมการเขียนและอ่านข้อมูล
- เป็นระบบบัสที่ไม่ขึ้นกับโปรเซสเซอร์ ทำให้สามารถใช้อุปกรณ์ร่วมกันได้ เป็นการลดค่าใช้จ่าย และการซ่อมบำรุง
- มีการตรวจสอบและแก้ไขข้อผิดพลาดในระหว่างการถ่ายโอนข้อมูล
SCSI (Small Computer System Interface)
-บัสแบบขนานทั่วไปที่ออกแบบมาเพื่อทำงานเป็นสากลกับไอโอดีไวซ์ เช่น ฮาร์ดิสก์, เครื่องพิมพ์, ซีดีรอม, สแกนเนอร์
และเทป เป็นต้น
-แต่บัสแบบ SCSI มีการกำหนดแอ็ดเดรสให้แต่ละดีไวซ์
-บัสแบบ SCSI ถูกออกแบบให้เป็น “daisy chained” ที่แต่ละดีไวซ์จะเชื่อมต่อกับดีไวซ์อื่น โดยตัวที่สองจะเชื่อมต่อ
กับตัวที่หนึ่ง ตัวที่สามจะเชื่อมต่อกับตัวที่สอง เป็นเช่นนี้เรื่อยไป
-ดีไวซ์ตัวสุดท้ายจะมีเทอร์มิเนเตอร์ (terminator) เพื่อป้องกันการสะท้อนของสัญญาณกลับเข้ามาที่บัสในลักษณะผิดทิศทาง
-มีเทอร์มิเนเตอร์ที่คอนโทรลเลอร์ของบัสแบบ SCSI ไอโอแต่ละตัวจะมีคอนโทรลเลอร์เฉพาะอยู่ในตัวเอง
AGP (Accelerated Graphics Port)
การเชื่อมต่อของ AGP
- AGP ไม่เป็นระบบบัส
- แต่ AGP เป็นบัสที่ใช้กับการ์ดจอเพื่อการแสดงผลภาพเคลื่อนไหวแบบ 3 มิติ รวมทั้งภาพยนตร์ หรือ วิดีโอแบจอคอมพิวเตอร์
มีขนาดของบัสเป็น 32 บิตเช่นเดียวกับ PCI AGP สามารถวิ่งได้ที่ความเร็วสูงสุด ในขณะที่ PCI วิ่งได้ความเร็วเพียงครึ่งหนึ่ง
เช่น ถ้าโปรเซสเซอร์ทำงานที่ 100 เมกะเฮิร์ต
- AGP ก็สามารถทำงานได้ที่ความเร็ว 100 เมกะเฮิร์ตในขณะที่ PCI ทำงานได้ที่ความเร็ว 50 เมกะเฮิร์ตเท่านั้น ทำให้ PCI
ไม่สามารถรองรับความเร็วในการประมวลผลเชิงภาพกราฟิก โดยเฉพาะกราฟิก 3 มิติ ทำให้มีการพัฒนา AGP ขึ้นมา
USB (Universal Serial BUS)
รูปแบบการเชื่อมต่อของ USB
-สามารถเชื่อมต่อดีไวซ์ได้ถึง 127 ดีไวซ์ในคอมพิวเตอร์เครื่องเดียว
-ความเร็วในการถ่ายโอนข้อมูลสูงถึง 480 เมกะบิตต่อวินาที หรือ 60 เมกะไบต์ต่อวินาที (ใน USB 2.0) ทั้งสัญญาณเสียงและ
สัญญาณภาพ
-ลดการใช้รีซอร์ส IRQ และสล็อต (Slot) สำหรับการ์ดต่าง ๆ ที่เป็นอุปกรณ์ต่อพ่วงในคอมพิวเตอร์ได้อย่างมาก
-เปิดสวิตช์ก็สามารถใช้งานได้ทันที ไม่จำเป็นต้องปิดแล้วเปิดเครื่องใหม่
-สนับสนุนการทำงานแบบ Plug & Play
-สนับสนุนการทำงานแบบ Hot Swap ที่สามารถถอด-ใส่อุปกรณ์ได้โดยไม่ต้อปิดสวิตช์คอมพิวเตอร์ และใช้งานต่อได้ทันที
-USB มีคอนเน็กเตอร์เฉพาะที่ไม่เหมือนคอนเน็กเตอร์ของดีไวซ์อื่น ๆ ทำให้ช่วยป้องกันความผิดพลาดในการเชื่อมต่อดีไวซ์ผิดประเภท
-ดีไวซ์ที่เชื่อมต่อกับพอร์ต USB ใช้ไฟฟ้าแรงดันต่ำ เช่น เมาส์, กล้องดิจิตอล จะใช้ไฟจากบัส USB ได้ทันที แต่ถ้าดีไวซ์นั้นใช้ไฟฟ้า
แรงดันสูง เช่น เครื่องพิมพ์, สแกนเนอร์, โมเด็ม จะต้องมีแหล่งจ่ายไฟแยกต่างหาก เช่น จากเต้าเสียบ
-ความยาวของสายสัญญาณของดีไวซ์ USB สามารถยาวได้ถึง 5 เมตร หากต้องการความยาวมากกว่านั้นจะต้องใช้อุปกรณ์ทวนสัญญาณ
(repeater) -สามารถขยายดีไวซ์มาตรฐานที่เชื่อมต่อนั้นด้วยไดร์เวอร์มาตรฐาน
-การเชื่อมต่อทำได้ง่ายเนื่องจากมีสายสัญญาณเพียง 4 เส้น คือ V+, V-, D+ และ D- โดยสายข้อมูล (D+ และ D-) นั้นจะ
เป็นสายตีเกลียวคู่
-มีระบบ Suspend เพื่อช่วยในการประหยัดพลังงาน
-มีการกำหนดค่าแอ็ดเดรสของดีไวซ์ต่าง ๆ โดยอัตโนมัติ ทำให้ลดข้อผิดพลาดในการเกิดอินเทอร์รัพต์ของดีไวซ์
-มีระบบตรวจสอบและแก้ไขข้อผิดพลาดในการถ่ายโอนข้อมูลไปมาระหว่าง USB กับ USB Interface ในกรณีเกิดข้อผิดพลาด
ในถ่ายโอนข้อมูล จะพยายามรับส่งข้อมูลกันใหม่อีกครั้ง
-สนับสนุนการถ่ายโอนข้อมูล 4 ระบบคือ Bulk, Isochronous, Interrupt และ Control Transfer
ส่วนประกอบ USB
- ฮาร์ดแวร์
- USB Controller/Root Hub
- USB Hubs
- อุปกรณ์ USB
- ซอฟต์แวร์
- USB Device Driver
- USB Driver
- Host Controller Driver