# Computer OS Architecture

## โครงสร้าง (Structure)

จากรูปข้างล่างเป็นการอธิบายความเกี่ยวข้องกันขององค์ประกอบต่างๆของแต่ละระบบย่อยภายในคอมพิวเตอร์ ซึ่งได้แก่

* หน่วยประมวลผลกลาง (Central Processing Unit - CPU)
* หน่วยความจำหลัก (Main Memory)
* อุปกรณ์อินพุทและเอาท์พุท (I/O Devices)
* หน่วยเชื่อมต่อระหว่างระบบ (System Interconnection)

<figure><img src="https://2179313969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4cbrznEv1DwPp6m0FjGI%2Fuploads%2FUMYbwfKMfw18nzemX1H4%2Fos1.jpeg?alt=media&#x26;token=344e661a-e35d-4155-959e-35b1c7cdb653" alt=""><figcaption><p><em>โครงสร้างภาพรวมของคอมพิวเตอร์</em></p></figcaption></figure>

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

* หน่วยควบคุม (Control Unit - CU) ทำหน้าที่ควบคุมการทำงานต่างๆของ CPU และแม้กระทั่งของเครื่องคอมพิวเตอร์เอง
* หน่วยคำนวณและตรรกะ (Arithmetic and Logic Unit - ALU) ทำหน้าที่หลักในการประมวลผลข้อมูลต่างๆ
* รีจิสเตอร์ (Register) ทำหน้าที่เป็นตัวเก็บค่าภายใน CPU
* ส่วนสื่อสารภายใน CPU (CPU Interconnection) ทำหน้าที่เป็นตัวเชื่อมโยงการสื่อสารระหว่างหน่วยต่างๆภายใน CPU

<figure><img src="https://2179313969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4cbrznEv1DwPp6m0FjGI%2Fuploads%2FhWesmWeMyISp0JMsuG8F%2Fos2.jpeg?alt=media&#x26;token=d6eb4d0d-828e-48ad-b1b8-bac53b309432" alt=""><figcaption><p><em>องค์ประกอบภายในหน่วยประมวลผลกลาง</em></p></figcaption></figure>

การทำงานภายในคอมพิวเตอร์ 80x86 จะติดต่อกับหน่วยความจำโดยผ่าน bus controller ดังที่ได้แสดงในรูปข้างล่าง โดย bus controller นี้จะทำการแปลความหมายของสัญญาณของหน่วยประมวลผลกลางและสร้างสัญญาณของหน่วยความจำที่ต้องการทั้งสองเส้น output หลักนี้จะต่างกันตรงที่จะเป็นขบวนการอ่านหรือขบวนการเขียนและแตกต่างกันตรงที่เป็นการเข้าถึงหน่วยความจำแบบตรงหรือ แบบ isolated

<figure><img src="https://2179313969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4cbrznEv1DwPp6m0FjGI%2Fuploads%2FLphB8y80YxGr0HK1YiZr%2Fos3.png?alt=media&#x26;token=2a4b7944-9563-4d25-9061-7256ba0a3f8b" alt=""><figcaption><p><em>การสื่อสารระหว่างหน่วยประมวลผลและอุปกรณ์</em></p></figcaption></figure>

