1.5 การติดต่อระหว่างอุปกรณ์รอบข้างกับซีพียู

การเริ่มต้นการทำงานของเครื่องคอมพิวเตอร์ จำเป็นต้องมีโปรแกรมสำหรับเริ่มต้นปฏิบัติการ เรียกว่า บูธส์แทรป (Bootstrap) ซึ่งจะทำหน้าที่กำหนดค่าเริ่มต้นให้กับรีจีสเตอร์ภายในหน่วยประมวลผลกลาง ตัวควบคุมอุปกรณ์ ตลอดจนหน่วยความจำ และทำการโหลดระบบปฏิบัติการลงในหน่วยความจำเพื่อเริ่มต้นการทำงาน โดยที่ระบบปฏิบัติการจะสร้างโปรเซสแรกชื่อว่า init และรอเหตุการณ์โดยใช้วิธีการขัดจังหวะจากฮาร์ดแวร์หรือซอฟต์แวร์ ถ้าสัญญาณการขัดจังหวะมาจากฮาร์ดแวร์ การขัดจังหวะอาจเกิดขึ้นเวลาใดก็ได้ โดยส่งสัญญาณทางบัสไปยังหน่วยประมวลผลกลาง แต่ถ้าส่งมาโดยซอฟต์แวร์ การขัดจังหวะจะเกิดขึ้นได้โดยทำตามคำสั่งพิเศษที่เรียกว่า คำสั่งระบบ (System call หรือ monitor call)
เหตุการณ์ต่างๆ ที่ทำให้เกิดการขัดจังหวะ เช่น การเสร็จสิ้นการทำงานของอุปกรณ์นำข้อมูลเข้า/ออก การเกิดข้อผิดพลาดจากการหารด้วยศูนย์ และการร้องขอการบริการจากระบบปฏิบัติการ การขัดจังหวะแต่ละประเภทจะมีส่วนบริการเฉพาะของตนเองที่ต้องให้บริการแก่การขัดจังหวะประเภทนั้นๆ เมื่อเกิดสัญญาณการขัดจังหวะ หน่วยประมวลผลกลางจะหยุดการทำงานขณะนั้นและโยกย้ายมาปฏิบัติการ ณ ตำแหน่งเริ่มต้นของส่วนการบริการของการขัดจังหวะที่เกิดขึ้น หลังจากทำงานในส่วนบริการเสร็จสิ้น หน่วยประมวลผลกลางจึงกลับไปทำงานที่ถูกขัดจังหวะนั้นต่อไป
การขัดจังหวะเป็นส่วนสำคัญของสถาปัตยกรรมคอมพิวเตอร์ซึ่งในการออกแบบเครื่องคอมพิวเตอร์แต่ละรุ่น มีกลไกการขัดจังหวะเฉพาะของตนเอง แต่หน้าที่โดยทั่วไปเหมือนกัน เมื่อเกิดสัญญาณการขัดจังหวะ จะมีตัวจัดการขัดจังหวะ (interrupt handle) ทำการตรวจสอบก่อนว่าสัญญาณนั้นเป็นสัญญาณขัดจังหวะประเภทใด จากนั้นก็โยกย้ายการควบคุมไปยังตำแหน่งเริ่มต้นของส่วนการบริการการขัดจังหวะประเภทนั้นๆ ซึ่งการจัดการงานนี้ต้องทำอย่างรวดเร็วโดยใช้ตารางเก็บตำแหน่งส่วนบริการการขัดจังหวะ (interrupt vector table) ที่อยู่ในหน่วยความจำหลัก ซึ่งข้อมูลในตารางนี้เป็นตำแหน่งที่อยู่เริ่มต้นของส่วนบริการการขัดจังหวะแต่ละประเภท ระบบปฏิบัติการยูนิกซ์และไมโครซอฟต์ดอส ก็อาศัยกลไกการขัดจังหวะนี้
นอกจากนี้กลไกการขัดจังหวะจะต้องเก็บตำแหน่งของคำสั่งที่ถูกขัดจังหวะด้วย เพื่อให้หน่วยประมวลผลกลางสามารถกลับมาทำงานที่ถูกขัดจังหวะต่อไปได้ เดิมทีนั้นมีการออกแบบให้เก็บตำแหน่งดังกล่าวไว้ในที่ที่กำหนดให้แน่นอนแล้วหรือโดยใช้หมายเลขอุปกรณ์เป็นดัชนีของที่ที่กำหนดให้ แต่ในปัจจุบันนี้ ระบบเก็บตำแหน่งการกลับคืนนั้นเก็บไว้บนสแต็กของระบบ ถ้าส่วนการบริการการขัดจังหวะจำเป็นต้องเปลี่ยนแปลงสถานะเดิมของหน่วยประมวลผลกลาง เช่น ค่าในรีจีสเตอร์ก็จะต้องทำการเก็บรักษาค่าต่างๆที่ถูกกระทบไว้บนสแต็กก่อนและหลังจากการทำงานในส่วนบริการเสร็จสิ้น ทำการกำหนดค่าเดิมเหล่านั้นกลับคืนให้เพื่อรักษาสถานะเดิมของระบบ ดังนั้นเมื่อหน่วยประมวลผลกลางกลับมาทำงานเดิมที่ถูกขัดจังหวะไป ก็สามารถดำเนินต่อไปได้เสมือนว่างานนั้นไม่เคยถูกขัดจังหวะ
โดยปกติ ขณะที่ระบบปฏิบัติการกำลังบริการให้กับสัญญาณการขัดจังหวะหนึ่งนั้น จะไม่สนใจสัญญาณการขัดจังหวะอื่น ๆ ที่เข้ามาในระหว่างนั้น เพราะถ้าระบบปฏิบัติการยอมรับสัญญาณขัดจังหวะใหม่ที่เข้ามาอีก จะทำให้ข้อมูลสถานะต่างๆ ของสัญญาณการขัดจังหวะแรกหายไปทันที อย่างไรก็ตาม กลไกการขัดจังหวะที่ซับซ้อนมากขึ้น จะยอมรับการเกิดสัญญาณการขัดจังหวะใหม่ได้โดยใช้หลักการของลำดับความสำคัญที่กำหนดให้กับการร้องขอแต่ละชนิด และจัดเก็บข้อมูลของการดำเนินการขัดจังหวะแยกตามลำดับความสำคัญนั้นๆ ทั้งนี้สัญญาณการขัดจังหวะที่มีลำดับความสำคัญมากกว่าจะได้เข้าปฏิบัติการก่อน แม้ว่าขณะนั้นระบบปฏิบัติการกำลังทำงานให้กับสัญญาณการขัดจังหวะที่มีลำดับความสำคัญต่ำกว่า แต่ถ้าสัญญาณการขัดจังหวะที่เข้ามานั้นเป็นสัญญาณการขัดจังหวะที่มีลำดับความสำคัญเท่ากันหรือต่ำกว่า ระบบปฏิบัติการก็จะไม่ยอมรับรู้เช่นกัน
ระบบปฏิบัติการสมัยใหม่เป็นระบบที่ทำงานโดยใช้การขัดจังหวะ ถ้าไม่มีโปรเซสที่ระบบปฏิบัติการไม่ต้องให้บริการอุปกรณ์ใดๆ และไม่มีการตอบสนองไปยังผู้ใช้ ระบบปฏิบัติการก็จะว่างและรอเหตุการณ์ใดๆ เกิดขึ้น ซึ่งเหตุการณ์เหล่านั้นถูกส่งมาในรูปของสัญญาณของการขัดจังหวะที่เกิดจากซอฟต์แวร์สร้างขึ้น โดยอาจจะเกิดข้อผิดพลาด เช่นการเกิดหารด้วยศูนย์ หรือการเข้าถึงหน่วยความจำไม่ถูกต้อง หรืออาจเกิดจากการร้องขอของโปรแกรมผู้ใช้ที่ระบบปฏิบัติการต้องกระทำการให้
ลักษณะการทำงานโดยใช้การขัดจังหวะของระบบปฏิบัติการนี้เป็นตัวกำหนดโครงสร้างโดยทั่วไปของระบบ เมื่อมีการขัดจังหวะเกิดขึ้น ฮาร์ดแวร์จะส่งการควบคุมไปยังระบบปฏิบัติการ เพื่อทำการเก็บค่าสถานะของหน่วยประมวลผลกลาง ได้แก่ รีจีสเตอร์และตำแหน่งคำสั่งถัดไปในการปฏิบัติการของโปรแกรม จากนั้นระบบปฏิบัติการจะพิจารณาว่าเป็นการขัดจังหวะประเภทใด โดยใช้วิธีการการติดต่อระหว่างซีพียูกับอุปกรณ์รอบข้างที่เรียกว่า การขัดจังหวะหรือการอินเตอร์รัพ (interrupt) ซึ่งมีการติดต่อแบบต่างๆ คือแบบพอลลิ่ง (polling),แบบ อินเตอร์รัพ (interrupt) และแบบเมลบ๊อกซ์ (mailbox) ดังมีรายละเอียดดังนี้

    1. การติดต่อแบบพอลลิ่ง (polling) ลักษณะการติดต่อแบบนี้คือ ทุกๆ ช่วงเวลาหนึ่ง (Quantum time) ซีพียูจะหยุดงานที่ทำอยู่ชั่วคราวและไปตรวจเช็คที่แต่ละแชนแนลเพื่อดูว่า มีอุปกรณ์ตัวใดบ้างต้องการส่งข้อมูลมาให้ซีพียูจากอุปกรณ์แรกไปถึงอุปกรณ์สุดท้าย ถ้าอุปกรณ์ต้องการส่งข้อมูล ซีพียูก็จะรับข้อมูลมาแต่ถ้าอุปกรณ์นั้นไม่ต้องการส่งข้อมูล ซีพียูก็จะเปลี่ยนไปตรวจสอบอุปกรณ์ตัวอื่นต่อไปจนกระทั่งตรวจสอบครบหมด ซีพียูจะกลับไปทำงานของมันตามเดิม วนรอบ (Loop) การทำงานเช่นนี้เรื่อยไปลักษณะของการพอลลิ่ง อาจยกตัวอย่างของการสอนหนังสือในห้องเรียนมาประกอบเพื่อความเข้าใจ นั่นคือในขณะที่ครูกำลังสอนนักเรียน ทุก ๆ 10 นาที คุณครูจะหยุดสอนและไล่ถามนักเรียนทีละคนว่ามีปัญหาอะไรหรือไม่ ถ้านักเรียนคนที่ถูกถามไม่มีคำถามหรือข้อสงสัยคุณครูก็เปลี่ยนไปถามนักเรียนคนถัดไป แต่ถ้า นักเรียนคนนั้นมีปัญหาจะถาม ครูก็จะอนุญาตให้นักเรียนถามได้ เมื่อถาม-ตอบเสร็จแล้วครูก็จะไปถามนักเรียนคนอื่นต่อจนหมดชั้น แล้วครูจึงกลับไปสอนต่อจนอีก 10 นาทีจึงเริ่มต้นถามใหม ข้อเสียของการพอลลิ่งคือ ในกรณีที่อุปกรณ์ต่างๆ ไม่ต้องการส่งข้อมูลเลย ซีพียูจะเสียเวลาที่ต้องตรวจเช็คอุปกรณ์ทุกตัว (คุณครูเสียเวลาในการถามนักเรียนทุกคน โดยที่อาจไม่มีนักเรียนคนไหนมีคำถามเลย) และอีกประการหนึ่งคืออุปกรณ์ที่ต้องการส่งข้อมูลจะส่งข้อมูลให้ซีพียูได้เฉพาะเมื่อถึงเวลาที่ซีพียูตรวจเช็คมาถึงตัวมันเท่านั้น ทำให้อุปกรณ์นั้นเสียเวลาในการรอ (นักเรียนต้องรอจนกว่าคุณครูถามมาถึงตัวเขา เขาถึงจะถามคำถามได้)
    2. การติดต่อแบบอินเตอร์รัพ (interrupt) ลักษณะการติดต่อแบบนี้จะลดข้อเสียแบบพอลลิ่งได้มาก มีขั้นตอนดังนี้คือ เมื่ออุปกรณ์ตัวใดต้องการส่งข้อมูล มันจะส่งสัญญาณผ่านทางแชนแนลไปบอกซีพียู เมื่อซีพียูรับทราบแล้วจะหยุดงานที่ทำอยู่ชั่วคราว เพื่อให้อุปกรณ์ทำการส่งข้อมูลจนกระทั่งเสร็จสิ้นลง ซีพียูจึงกลับไปทำงานที่ทำค้างไว้ต่อ เปรียบได้กับการที่คุณครูสอนไปเรื่อยๆ เมื่อนักเรียนคนใดมีคำถามจะถาม ก็ยกมือเป็นการบอกให้คุณครูรับทราบ (ส่งสัญญาณให้ซีพียู) เมื่อคุณครูเห็นนักเรียนยกมือ (CPU รับรู้การต้องการส่งข้อมูล) ก็หยุดสอนชั่วคราวเปิดโอกาสให้นักเรียนได้ถาม (ส่งข้อมูล) และตอบคำถาม เมื่อนักเรียนเข้าใจในปัญหาที่มีอยู่ (การส่ง ข้อมูลสิ้นสุดลง) ครูก็เริ่มสอนนักเรียนต่อไป (ซีพียูกลับมาทำงานที่ค้างไว้) การติดต่อแบบอินเตอร์รัพต์ ซีพียูไม่ต้องเสียเวลาในการตรวจเช็คความต้องการส่งข้อมูลของอุปกรณ์ ทุกตัว และในทำนองเดียวกันอุปกรณ์ก็ไม่ต้องเสียเวลารอแต่อย่างไรก็ตามซีพียูอาจไม่สามารถหยุดงานที่กำลังทำอยู่ได้ในทันที ในกรณีนี้อุปกรณ์ตัวนั้นต้องรอจนกระทั่งงานที่ซีพียูกำลังทำอยู่นี้เสร็จสิ้นลงเสียก่อน มันจึงส่งข้อมูลได้
    3. การติดต่อแบบเมลบ๊อกซ์ (mailbox) ลักษณะการติดต่อแบบนี้ ระบบต้องเสียเนื้อที่ในหน่วย ความจำบางส่วนเพื่อเป็นที่สำหรับพักข้อมูล เมื่อมีอุปกรณ์บางตัวที่ต้องการส่งข้อมูล มันก็จะส่งข้อมูลไปไว้ที่หน่วยความจำส่วนนี้ และสำหรับซีพียูทุกๆ ช่วงเวลาหนึ่งๆ ซีพียูจะหยุดงานที่ทำไว้เพื่อจะไปตรวจสอบที่หน่วยความจำส่วนนี้เพื่อดูว่ามีข้อมูลอยู่หรือไม่ ถ้าไม่มี ข้อมูลถูกส่งไปไว้ในหน่วยความจำนี้ ซีพียูจะกลับไปทำงานเดิมที่ค้างไว้ แต่ถ้ามีมันก็จะรับข้อมูลเข้ามา จะเห็นได้ว่าการติดต่อแบบเมลบ๊อกซ็นี้เป็นการผสมผสานระหว่างการอินเทอร์รัพต์กับการพอลลิ่ง

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