1 / 52

Interrupts

Interrupts. oslecture02. Interrupts. CPU มี interrupts pin สำหรับรับสัญญาณขัดจังหวะ ( interrupt signals ) จาก ฮาร์ดแวร์ โดยเมื่อมีอินเตอร์รัพท์เกิดขึ้นมาจากฮาร์ดแวร์ เข็มที่ซี พียูจะทำการเปลี่ยนค่า และบอกซีพียูว่ามีสัญญาณอินเตอร์รัพท์เกิดขึ้น ดังรูป. Interrupts (ต่อ).

Download Presentation

Interrupts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Interrupts oslecture02

  2. Interrupts • CPU มี interrupts pin สำหรับรับสัญญาณขัดจังหวะ ( interrupt signals ) จากฮาร์ดแวร์โดยเมื่อมีอินเตอร์รัพท์เกิดขึ้นมาจากฮาร์ดแวร์ เข็มที่ซีพียูจะทำการเปลี่ยนค่า และบอกซีพียูว่ามีสัญญาณอินเตอร์รัพท์เกิดขึ้นดังรูป

  3. Interrupts (ต่อ)

  4. สาเหตุของการเกิดอินเตอร์รัพท์สาเหตุของการเกิดอินเตอร์รัพท์ • ดิสก์ทำงาน สมบูรณ์ • เมื่อกดคีย์บอร์ด • เคลื่อนย้ายหรือคลิกเมาส์ • การเปลี่ยนแปลงเวลาของนาฬิกา • การดำเนินการกับเครือข่าย • ฯลฯ

  5. The IVT oslecture02

  6. The IVT • ซีพียูจะมี interrupts pin เพียง 1 ขา แต่ในคอมพิวเตอร์นั้นมีสัญญาณอินเตอร์รัพท์จำนวนมาก • คอมพิวเตอร์จะรู้ได้อย่างว่ามีการเกิดอินเตอร์รัพท์ ?

  7. The IVT(ต่อ) • คอมพิวเตอร์จะถาม PIC เนื่องจากอุปกรณ์ที่ส่งสัญญาณทุกตัวจะเชื่อมต่อกับ PIC โดยแต่ละตัวจะมีรีจิสเตอร์เพื่อใช้ตรวจสอบหาอุปกรณ์ตัวที่ส่งสัญญาณ และ PIC จะเชื่อมต่อกับขาซีพียูอีกทีหนึ่ง เมื่อซีพียูได้รับสัญญาณอินเตอร์รัพท์มันจะถาม PIC ว่า อุปกรณ์ตัวใดส่งสัญญาณอินเตอร์รัพท์เข้ามา ดังรูป

  8. The IVT(ต่อ)

  9. Running the ISR oslecture02

  10. Running the ISR • สามารถรู้ได้อย่างไรว่าซีพียูหยุดการทำงาน ? • สามารถรู้ได้อย่างไรว่าซีพียูใช้อินเตอร์รัพท์ และจากนั้นก็ทำงานต่อจากเดิม?

  11. Running the ISR (ต่อ) • เมื่อมีสัญญาณอินเตอร์รัพท์ ซีพียูจะทำการจดจำการทำงานครั้งสุดท้าย และเก็บใส่สแต็คไว้ หลังจากนั้นจะใช้หมายเลขอินเตอร์รัพท์จาก PIC เป็นตัวชี้ไปยัง IVT เพื่อที่จะโหลด ซีพียู IP กับตำแหน่ง ISR สำหรับการอินเตอร์รัพท์

  12. Running the ISR (2) • ในกรณีที่มีการกดคีย์ ในตัวอย่างนี้จะแสดงถึงสาเหตุที่ได้รับจากการอินเตอร์รัพท์จากแหล่งกำเนิด 1 และจะเก็บค่า 1 ในอินเตอร์รัพท์รีจิสเตอร์และ บอกซีพียูว่ามีสัญญาณอินเตอร์รัพท์เข้ามา ซีพียูจะรับสัญญาณ และเก็บงานที่กำลังทำอยู่ในปัจจุบันลงในสแตก หลังจากนั้นมันจะรับค่าจากรีจิสเตอร์ที่อยู่ใน PIC (หมายเลข 1) และไปยัง IVT และรับแอดเดรสในช่องที่1 แล้วใส่ลงในรีจิสเตอร์ IP และISR สำหรับคีย์บอร์ดนั้นจะถูกเก็บอยู่ใน IVT ช่องที่ 1

  13. Return to original program • ทำอย่างไรให้สามารถกลับไปยังโปรแกรมเดิม เมื่อ ISR เสร็จสิ้นการดำเนินการอินเตอร์รัพท์ ? • เมื่อรูทีนย่อยทำงานเสร็จแล้ว แทนที่จะใช้ RET แต่ ISRจะใช้ IRET เพื่อส่งค่ากลับ มันจะให้ซีพียูดึงค่าจากสแตกออกมาใช้ ในขณะนี้ซีพียูจะมีค่าทั้งหมดจากโปรแกรมเดิมก่อนที่จะถูกอินเตอร์รัพท์ โดยที่โปรแกรมเดิมจะไม่รู้เลยว่ามันถูกขัดจังหวะ

  14. Vocabulary • ISR – interrupt service routine • IVT– interrupt vector table • IRET– interrupt return • RET– return (from normal subroutine) • PIC– programmable interrupt controller • IP– instruction pointer • CPU– central processing unit • RAM – random access memory

  15. Summary of processing an interrupt (1) • ฮาร์ดแวร์ส่งสัญญาณไปยัง PIC  • PIC ส่ง ID ของแหล่งสัญญาณอินเตอร์รัพท์ไปยัง รีจิสเตอร์ • PIC ส่งัญญาณไปยังซีพียูCPU ว่าเกิดสัญญาณอินเตอร์รัพท์ • CPU หยุดการทำงานของโปรแกรมปัจจุบัน

  16. Summary of processing an interrupt (1) • CPU เก็บสถานะการทำงานปัจจุบันลงในสแตก • CPU เรียก ID ของตัวที่ส่งสัญญาณอินเตอร์รัพท์ (จำนวน IRQ) จาก PICจาก PIC  • CPU จะคำนวณ IP = IVT [IRQ]

  17. Summary of processing an interrupt (2) • ISR จะทำการรันและ ทำงานตามอินเตอร์รัพท์ • ISR ส่งข้อมูลออกทาง IRET • CPU ดึงข้อมูลออกมาจากสแตค • โปรแกรมเดิมจะดำเนินการต่อไป โดยที่โปรแกรมไม่รู้เลยว่าถูกขัดจังหวะการทำงาน

  18. Dual-Mode Operation oslecture02

  19. Dual-Mode Operation • ในซีพียูจะสนับสนุนการประมวลผลแบบหลายโหมด อย่างน้อยที่สุด 2 โหมด เพื่อสนับสนุนการทำงานอย่างมีประสิทธิภาพของระบบปฏิบัติการ คือ privileged mode กับ user mode โดยที่ระบบปฏิบัติการจะรันใน privileged mode ซึ่งเป็นโหมดที่ไม่จำกัด และจะรันทุกคำสั่ง • ส่วนโปรแกรมประยุกต์จะรันใน user mode ซึ่งจะไม่อนุญาตให้เปลี่ยนแปลงตารางเพจ ไม่ให้ทำงานกับ I/O โดยตรง, หรือเปลี่ยนโหมดการทำงาน และคำสั่งพิเศษอื่นๆ

  20. Dual-Mode Operation(ต่อ) • เมื่อมีการส่งสัญญาณอินเตอร์รัพจากฮาร์ดแวร์ เครื่องจะเข้าสู่การทำงานแบบ privileged mode โดยอัตโนมัติ • เมื่อ ISR ทำงานเสร็จ มันจะส่งค่าไปให้ ซีพียู แล้วกลับเข้าสู่ user mode ถ้าเราใช้คำสั่งพิเศษใน user mode มันจะเกิดการขัดจังหวะ ซึ่งมันจะส่งค่าที่ใช้ควบคุมไปให้ระบบปฏิบัติการ และระบบปฏิบัติการจะทำการทำลายโปรแกรมที่รันอยู่

  21. Software Interrupts oslecture02

  22. Software Interrupts • การเพิ่มขึ้นของฮาร์ดแวร์อินเตอร์รัพท์ ทำให้ซีพียูสมัยใหม่นั้นสนับสนุนอินเตอร์รัพท์ของซอร์ฟแวร์ด้วย การทำงานของซอร์ฟแวร์อินเตอร์รัพท์นั้น เกือบจะเหมือนกันการทำงานของ ฮาร์ดแวร์อินเตอร์รัพท์ แต่แทนที่จะมีขาที่ใช้รับสัญญาณอินเตอร์รัพท์ และดึงข้อมูลจาก PIC คำสั่งในการดำเนินการซึ่งประกอบด้วยหมายเลขอินเตอร์รัพท์ ตัวอย่างที่จะกล่าวถึงคืออินเตอร์รัพท์ 21 ซึ่งเป็นการติดต่อกับ system call ของ MS-DOS

  23. Software Interrupts(ต่อ) • ซอร์ฟแวร์อินเตอร์รัพท์บางครั้งถูกเรียกว่า traps ในระบบปฎิบัติการมีการเตรียมเครื่องมือให้ system call เพื่อสร้างอินเตอร์รัพท์ โดย system call มีตัวอย่างเช่น open(), read(), write(), close(), seek(), ioctl(), kill(), fork(), ฯลฯ โปรแกรมประยุกต์นั้นโดยปกติแล้วจะเรียกใช้บางอย่างเช่น c library, และที่จริงแล้วมันจะไปเรียก system call เพื่อสร้าง อินเตอร์รัพท์

  24. CPU Hogs • โดยปกติระบบปฏิบัติการจะรันโปรแกรมผู้ใช้จนกว่าจะเกิดฮาร์ดแวร์หรือซอร์ฟแวร์อินเตอร์รัพท์ จากนั้นมันจะทำการสลับโปรแกรมอื่นขึ้นมารัน หรือเรียกว่า context switch ปัญหาหนึ่งที่เกิดขึ้นเมื่อกำลังทำการคำนวณอยู่ และไม่สามารถใช้ system call ได้ ถ้าไม่เกิดฮาร์ดแวร์อินเตอร์รัพท์ จะไม่มีโปรแกรมใดเลยที่สามารถรันบนซีพียูได้ ระบบปฏิบัติการแก้ไข้ปัญหานี้โดยใช้เวลาของระบบ

  25. CPU Hogs(ต่อ) • เมนบอร์ดจะมีชิปควบคุมการทำงานของเวลา และจะส่งอินเตอร์รัพท์หลายครั้งในหนึ่งวินาที ระบบปฏิบัติการจะเพิ่ม ISR ซึ่งทำหน้าที่รับอินเตอร์รัพท์, และจะมีการนับเวลาถอยหลังสำหรับการรันโปรแกรมปัจจุบัน แต่ละครั้งที่ ISR เรียกใช้ตัวจับเวลา เวลาจะค่อยๆลดลง และเมื่อถึง 0 ระบบปฏิบัติการจะสลับโปรแกรมอื่นขึ้นมาทำงาน และตั้งค่าตัวนับเวลาใหม่ วิธีนี้จะแน่ใจได้ว่า CPU สามารถแบ่งเวลาทำงานโปรแกรมทั้งหมด และไม่ถูกแย่งใช้โดยโปรแกรมเดียว

  26. Processes • โปรเซสคือโปรแกรมที่กำลังรัน โดยที่มันจะใช้โค้ด สถานะซีพียู, ตารางเพจ, การเปิดไฟล์ เป็นต้น ข้อมูลทั้งหมดนี้จะถูกจัดการโดยระบบปฏิบัติการ แต่ละโปรแกรมที่กำลังรันอยู่คือโปรเซส และบางครั้งจะมีโปรเซสพิเศษ ซึ่งทำงานให้กับระบบปฏิบัติการ โดยแต่ละโปรเซสจะมีพื้นที่สำหรับบันทึกการทำงาน เรียกว่า Process Control Block(PCB)

  27. Context Switch oslecture02

  28. Context Switch • context switch คือชื่อของกระบวนการ ซึ่งซีพียูใช้อินเตอร์รัพท์ในการสลับโปรเซสที่กำลังรันอยู่ มันจะทำงานโดยการเปลี่ยนสถานะซีพียู แล้วทำการบันทึกค่าที่ซีพียูกำลังทำอยู่ในปัจจุบันลงในสแตกสำหรับ context switch นั้น ISR จะทำการคัดลอกข้อมูลเข้าสู่พื้นที่พิเศษที่เรียกว่า PCB หลังจากนั้นมันจะเรียกโปรแกรมอื่นขึ้นมาทำงาน ซึ่งพร้อมสำหรับการรันและคัดลอกข้อมูลลง PCB

  29. Context Switch(ต่อ) • จากนั้นจะเก็บในสแตค และเปลี่ยนสถานะซีพียู ซึ่งวิธีการนี้จะทำเมื่อได้รับค่า IRET และเครื่องเปลี่ยนไปเป็น user mode และเพิ่มลงในสถานะซีพียูในกรณีที่ต่างกัน ระบบปฎิบัติการจะสามารถเปลี่ยนได้อย่างไร ว่าจะให้โปรแกรมใดมารันต่อ? โดยที่การสลับโปรเซสนั้นสามารถทำได้ตลอด เมื่อตัวจับเวลาเป็น 0 หรือเมื่อโปรเซสไม่สามารถดึงข้อมูลจาก I/O ได้

  30. โปรเซส1 กำลังทำงานอยู่ในขณะนี้

  31. มีการเกิดอินเตอร์รัพท์ บันทึกค่าสถานะของซีพียูลง สแตก

  32. ISR คัดลอกสถานะของซีพียูเก็บใน โปรเซสที่ 1 ของ PCB

  33. Scheduler chooses new process • ตารางซีพียูจะมองหาโปรเซส ซึ่งพร้อมสำหรับการรัน เพื่อที่จะเลือกมารัน ในตัวอย่างที่กล่าวมา ระบบปฏิบัติการจะตัดสินใจเลือกรันโปรเซส 2 ISR จะคัดลอกข้อมูลของ โปรเซส2 จาก PCB เข้ามา ในสแตกและทำงานแทน โปรเซส 1

  34. เมื่อ ISR ส่งค่า IRET ออกมา ซีพียูจะดึงค่าสถานะซีพียูที่เก็บไว้ในสแตค และจะรันโปรเซส2 ถ้ามันไม่หยุดการทำงาน

  35. Process Scheduling • เมื่อ system call หยุดการทำงานของ I/O หรือหมดเวลาการทำงาน ระบบปฏิบัติการจะทำการสลับการทำงานเพื่อเรียกโปรเซสอื่นมารัน มันจะรู้ได้อย่างไรว่าจะเลือกโปรเซสไหนขึ้นมารัน? ซึ่งมีหลายวิธีในการทำงานและแนวคิดที่จะเลือกโปรเซสใหม่ขึ้นมาทำงาน เรียกว่า ตารางโปรเซส ซึ่งการเลือกโปรเซสนี้มีความซับซ้อนมากบนเมนเฟรม แต่ระบบปฏิบัติการส่วนใหญ่จะใช้ FIFO

  36. Concepts • Hardware Interrupt & PIC • Software Interrupt • Process & PCB • Context switch • System call • Dual-mode operation • CPU state

  37. Process States oslecture02

  38. Process States • โปรเซสจะมี 1 ฟิลด์ใน PCB ที่เรียกว่า สถานะโปรเซส ซึ่งจะชี้ให้เห็นว่าโปรเซสกำลังทำอะไรในขณะนี้ สถานะที่เป็นไปได้ คือ • Running – ขณะนี้โปรเซสกำลังรันบนซีพียู • Blocked for I/O – โปรเซสต้องการเรียกใช้ I/O และโปรเซสกำลังทำงานกับ I/O • Ready to run – ตอนนี้เป็นตอนที่โปรเซสไม่ได้รัน แต่พร้อมที่จะรัน

  39. Process State Diagram

  40. Process State Diagram(ต่อ) • ในแผนภาพแสดงให้เห็นกลุ่มของโปรเซส ซึ่งไม่ใช่แค่หนึ่งโปรเซส ถ้าคุณมีซีพียูที่มีหลายหน่วยประมวลผล มันก็จะสามารถรันได้มากกว่าหนึ่งโปรเซสในเวลาเดียวกัน ถ้าคุณมีมากกว่าหนึ่งโปรเซสที่รอดึงข้อมูลจาก I/O มันจะทำการบล็อกการทำงานของโปรเซส ท้ายที่สุด ถ้าหลายโปรเซสที่รอการประมวลผลจากซีพียู มันจะกำหนดสถานะโปรเซสให้มีสถานะเป็น ready คือพร้อมที่จะรัน ในระบบส่วนใหญ่ในปัจจุบัน โปรเซสที่พร้อมสำหรับการรัน จะถูกเก็บในโครงสร้างแบบคิวที่มีหลายระดับ

  41. Priority queues oslecture02

  42. Priority queues • สำหรับตัวอย่างนี้เราจะแสดงให้เห็น 3 ระดับความสำคัญโดยมี ระดับสูง ระดับปานกลาง และระดับต่ำ โดยแต่ละระดับความสำคัญจะมีแถวของข้อมูล โดยใช้หลักการของ FIFO โดยเมื่อถ้าระบบต้องการจะเลือกโปรเซสใหม่ขึ้นมารันนั้น มันจะเลือกโปรเซสแรกที่อยู่ในระดับความสำคัญสูง แต่ถ้าคิวนั้นว่าง ก็จะเลือกระดับความสำคัญปานกลาง

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

  44. Priority queues(ต่อ) • เมื่อโปรเซสที่มีระดับความสำคัญปานกลางไม่ได้ใช้ซีพียูแล้ว ซึ่งโปรเซสระดับต่ำเหล่านี้จะใช้เวลาที่เหลือของซีพียู ถ้างานที่มีระดับความสำคัญระดับสูงก็จะถูกเลือกมาประมวลผลก่อน ซึ่งสามารถลดการทำงานของงานที่มีระดับความสำคัญปานกลางของซีพียู

  45. Priority queues(ต่อ) • การจัดกลุ่มของโปรเซส I/O จะทำให้สามารถจัดกลุ่มคิวได้ โดยปกติจะมี 1 คิวต่อหนึ่งอุปกรณ์ จะมีคิวที่ใช้ทั่วไปอยู่ 1คิว แต่มันไม่ได้ถูกใช้ตั้งแต่เราสามารถทำฮาร์ดดิสก์แบบคู่ขนาน เนื่องจากเวอร์ชั่นก่อนๆของ MS-Windows ยังไม่สามารถทำงานแบบคู่ขนานได้ แต่ในปัจจุบัน ระบบปฏิบัติการสมัยใหม่นั้นสามารถทำงานแบบคู่ขนานได้ ซึ่งในเครื่องเมนเฟรมนั้นจัดระดับความสำคัญของอุปกรณ์ I/O ไว้ดีมากซึ่งเก็บไว้ใน ready queue, แต่ว่าเครื่องทั่วๆไปนั้นไม่จำเป็นต้องมี

  46. Logical view of a process • ในโปรเซสจะมีมุมมองทางตรรกะ และมุมมองทางกายภาพ ในมุมมองทางตรรกะนั้นโดยปกติจะแสดงให้เห็นบางอย่างเช่น ภาพที่อยู่ทางด้านล่าง โดยมี code segment, data segment, stack segment และ heap segment ซึ่งเซกเมนต์เหล่านี้จำเป็นต่อการรันโปรแกรม ซึ่งอยู่ใน PCB

  47. Logical view of a process (ต่อ) • The code segment (CS) เก็บ รหัสเลขฐานสอง สำหรับเครื่อง เพื่อให้ซีพียูใช้ในการเอ็คซิคิวซ์โปรเซส • The data segment (DS) เก็บตัวแปรทั่วๆไป สำหรับโปรเซส เพื่อใช้สถิติคำนวณพื้นที่ต่างๆ • The stack segment (SS) เก็บ สแต็ค เพื่อให้ซีพียูใช้ในขณะรันโปรแกรม และนอกจากนี้ยังใช้เก็บตัวแปรหลักที่ใช้ส่งค่า เก็บตำแหน่งของโปรแกรมย่อย ฯลฯ

  48. Logical view of a process (ต่อ) • Heap segment (HS) จะเก็บพื้นที่หน่วยความจำที่จะถูกใช้โดยโปรเซส • Process control block (PCB) คือโครงสร้างข้อมูลของระบบปฏิบัติการ และจะไม่เหมือนกับ 4 เซกเมนต์ก่อนหน้านี้ คือมันจะไม่จองพื้นที่หน่วยความจำของโปรเซส บางครั้งPCB นั้นใช้ใน linked list ที่อยู่ใน เคอร์เนล ของระบบปฏิบัติการ แต่นั่นเป็นแค่รายละเอียด • ในซีพียูรุ่นเก่าๆ มีการแบ่งพื้นที่สำหรับเซกเมนต์ แต่ในระบบใหม่จะใช้หน่วยความจำภายนอก โดยแต่ละเซกเมนต์จะแยกกันอยู่ แต่อาจจะมี base address เดียวกัน

  49. Old-style segmentation • ซีพียูสมัยก่อนนั้นใช้การแบ่งออกเป็นส่วนๆ และยังมีข้อจำกัดในเรื่องของการจัดการหน่วยความจำ เครื่อง 808x นั้นมีหน่วยความจำขนาด 1MB แต่หลังจากคุณลบออกด้วย BIOS, การ์ดจอ IVT ฯลฯ คุณจะมีหน่วยความจำเพียง 640 KB อย่างไรตาม ในชิปหนึ่งตัวจะใช้หน่วยความจำแค่ 64KB เพื่อเก็บตำแหน่ง ซึ่งจะต้องเหลือหน่วยความจำไว้ให้ segment register อีก 64 KB หลังจากนั้นเราก็จะใช้ ตำแหน่งในรีจิสเตอร์ เพื่อหาข้อมูลใน

  50. Old-style segmentation(ต่อ) • การใช้ระบบ memory segment นั้นจะต้องใช้คู่กันระหว่าง segment กับ offset โดยที่ segment จะบอกว่ามีจำนวน segment เท่าไหร่ที่อยู่ในหน่วยความจำ และ offset จะบอกว่าตำแหน่งที่เราต้องการนั้นอยู่ตรงส่วนใดของใน segment นั้น ให้คุณคิดเหมือนกับว่ามันเป็น array 2มิติ

More Related