1. Functions of Real-Time Kernel : ให้บริการฟังก์ชั่นพื้นฐานสำหรับการประมวลผล task จัดการการทำงานของ resource ต่างๆในระบบไม่ว่าจะเป็น MPU Memory และ interrupt และยังให้บริการ system call สำหรับการติดต่อสื่อสารระหว่าง task อีกด้วย
  2. อินเตอร์รัพท์ (Interrupt) : interrupt ถือเป็นฟังก์ชั่นที่สำคัญในระบบ ES เพราะ I/O device นั้นทำงานแยกจาก MPU ทำให้มันยากที่จะคาดคะเนความต้องการในการประมวลผล ดังนั้นการใช้ interrupt จะทำให้ระบบเกิด response ต่อ request ที่เกิดขึนได้รวดเร็ว โดยเราสามารถแบ่งประเภทของ interrupt ได้เป็น Intermal/External โดย internal นั้นคือ interrupt ที่เกิดขึ้นจาก process ภายในของระบบเช่น exception จาก arithmetic error ส่วน external interrupt นั้นจะเกิดจาก source ภายนอกจำพวก input/output device ต่างๆ โดยกระบวนการ interrupt มีดังต่อไปนี้
    1. รับ request จากอุปกรณ์ โดยทุกๆครั้งที่ MPU ทำการ execute ตัว MPU จะทำการเช็คว่ามีการ request interrupt จาก i/o device หรือไม่ ถ้ามีก็จะทำการตรวจสอบว่า ควรจะประมวลผล interrupt หรือไม่ โดยดูจาก permission , level, และinterrupt นั้น maskable หรือไม่ ถ้า non-maskable คือไม่สามารถปฎิเสธได้ หลังจากนั้น interrupt จะถูกำหนดหมายเลข (interrupt number)
    2. ทำการ interrupt โปรแกรมที่กำลังทำงานอยู่ โดยเก็บค่า PC (address ที่จะประมวลผลถัดไป)
    3. ประมวลผล program ที่เกี่ยวข้องกับ interrupt
    4. กลับไปทำงานเดิมโดยเรียกจากค่า PC ที่เก็บไว้

 

Multiple Interrupts คือกระบวนการสำหรับการจัดการ interrupt ที่เกิดขึ้นระหว่างที่มีการประมวลผล interrupt อยู่ โดยการประมวลผลนั้นจะดู priority (level) ของแต่ละ interrupt เป็นหลัก

 

3 . Multiprogramming : กลไกในการจัดการการทำงานของ task ต่างๆในเครื่องโดยการใช้ preemption context switch และ thread โดยอาจจะเรียกได้ว่า Multitasking และ Multithreading

preemption คือการที่ task ถูกinterrupt ด้วยอีก task หนึ่ง

context switching คือการ switch ของ task โดย MPU จะทำการเก็บ task ลงไปใน stack ตาม ลำดับการเกิด preemption ซึ่งหลังการที่ task ล่าสุดทำงานเสร็จ task ที่อยู่ใน stack ก็จะถูกเรียก ออกมาทำงานต่อตามลำดับ