ข้อมูลที่จะโอนย้ายทุกตัวจะต้องมีแหล่งส่งข้อมูล และแหล่งรับข้อมูลเสมอ ซึ่งในขบวนการต่าง ๆ จะมีหลักสำคัญอยู่ว่า ข้อมูลนั้นเป็นแอดเดรส หรือดาต้า, จะส่งไปยังจุดไหน เช่นส่งไปยังหน่วยความจำ หรืออุปกรณ์ I/O และจะส่งเมื่อไหร่ ขบวนการเหล่านี้ในขบวนการทั่ว ๆ ไปจะต้องมีสัญญาณในการตรวจสอบอุปกรณ์พร้อมที่จะส่งหรือรับข้อมูล หรือยังก่อนเสมอ ซึ่งจุดส่งข้อมูลและจุดรับข้อมูลจะต้องมีสัญญาณตรวจสอบความพร้อมเสมอเพื่อให้ข้อมูลมีการใช้งานอย่างเป็นระเบียบ เช่น ส่งจากซีพียูไปยังอุปกรณ์รอบข้าง เป็นต้น ซึ่งจุดรับส่งคู่หนึ่ง ๆ อาจจะเป็นระหว่างซีพียูด้วยกัน, ซีพียูกับหน่วยความจำ, ซีพียูกับอุปกรณ์รอบข้าง, ระหว่างอุปกรณ์รอบข้างด้วยกัน, หรือระหว่างหน่วยความจำกับอุปกรณ์รอบข้าง ก็ได้ โดยข้อมูลที่โอนย้ายไปมานั้นจะอยู่ในลักษณะของเลขฐานสอง เช่น 0011010 เลขแต่ละตัวแทนด้วย 1 บิท (bit) อาจจะเป็น 8 บิท หรือ 16 บิท ก็ขึ้นอยู่กับระบบนั้น ๆ

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

