EECS 482 Introduction to Operating...
Transcript of EECS 482 Introduction to Operating...
![Page 1: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/1.jpg)
EECS 482Introduction to Operating
Systems
Winter 2018
Harsha V. Madhyastha
![Page 2: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/2.jpg)
Monitors vs. Semaphores● Monitors:
◆ Custom user-defined conditions◆ Developer must control access to variables
● Semaphores:◆ Access to value is thread-safe◆ Only condition is “(value == 0)”
● How to implement custom waiting condition with semaphores?
January 29, 2018 EECS 482 – Lecture 7 2
![Page 3: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/3.jpg)
January 29, 2018 EECS 482 – Lecture 7 3
wait(mutex m) {// create a new semaphoresemaphore s = 0;
// add new semaphore to // waiting listwaiters.insert(&s);
m.up();// go to sleeps.down();m.down();
}
Implementing condition variables with semaphores
signal() {// nothing to do if no waitersif (waiters.empty()) {
return;}
// wake up one of the waiterssemaphore s = waiters.front();s.up();
// remove waiter from queuewaiters.pop();
}
queue waiters = {}; // list of semaphores inserted by waiting threads
Not atomic
![Page 4: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/4.jpg)
Exercise to try …
● Given implementations of mutex and condition variable, how to implement a semaphore?
January 29, 2018 EECS 482 – Lecture 7 4
![Page 5: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/5.jpg)
Interactions between threads● Threads must synchronize access to shared data● High-level synchronization primitives:
◆ Locks◆ Condition variables◆ Monitors◆ Semaphores
● Threads share the same CPU
January 29, 2018 EECS 482 – Lecture 7 5
![Page 6: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/6.jpg)
January 29, 2018 EECS 482 – Lecture 7 6
States of a Thread
New Running
Blocked
Terminated
Create thread
Thread completes execution
Wait on lock, wait, or down
Another thread calls unlock, signal, or up
What if there are more threads than CPUs?
![Page 7: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/7.jpg)
January 29, 2018 EECS 482 – Lecture 7 7
States of a Thread
New Ready
Running
Terminated
Create thread
Thread completes execution
Wait on lock, wait, or down
Another thread calls unlock, signal, or up
Blocked
CPU to spare
Switch CPU to another thread
Why no transition from Ready to Blocked?
![Page 8: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/8.jpg)
Ready threads● What to do with thread while it’s not running?
◆ Essentially, a “paused” execution◆ Must save its private state somewhere
● Thread control block (TCB)◆ Per-thread OS data structure for thread info◆ Store thread “context” when not running
● What context should be stored in TCB?
January 29, 2018 EECS 482 – Lecture 7 8
![Page 9: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/9.jpg)
January 29, 2018 EECS 482 – Lecture 7 9
Process Address Space
Stack (T1)
Code
Static Data
Heap
Stack (T2)
Stack (T3)
Thread 1
Thread 3
Thread 2
PC (T1)
PC (T3)PC (T2)
Data
Segment
![Page 10: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/10.jpg)
Thread context● To save space in TCB
◆ Share code among all threads and store only PC◆ Use multiple stacks and copy only SP◆ Also need to store general-purpose registers
● Keep track of ready threads (e.g., queue of TCBs)
● Now, any thread can be◆ Running on the CPU◆ Ready with TCB on ready queue◆ Blocked with TCB in waiting queue of lock, CV, etc.
January 29, 2018 EECS 482 – Lecture 7 10
![Page 11: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/11.jpg)
Project 2 is out● Implement a thread library
◆ Create threads◆ Switch between threads◆ Manage interactions (locks and CVs)◆ Schedule threads on CPUs
● Due February 17th
◆ Start right away!
● Everyone should now be in a group
January 29, 2018 EECS 482 – Lecture 7 11
![Page 12: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/12.jpg)
Differences compared to P1● Much harder!
● 15% of grade
● Test cases will be graded
● Hand grading to check for good coding practices, efficiency, no duplication of code, etc.
January 29, 2018 EECS 482 – Lecture 7 12
![Page 13: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/13.jpg)
Two Perspectives to Execution
● Thread view:◆ Running à (Paused) à Resume
● CPU view:◆ Thread 1 à Thread 2 à Thread 1
January 29, 2018 EECS 482 – Lecture 7 13
![Page 14: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/14.jpg)
Context switch
1. Current thread returns control to OS2. OS chooses new thread to run3. OS saves current thread state: CPU to TCB4. OS loads context of next thread: TCB to CPU5. OS runs next thread
January 29, 2018 EECS 482 – Lecture 7 14
How does thread return control back to OS?
![Page 15: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/15.jpg)
Returning control to OS● Three types of internal events:
◆ Thread calls wait(), lock(), etc.◆ Thread requests OS to do some work (e.g., I/O)◆ Thread voluntarily gives up CPU with yield()
● Are these enough?
● Also need external events:◆ Interrupts (e.g., timer, I/O)◆ are hardware events that transfer control from
thread to OS interrupt handler
January 29, 2018 EECS 482 – Lecture 7 15
![Page 16: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/16.jpg)
Interrupts● Hardware events (implemented by CPU)● Stop current execution (e.g., thread function)● Start running OS interrupt handler
● OS registers handlers in interrupt vector table● Example: timer interrupt
◆ OS may set timer to go off every 10 ms◆ Guarantees that it will get control back in <= 10 ms
January 29, 2018 EECS 482 – Lecture 7 16
![Page 17: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/17.jpg)
Context switch
1. Current thread returns control to OS2. OS chooses new thread to run3. OS saves current thread state: CPU to TCB4. OS loads context of next thread: TCB to CPU5. OS runs next thread
January 29, 2018 EECS 482 – Lecture 7 17
![Page 18: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/18.jpg)
Choosing next thread to run● 1 ready thread: just run it
◆ What if only thread that exists calls yield?● >1 ready thread: need to make a decision
◆ CPU’s scheduling policy◆ Lots of options: FIFO, priority, round robin, etc.
● What should CPU do if no ready threads?◆ Modern CPUs suspend their execution and resume
on an interrupt◆ interrupt_enable_suspend() in Project 2
January 29, 2018 EECS 482 – Lecture 7 18
![Page 19: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/19.jpg)
Context switch
1. Current thread returns control to OS2. OS chooses new thread to run3. OS saves current thread state: CPU to TCB4. OS loads context of next thread: TCB to CPU5. OS runs next thread
January 29, 2018 EECS 482 – Lecture 7 19
![Page 20: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/20.jpg)
Saving state of current thread● Save registers, PC, stack pointer● Tricky to get right!
◆ Why won’t the following code work?100 save PC101 switch to next thread
● Involves tricky assembly-language code● In Project 2, we’ll use Linux’s swapcontext()
January 29, 2018 EECS 482 – Lecture 7 20
![Page 21: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/21.jpg)
Context switch
1. Current thread returns control to OS2. OS chooses new thread to run3. OS saves current thread state: CPU to TCB4. OS loads context of next thread: TCB to CPU5. OS runs next thread
January 29, 2018 EECS 482 – Lecture 7 21
![Page 22: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/22.jpg)
Load context and run● How to load registers?
● How to load stack?
● How to resume execution?
● Who is carrying out these steps?
● How does thread that gave up control run again?
January 29, 2018 EECS 482 – Lecture 7 22
![Page 23: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/23.jpg)
Example of thread switchingThread 1
print “start thread 1”yield()print “end thread 1”
Thread 2
print “start thread 2”yield()print “end thread 2”
yield()
print “start yield: thread %d”switch to next thread (swapcontext)print “end yield: thread %d”
January 29, 2018 EECS 482 – Lecture 7 23
Thread 1 outputstart thread 1start yield: thread 1
end yield: thread 1end thread 1
Thread 2 output
start thread 2start yield: thread 2
end yield: thread 2end thread 2
![Page 24: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/24.jpg)
Creating a new thread● Create a running thread? Seems challenging
● Instead, create paused thread◆ Key idea: pretend it was running, put on readyq◆ Then just wait for it to be scheduled!
● Implication:◆ Construct TCB as if it were paused at thread start
January 29, 2018 EECS 482 – Lecture 7 24
![Page 25: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/25.jpg)
Recipe for creating a thrad1. Allocate and initialize TCB
◆ Set PC to start of thread function◆ Set general-purpose registers to func parameters
2. Allocate and initialize stack◆ What goes on stack?◆ Set TCB stack pointer to stack top◆ getcontext() and makecontext() in Project 2
3. Add TCB to ready queue
● Note: fork() creates a process, discuss laterJanuary 29, 2018 EECS 482 – Lecture 7 25
![Page 26: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/26.jpg)
How to use new thread● Creating a thread is like an asynchronous
procedure call
January 29, 2018 EECS 482 – Lecture 7 26
parent
call return
parentcreate
child works
parent works
![Page 27: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/27.jpg)
Synchronizing with child
● What if parent wants to work for a while, then wait for child to finish?
January 29, 2018 EECS 482 – Lecture 7 27
parentcreate
child works
parent works parent continues
![Page 28: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/28.jpg)
Synchronizing with childparent()
create child threadprint “parent works”…print “parent continues”…
child()…print “child is done”
January 29, 2018 EECS 482 – Lecture 7 28
Desired outputparent workschild is doneparent continues
OR
child is doneparent worksparent continues
When would this work?
![Page 29: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/29.jpg)
Synchronizing with childparent()
create child threadprint “parent works”…yield()print “parent continues”…
child()…print “child is done”
January 29, 2018 EECS 482 – Lecture 7 29
Desired outputparent workschild is doneparent continues
OR
child is doneparent worksparent continues
Does this work?
![Page 30: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/30.jpg)
Synchronizing with joinparent()
create child threadprint “parent works”…childThread.join()print “parent continues”…
child()…print “child is done”
January 29, 2018 EECS 482 – Lecture 7 30
Desired outputparent workschild is doneparent continues
OR
child is doneparent worksparent continues
How to make dowithout join?
![Page 31: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/31.jpg)
Synchronizing with monitorsparent()
childDone = 0create child threadprint “parent works”lock()while (!childDone)
wait()unlock()print “parent continues”
child()print “child is done”lock()childDone = 1signal()unlock()
January 29, 2018 EECS 482 – Lecture 7 31
Desired outputparent workschild is doneparent continues
OR
child is doneparent worksparent continues
![Page 32: EECS 482 Introduction to Operating Systemsweb.eecs.umich.edu/~harshavm/eecs482/lec2_handouts/lec7_thread… · 29/01/2018 · Thread context To save space in TCB Share code among](https://reader033.fdocuments.net/reader033/viewer/2022050415/5f8b47a20f85804fee353b7e/html5/thumbnails/32.jpg)
Project 2 update● You can now do a substantial part of project 2
◆ Thread create◆ Context switch◆ Thread join
● Next topic: implementing synchronization◆ Need to protect OS data structures (ready queue)◆ Need to block without (much) busy waiting
January 29, 2018 EECS 482 – Lecture 7 32