# Computer OS Architecture

### โครงสร้าง (Structure)&#x20;

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

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FVPC8W9TXBDgHyo7jYAWe%2FComputer%20Hardware.png?alt=media&#x26;token=bf1a9b9e-c056-4eb7-92c1-86c9f117883f" alt=""><figcaption><p><em>โครงสร้างภาพรวมของคอมพิวเตอร์</em></p></figcaption></figure>

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

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2Fw3WJNkqTXh6IAyQUxdgc%2FComputer%20Structure.png?alt=media&#x26;token=3bb4c4bf-e7f3-46af-983f-c6d0aa52f1ce" alt=""><figcaption><p><em>องค์ประกอบภายในหน่วยประมวลผลกลาง</em></p></figcaption></figure>

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FoTVQaUlwoiuW4UP5HQsB%2Fx86%20Architeuctre.png?alt=media&#x26;token=11c98ce5-20d1-4b90-8604-b2f6014a04ed" alt=""><figcaption><p><em>การสื่อสารระหว่างหน่วยประมวลผลและอุปกรณ์</em></p></figcaption></figure>

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

&#x20;          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 คือ คำสั่งเฉพาะที่ใช้ระบบปฏิบัติการ&#x20;
* Appication programs คือ โปรแกรมทั่วไปที่อยูบนระบบปฏิบัติการ

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

#### **BIOS**

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

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

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

#### I/O Interrupts

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FE7Jq9pnq4bUQKWs3nuqJ%2FSync%20and%20Async.png?alt=media&#x26;token=0a80c429-b82b-4cce-a1d8-2dee53e84a61" alt=""><figcaption><p><em>การสื่อสารแบบ Synchronous และ Asynchronous</em></p></figcaption></figure>

**Synchronous I/O**

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

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

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

```armasm
loop : jmp loop
```

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

**Asynchronous I/O**

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

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

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

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

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

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

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

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

&#x20;          ดังนั้นในลักษณะเดียวกันถ้าเราเปรียบโทรศัพท์เหมือนกับอุปกรณ์รอบข้าง ระบบโทรศัพท์จะต้องทำงานอยู่ตลอดเวลาเพื่อคอยรับสัญญาณเรียกแล้วสร้างเสียงกริ่งเตือนออกมา (เปรียบกับการอินเตอร์รัพท์) สาเหตุให้เกิดอิน-เทอร์รัพท์ ตัวอย่างเช่น โปรแกรมทำงานผิดพลาด (เกิดการ 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://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FwoYH5352eYnUtxx7Aqa9%2Fpolling.png?alt=media&#x26;token=30354805-940e-4dfa-9c25-fed81ab782a3" alt=""><figcaption><p><em>แสดงการทำงานระหว่างการโพลลิ่งและการอินเตอร์รัพท์</em></p></figcaption></figure>

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FetIWMyNjiYoOTmTv3mtc%2FPeripherals.png?alt=media&#x26;token=f5d7861e-b2fe-4da1-b0ff-b2c5f7d67939" alt=""><figcaption><p><em>การจัดการการร้องขอจากอุปกรณ์รอบข้าง</em></p></figcaption></figure>

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

&#x20;          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://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2Fp1YjaagZekIj0UkQWuKx%2FProcess.png?alt=media&#x26;token=fb0bea78-6dca-4843-9ffa-299f67fee91f" alt=""><figcaption><p><em>ระยะเวลาการทำงานของอินเทอร์รัพท์</em></p></figcaption></figure>

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

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

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

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

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

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

{% hint style="info" %}
*ตาราง 2-1 เปรียบเทียบระหว่างการอินเตอร์รัพท์และการโพลลิ่ง*
{% 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>

<br>