![การติดต่อกันระหว่างผู้ใช้และคอมพิวเตอร์](https://firebasestorage.googleapis.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FxcsMuyfAugrDixmdjChq%2Ffile.png?alt=media)

* BIOS : Basic Input/Output เป็น ควบคุมการติดต่อเบื้องต้นอุปกรณ์คอมพิวเตอร์กับคอมพิวเตอร์
* Operating System คือ ระบบปฏิบัติการที่เป็น สื่อกลาง ระหว่างคนกับคอมพิวเตอร์
* Operating System commands คือ คำสั่งเฉพาะที่ใช้ระบบปฏิบัติการ
* Appication programs คือ โปรแกรมทั่วไปที่อยูบนระบบปฏิบัติการ

## โครงสร้างอุปกรณ์ภายใน (I/O Structure)

### **BIOS**

BIOS หรือที่ย่อมาจาก Basic Input/Output System จะมีการสื่อสารกันโดยตรงกับอุปกรณ์ที่ติดต่อกับคอมพิวเตอร์ BIOS จะประกอบด้วยกลุ่มของโปรแกรมที่ใช้ในการติดต่อกับอุปกรณ์ อย่างเช่น คีย์บอร์ด จอภาพ เครื่องพิมพ์ พอร์ตอนุกรมและฮาร์ดดิสก์ ซึ่งโปรแกรมเหล่านี้จะอนุญาตให้ผู้ใช้งานสามารถเขียนฟังก์ชั่นเพื่อเรียกใช้งานได้โดยไม่ต้องกังวลว่าจะต้องควบคุมอุปกรณ์นั้นอย่างไรหรือทราบชนิดของอุปกรณ์ที่ต้องการจะใช้งาน ถ้าปราศจาก BIOS แล้วระบบภายในคอมพิวเตอร์ก็จะมีแค่สายไฟฟ้าที่ต่อระโยงระยางไปมาและอุปกรณ์อิเล็กทรอนิกส์

BIOS จะประกอบด้วยส่วนหลักๆ อยู่ 2 ส่วน ได้แก่ ส่วนที่หนึ่งคือหน่วยความจำแบบถาวร (ROM BIOS) ที่ใช้เก็บฟังก์ชั่นที่เกี่ยวกับการเริ่มทำงานของคอมพิวเตอร์ (Boot) และบรรจุโปรแกรมที่ใช้สื่อสารกับอุปกรณ์ภายในคอมพิวเตอร์เองและในส่วนที่สองเป็นหน่วยความจำแบบไม่ถาวร (Non-permanent) จะใช้เก็บระบบปฏิบัติการ

ซึ่งระบบปฏิบัติการจะอนุญาตให้ผู้ใช้สามารถที่จะเรียกใช้งานอุปกรณ์ได้อย่างง่ายดายยิ่งขึ้น ระบบปฏิบัติการจะคอยรับคำสั่งจากคีย์บอร์ดและแสดงผลลัพธ์ออกทางจอภาพ ในระบบการจัดการกับ Disk หรือที่เรียกว่า DOS (Disk Operating System) จะมีการรวบรวมคำสั่งที่สำคัญที่จะทำการติดต่อกับตัวควบคุม (Controller) ที่จะเข้าเรียกใช้งาน Disk Drive ภาษาบนระบบปฏิบัติการ DOS จะประกอบด้วยกลุ่มของคำสั่งที่ถูกป้อนจากผู้ใช้และผ่านการแปรความ (Interpret) เพื่อที่จะดำเนินการกับงานที่จัดการกับแฟ้มข้อมูลเหล่านั้นซึ่งขั้นตอนเหล่านี้ ระบบปฏิบัติการจะเป็นตัวที่ทำหน้าที่ติดต่อเรียกใช้งานกับ BIOS เองโดยตรง หน้าที่หลักของระบบปฏิบัติการ DOS ก็คือใช้ในการรันโปรแกรมคัดลอกและลบแฟ้มข้อมูล สร้างไดเรกทอรีเคลื่อนย้ายแฟ้มข้อมูลและแสดงรายชื่อแฟ้มข้อมูลความสัมพันธ์ระหว่างอุปกรณ์, BIOS, DOS และ โปรแกรมประยุกต์ดังแสดงในรูปด้านบน

### I/O Interrupts

เมื่อ I/O เริ่มทำงาน CPU จะ load register ที่จำเป็นมาไว้ใน device controller ซึ่ง device controller จะทำการตรวจสอบ register เหล่านั้น เพื่อกำหนดว่าจะทำงานอะไร เช่น ถ้าพบร้องขอให้อ่านข้อมูล controller จะเริ่มโอนย้ายข้อมูลจาก device ไปไว้ที่ local buffer เมื่อโอนย้ายข้อมูลเสร็จ device controller จะบอก CPU ว่าทำงานเสร็จแล้ว การติดต่อสื่อสารนี้จะสำเร็จได้โดยสัญญาณขัดจังหวะ

<figure><img src="https://2179313969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4cbrznEv1DwPp6m0FjGI%2Fuploads%2FaiL7IGl9BPFRAJ8upylm%2Fos4.jpeg?alt=media&#x26;token=7e77c061-0c28-4bcc-b6c7-39130a1180db" alt=""><figcaption><p><em>การสื่อสารแบบ Synchronous และ Asynchronous</em></p></figcaption></figure>

### **Synchronous I/O**

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

1\. คอมพิวเตอร์บางเครื่องมีชุดคำสั่ง wait พิเศษซึ่งปล่อยให้ CPU ว่างจนกระทั่งเกิดสัญญาณขัดจังหวะถัดไป

2\. เครื่องจักรที่ไม่มีชุดคำสั่งดังกล่าวอาจจะมี `wait loop`

```armasm
loop : jmp loop
```

`loop` นี้จะวนรอบไปเรื่อย ๆ จนกระทั่งเกิดสัญญาณขัดจังหวะก็จะโอนย้ายการควบคุมไปส่วนอื่น ๆ ของระบบปฏิบัติการ ถ้า CPU ต้องรอให้รับส่งข้อมูลเสร็จงานก่อนเสมอแสดงว่าต้องมีการร้องขอของ I/O อยู่หนึ่งตัวที่เด่นอยู่ตลอดเวลาดังนั้นเมื่อเกิดสัญญาณการขัดจังหวะการรับส่งข้อมูล ระบบปฏิบัติการจะรู้ทันทีว่าอุปกรณ์กำลังถูกขัดจังหวะ แต่ไม่สามารถประมวลผล I/O device หลาย ๆ ตัวพร้อมกันได้ ตัวอย่างของระบบนี้คือ ระบบปฏิบัติการ MS-DOS เวลาสั่งพิมพ์ ต้องรอเสร็จงานก่อนถึงจะทำงานต่อไปได้

**Asynchronous I/O**

* เมื่อการรับส่งข้อมูลเริ่มขึ้นการโยกย้ายการควบคุมให้กับโปรแกรมของผู้ใช้ทำได้โดยไม่ต้องรอให้การรับส่งข้อมูลเสร็จ
* System call (คำสั่งของขอระบบปฏิบัติการ) อนุญาตให้โปรแกรมของผู้ใช้รอคอยให้รับส่งข้อมูลเสร็จ
* ตารางที่ระบบปฏิบัติการใช้เก็บบันทึกของอุปกรณ์รับส่งข้อมูลแต่ละตัว คือ device-status table ซึ่งใช้แสดงชนิดของอุปกรณ์ ที่อยู่(address) และ สถานภาพ(state) (ว่าง , กำลังทำงาน หรือเสีย)

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

เทคนิคหลักๆ 2 แบบ ที่ใช้กันในการสื่อสารข้อมูลคือ การโพล I/O (Polled I/O) และการอินเตอร์รัพท์ I/O โดยมีรายละเอียดดังนี้

### โพลลิ่ง (Polling)

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

สำหรับในกรณีที่ซีพียูส่งสัญญาณการโพลออกไปตรวจสอบแล้วพบว่ามีข้อมูลที่ต้องการส่งเข้ามาในกรณีจะเรียกว่า "Wet Poll" แต่ในกรณีที่โพลไปแล้วไม่มีข้อมูลจะเรียกว่า “Dry Poll” ซึ่งในส่วนนี้จะสูญเปล่าเวลากับซีพียูไปถึง 90 เปอร์เซ็นต์ ต่อมาได้มีการเสนอเทคนิคใหม่เพื่อหลีกเลี่ยงการสูญเปล่าของเวลาที่เรียกว่าเทคนิคการโพลแบบ Round Robin

### การอินเตอร์รัพท์ (Interrupt)

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

ดังนั้นในลักษณะเดียวกันถ้าเราเปรียบโทรศัพท์เหมือนกับอุปกรณ์รอบข้าง ระบบโทรศัพท์จะต้องทำงานอยู่ตลอดเวลาเพื่อคอยรับสัญญาณเรียกแล้วสร้างเสียงกริ่งเตือนออกมา (เปรียบกับการอินเตอร์รัพท์) สาเหตุให้เกิดอิน-เทอร์รัพท์ ตัวอย่างเช่น โปรแกรมทำงานผิดพลาด (เกิดการ Overflow, Divide by zero), ตัว Timer ซึ่งเกิดจาก ซีพียูเอง, ตัว I/O Controller ส่งสัญญาณแจ้งการทำงานเสร็จสิ้นหรือเกิดผิดพลาด และ เกิดการทำงานผิดพลาดของอุปกรณ์ (Hardware failure) เช่น Power supply เสีย เป็นต้น การที่จะสร้าง Interrupt นั้นสามารถทำได้โดยใช้ Hardware และ Software ดังรูปข้างล่าง ถ้าอุปกรณ์ต้องการที่จะอินเตอร์รัพท์กับซีพียูอุปกรณ์จะทำการแจ้งไปยัง อุปกรณ์ที่เรียกว่า PIC (Programmable Interrupt Controller) ซึ่งตัว PIC จะเป็นตัวจัดการควบคุมว่าจะให้มีการติดต่อกับซีพียูหรือไม่ ถ้า PIC อนุญาตให้อุปกรณ์ติดต่อกับซีพียูได้ก็จะทำการเรียกไปยัง ISR (Interrupt Service Routine) ดังนั้น ISR ก็จะมีการติดต่อเกิดขึ้นกับอุปกรณ์ และ ดำเนินการกับข้อมูลเหล่านั้น ซึ่งเมื่อสิ้นสุดขบวนการ อินเตอร์รัพท์แล้วซีพียูก็จะกลับไปทำงานก่อนหน้านี้ต่อไป

<figure><img src="https://2179313969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4cbrznEv1DwPp6m0FjGI%2Fuploads%2Fyly0SSYcW1T44r0mObbI%2Fos5.jpeg?alt=media&#x26;token=b622300b-22ee-4d8b-8581-ca865efa0d8b" alt=""><figcaption><p><em>แสดงการทำงานระหว่างการโพลลิ่งและการอินเตอร์รัพท์</em></p></figcaption></figure>

Software Interrupt เกิดขึ้นจากตัวโปรแกรมเองทำการร้องขอ (Request) ไปยัง ISR ตัวอย่างที่เห็นกันทั่วๆไป อย่างเช่น การอ่านค่าปุ่ม จาก คีย์บอร์ด การแสดงผลตัวอักษรบนจอภาพ และการอ่านวันเวลาปัจจุบัน เป็นต้น

<figure><img src="https://2179313969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4cbrznEv1DwPp6m0FjGI%2Fuploads%2Fc9KCcrL9zVD61lACVyAW%2Fos6.jpeg?alt=media&#x26;token=5e462d9d-b352-43fa-9d79-18976e098fc3" alt=""><figcaption><p><em>การจัดการการร้องขอจากอุปกรณ์รอบข้าง</em></p></figcaption></figure>

#### อินเตอร์รัพท์เวกเตอร์ (*Interrupt Vector)*

Interrupt Vector เป็นตำแหน่งที่อยู่ ที่จะบอกให้ตัวจัดการ interrupt (Interrupt Handler) ทราบตำแหน่งใน ISR ซึ่งสัญญาณ interrupt (INT) จะถูกกำหนดเป็นหมายเลขตั้งแต่ 0 ถึง 255 และจะถูกเก็บอยู่ในหน่วยความจำส่วนที่ต่ำกว่า 1024 byte อย่างเช่น

```html
INT 0   จะถูกเก็บในตำแหน่งตั้งแต่ 0000 : 0000  ถึง  0000 : 0003
INT 1   จะถูกเก็บในตำแหน่งตั้งแต่ 0000 : 0004  ถึง  0000 : 0007  เป็นต้น
```

ซึ่ง 2 byte แรก (0004) จะเป็น offset และ 2 byte หลัง (0007) จะเป็น Segment Address จากตัวอย่างโปรแกรมภาษาซีที่ 1 สามารถแสดงตำแหน่งในหน่วยความจำของ ISR ซึ่งจากผลการรันโปรแกรมจะได้ผลลัพธ์ตำแหน่งของ ISR สำหรับ INT 0 คือ 0EE5 : 0158 และ INT หมายเลขอื่นๆ ตามลำดับขั้นตอนการตอบสนองต่อการอินเตอร์รัพท์

<figure><img src="https://2179313969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4cbrznEv1DwPp6m0FjGI%2Fuploads%2Fpck6N29UhVNtKfY0aPCp%2Fos7.jpeg?alt=media&#x26;token=ee4a6824-8d5e-496c-b31b-08aa90404252" alt=""><figcaption><p><em>ระยะเวลาการทำงานของอินเทอร์รัพท์</em></p></figcaption></figure>

**การทำงานของ CPU เมื่อเกิดการ interrupt มีดังนี้**

* หยุดการทำงานตรงขณะปัจจุบันไว้ก่อน
* บันทึกตำแหน่งของคำสั่งถัดไป รวมทั้งข้อมูลต่างๆที่เกี่ยวข้องไว้ด้วย
* กำหนดค่าใน Program Counter (PC) เป็น address ของ interrupt handler routine
* ไปทำงาน interrupt handler routine
* คืนค่าที่บันทึกไว้ในตอนแรก และกลับไปทำงานตามเดิม

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

* อุปกรณ์ภายนอกส่งสัญญาณ INT เข้ามายังซีพียู
* ถ้าซีพียูยอมให้มีการอินเตอร์รัพท์ได้หรือทำคำสั่ง EI (Enable Interrupt) ซีพียูก็จะตอบรับการขออิน-เตอร์รัพท์นั้นด้วย Interrupt Acknowledge Cycle
* อุปกรณ์ภายนอกเมื่อรับรู้ว่า ซีพียูยอมให้มีการอินเตอร์รัพท์ได้ก็จะส่งอินเตอร์รัพท์เวกเตอร์เข้ามายังซีพียู
* ซีพียูจะนำเอาอินเตอร์รัพท์เวกเตอร์นั้นมาเป็นตัวชี้ตำแหน่งของคำสั่งที่จะต้องกระโดดไปทำ (โดยซีพียูจะต้องเก็บสถานะของตำแหน่งในโปรแกรมหลักขณะนั้นไว้ในสแต็ค)
* ซีพียูจะกระโดดไปปฏิบัติตามคำสั่ง ณ ตำแหน่งที่ชี้โดยอินเตอร์รัพท์เวกเตอร์ (เป็นอินเตอร์-รัพท์เซอร์วิสรูทีน)
* ก่อนจบการทำงานตามโปรแกรมอินเตอร์รัพท์เซอร์วิสรูทีน ซีพียูก็จะดึงเอาตำแหน่งที่เก็บไว้ในสแต็คกลับมา แล้วกระโดดไปยังตำแหน่งนั้นแล้วทำตามคำสั่งในโปรแกรมหลักต่อไป

### **ข้อเปรียบเทียบของการอินเตอร์รัพท์กับการโพล**

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

{% hint style="info" %}
*ตารางเปรียบเทียบระหว่างการอินเตอร์รัพท์และการโพลลิ่ง*
{% endhint %}

<table><thead><tr><th width="165">ประเภท</th><th>ข้อดี</th><th>ข้อเสีย</th></tr></thead><tbody><tr><td>การโพลลิ่ง</td><td><ol><li>อุปกรณ์ทางฮาร์ดแวร์ที่ใช้เป็นแบบง่าย ๆ</li><li>ซอฟท์แวร์ที่จะต้องเขียนขึ้นมาเพื่อใช้ในกระบวนการนี้ไม่ยุ่งยากและสามารถแก้ไขข้อบกพร่องได้ง่าย</li></ol></td><td>1. 90 เปอร์เซ็นต์ของคาบเวลา (T) ถูกใช้ไปในการตรวจสอบพอร์ทต่างๆซึ่งเป็นการสูญเสียอย่างยิ่งถ้าเป็นกรณีของ dry poll ช่วงเวลาการคอยเพื่อที่จะทำการโพลค่อนข้างนาน</td></tr><tr><td>การอินเตอร์รัพท์</td><td><ol><li>ซีพียูจะมีการพิจารณาการขออินเตอร์รัพทก็ต่อเมื่อมีสัญญาณการขออิน-เตอร์รัพท์ส่งเข้ามาเท่านั้น ทำให้ไม่ต้องเสียเวลาตรวจสอบไปเช่น ในกรณีเกิด dry poll</li></ol><p>2. การตอบสนองต่อการอินเตอร์รัพท์จะเริ่มทันทีหลังจากได้รับสัญญาณอินเตอร์รัพท์รีเควส (Interrupt request) ซึ่งทำให้มีช่วงเวลาล่าช้าสั้น ๆ</p><p><br></p></td><td><p>1. เวลาที่ต้องใช้ในการตอบสนองต่อการขออินเตอร์รัพท์นานกว่าการโพลเพราะว่าอินเตอร์รัพท์เซอร์วิสรูทีน หรือโปรแกรมตอบสนองต่อการอินเตอร์รัพท์จะต้องมีขั้นตอนการบันทึกสถานะ (status) ของซีพียูก่อนและทำการเอ็กซ์ซีคิวส์คำสั่งต่าง ๆ โดยตรง</p><p>2. ต้องใช้อุปกรณ์ทางฮาร์ดแวร์ที่ซับซ้อนขึ้นในกรณีที่อุปกรณ์รอบข้างหลาย ๆ ชิ้นมีการขออินเตอร์รัพท์ พร้อม ๆ กันก็จะต้องมีการใช้เทคนิคของการจัดลำดับความสำคัญ (Priority) ให้แก่อุปกรณ์เหล่านั้นโดยชัดเจน คือจะต้องกำหนดชื่อของอุปกรณ์ต่าง ๆ ก่อน และในการสร้าง Contention resolution สามารถทำได้โดยการเพิ่มเติมอุปกรณ์ฮาร์ดแวร์</p></td></tr></tbody></table>

\\
