P2 - Preemptive Scheduling Drew Zagieboylo 2/23/18 P1 Postmortem P1 - Nonpreemptive

P2 - Preemptive Scheduling Drew Zagieboylo 2/23/18 P1 Postmortem P1 - Nonpreemptive

P2 - Preemptive Scheduling Drew Zagieboylo 2/23/18 P1 Postmortem P1 - Nonpreemptive int thread2(int* arg) { yield() • minithread_fork(thread3, NULL); • allow another printf("Thread 2.\n"); thread to run minithread_yield(); • w/o yield() -> single threaded behavior return 0; } P2 - Thread Pre-emption • How? • Interrupts! -> A type of Asynchronous execution • When? • A timer -> uses HW clock • What? • An ISR (interrupt service routine) Interrupt Handling • Description: • API: • Register ISR for • minithread_clock_init(isr) specific interrupt type • set_interrupt_level(level) • Enable/Disable Interrupts • Global Variable: ‘ticks’ • Read Clock Value • Number of clock ticks since OS start Interrupt Handling … proc_1 x //proc_1 … 0xbee0 while (1){ 0xbee4 x = x + 1; pc 0xbee8 mt_yield(); 0xbeec } … Interrupt Handling … proc_1 x //proc_1INTERRUPT! … 0xbee0 while (1){ 0xbee4 x = x + 1; pc 0xbee8 0xbeec } … Interrupt Handling … proc_1 x //proc_1 … clock_handler 0xbee0 while (1){ 0xbee4 x = x + 1; pc 0xbee8 0xbeec } … Interrupt Handling … proc_1 x clock_handler … { ... clock_handler //pick next thread //mt_switch to next thread| //re-enable interrupts } … Interrupt Safety • Critical Section -> some need to be interrupt safe • Don’t forget to re-enable interrupts when done! • When ISR starts: • Interrupts must be disabled • DON’T block (sema_P) while handling interrupts • Semaphore updates must be interrupt-safe Semaphore semaphore_P(sema) { sema->count--; if (count < 0) { queue_append(sema->q, minithread_self()); minithread_stop(); } } These lines must happen atomically -> in Port OS this requires interrupt safety Alarms! • Description: • Asynchronous execution • API: • Execute some function at a • alarm_register(delay, future time func) • Can ‘cancel’ them • alarm_deregister(alarm) • *Interrupt Safety* Alarms! • Every clock tick • Check alarms -> execute any that are due to execute • Must run in O(n), n = number of ready alarms • NOT O(r), r = number of registered alarms • (You may need to modify your queue API) Alarms • You’ll implement ‘minithread_sleep_with_timeout’ as an exercise • Deschedules thread for a fixed amount of time • Should be a very short bit of code :) Scheduling Algorithm • Need a way to pick the next thread to run • (Do this after everything else works) • As of P1 - FIFO Multilevel Feedback Queue Level • High Priority (Low Level Num) …. 0 Quick Tasks -> need low latency • Usually I/O heavy …. 1 • Low Priority (High Level Num) …. 2 Need more CPU time -> needs more throughput …. 3 • computationally heavy Multilevel Feedback Queue Level • High Priority (Low Level Num) …. 0 • Give more CPU time overall • Less CPU time per task …. 1 …. 2 • Low Priority (High Level Num) • Less CPU time overall …. 3 • More CPU time per task Multilevel Feedback Queue Time Allocated Time Allocated Level Per Thread Per Queue 2^0 5t …. 0 2^1 2.5t …. 1 2^2 1.5t …. 2 2^3 t …. 3 Multilevel Feedback Queue Time Allocated Time Allocated Level Per Thread Per Queue 2^0 5t …. 0 Start a new Thread 2^1 2.5t …. 1 2^2 1.5t …. 2 2^3 t …. 3 Multilevel Feedback Queue Time Allocated Time Allocated Level Per Thread Per Queue 2^0 5t …. 0 After 1 tick, thread still executing 2^1 2.5t …. 1 2^2 1.5t …. 2 2^3 t …. 3 Multilevel Feedback Queue Time Allocated Time Allocated Level Per Thread Per Queue 2^0 5t …. 0 Demote thread to LVL 1 2^1 2.5t …. 1 2^2 1.5t …. 2 2^3 t …. 3 Multilevel Feedback Queue Time Allocated Time Allocated Level Per Thread Per Queue 2^0 5t …. 0 Pick another thread from LVL 0 2^1 to run2.5t …. 1 2^2 1.5t …. 2 2^3 t …. 3 Multilevel Feedback Queue Time Allocated Time Allocated Level Per Thread Per Queue 2^0 5t …. 0 Eventually… 2^1 Pick a thread from2.5t LVL 1 Instead …. 1 2^2 1.5t …. 2 2^3 t …. 3.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    23 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us