Task Scheduling : เหมือนที่เคยกล่าวไป โดยจะมี Task scheduler คอยจัดการ task scheduling โดยมีวิธีหลักๆคือ event driven(เหมือนที่กล่าวไป), time-sharing จะแบ่ง cpu time ออกมาเท่าๆกันให้แต่ละ task และ round-robin จะมีลักษณะที่คล้ายกับ time-sharing แต่อาจจะมีการเพิ่ม priority เข้าไป โดย task ที่มี prority เท่ากันก็จะ ทำงานอยุ๋ใน level เดียวกันมี cpu time เท่าๆกัน โดยจะทำงานวนไปเรื่อยๆจนกว่า priority สูงสุดจะทำงานเสร็จ จึงลงมาทำ priority ที่ต่ำกว่า

 

  1. Real Time Kernel Processing :
    1. interrupt handler ถูก activate จากการเกิดของ interrupt
    2. interrupt handler เรียก system call
    3. การควบคุมจะกลับมาที่ interrupt handler หลักจากทำ system call แล้ว
    4. ถ้า interrupt handler ไม่ได้ไปเปลี่ยน state ของ task ใดๆ task ที่ถูก interrupt ก็จะทำงานต่อไป
    5. ถ้า state ของ task เปลี่ยนโดย system call task scheduler ก็จะถูกเรียกหลังจากการทำงานของ interrupt handler ไป step 9
    6. เมื่อ task เรียก system call แล้ว state ของ task เปลี่ยนด้วย system call นั้น ไป step 8
    7. ถ้า status ของ tasks ใดๆ ไม่เปลี่ยนแปลงเลย การควบคุมจะกลับไปยังต้นกำเนิดของ system call
    8. ถ้า state ของ task เปลี่ยนเนื่องจาก system call ใน step 6 task scheduler จะถูกเรียก
    9. task scheduler execute task ด้วย priority สูงสุด

 

  1. Task : เป็นหน่วยการประมวลผลของโปรแกรม ในระบบ real-time task จะถูกกำหนดด้วย task number และ priority โดย kernel มอง state ของ task เป็นสถานะของ task โดยในแต่ละ task จะมี TCB (TASK control Block) และเชื่อมต่อกันด้วย Link head โดยเราสามารถแบ่งสถานะของ task ได้ดังต่อไปนี้
    1. dormant เป็นสถานะที่ task ถูกสร้างและรับรู้โดย kernel แล้ว
    2. Ready สถานะที่ task scheduler รับรู้แล้ว ซึ่งพร้อมที่จะประมวลผล แต่ยังมี task ที่มี priority สูงกว่าทำงานอยู่
    3. Running
    4. Wait สถานะที่ task กำลังรอ เช่นอาจจะรอ I/O ทำงาน

      กระบวนการจัดการ task TCB จะเก็บ task number, priority, status, etc. โดยข้อมูลที่สำคัญเมื่อ task ถูก halt จะเก็บไว้ใน stack ของ TCB โดย kernel จะทำการ link TCB ด้วย link head ที่ match กับสถานะของ task เช่น TCB ของ task ที่อยู่ในสถานะ ready ก็จะถูก link เข้าด้วยกันตามลำดับ priority ด้วย link head

  2. Process & Thread : คือส่วนประกอบของ Task โดย process นั้น resource จะถูกจัดการไว้ให้โดย OS process อื่นไม่สามารถเข้ามายุ่งเกี่ยวได้ ส่วน thread นั้น resource ทุกอย่างจะถูก share กัน ทำให้เกิดโอกาสที่ข้อมูลจะเสียหาย จากการใช้ resource ร่วมกัน การทำ context switching ระหว่าง thread นั้นมี overhead น้อยทำให้เหมาะกับ ES ที่ต้องการ performance สูงๆ โดยในแต่ละ process อาจจะมีได้หลาย thread
  3. Memory Management : มีหน้าที่หลักๆ คือ จัดการ MMU และ Memory Pool
    1. MMU เป็น hardware ที่มีหน้าที่จัดการ memory ไม่ว่าจะเป็นการ map หรือ protection ของ memory ก็ตาม และยังทำหน้าที่จัดการ virtual mem สำหรับ application ที่ใช้งาน memory มากกว่า ขนาดของ physical memory ที่มีอยู่ได้ โดยจะเลือกเฉพาะส่วนที่ทำงานโหลดลงไปบน physical memory เท่านั้น
    2. Memory Pool เป็นส่วนที่ kernel ทำการ allocate ไว้แล้วโดยมีขนาดของ block เท่าๆกันหรือไม่เท่ากันก็ได้ แต่ถ้ามีขนาดเท่าๆกันจะสามารถลดปัญหาการเกิด fragmentation ได้ โดยระหว่างที่โปรแกรมทำงานอยู่นั้นอาจจะมีการ allocate memory เพิ่มเติม ซึ่งจะต้องกำหนดขนาดของ memory ที่ต้องการ และคืน memory คืนให้กับ pool เมื่อเลิกใช้งาน ซึ่งถ้ามีการเกิด fragmentation จะต้องมีรการทำ memory compaction ในการรวม memory เข้าด้วยกัน
    3. Transient Area :
    4. Overlay :
    5. Variable :
    6. Swapping :