DOC PREVIEW
Berkeley COMPSCI 162 - Lecture 5 Cooperating Threads

This preview shows page 1-2-3 out of 8 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

CS162Operating Systems andSystems ProgrammingLecture 5Cooperating ThreadsSeptember 14, 2005Prof. John Kubiatowiczhttp://inst.eecs.berkeley.edu/~cs162Lec 5.29/14/05 Kubiatowicz CS162 ©UCB Fall 2005Review: Per Thread State• Each Thread has a Thread Control Block (TCB)– Execution State: CPU registers, program counter, pointer to stack– Scheduling info: State (more later), priority, CPU time– Accounting Info– Various Pointers (for implementing scheduling queues)– Pointer to enclosing process? (PCB)?– Etc (add stuff as you find a need)• OS Keeps track of TCBs in protected memory– In Arrays, or Linked Lists, or …OtherStateTCB9LinkRegistersOtherStateTCB6LinkRegistersOtherStateTCB16LinkRegistersHeadTailReadyQueueLec 5.39/14/05 Kubiatowicz CS162 ©UCB Fall 2005Review: Yielding through Internal Events• Blocking on I/O– The act of requesting I/O implicitly yields the CPU• Waiting on a “signal” from other thread– Thread asks to wait and thus yields the CPU• Thread executes a yield()– Thread volunteers to give up CPUcomputePI() {while(TRUE) {ComputeNextDigit();yield();}}– Note that yield() must be called by programmer frequently enough!Lec 5.49/14/05 Kubiatowicz CS162 ©UCB Fall 2005Review: Stack for Yielding Thread• How do we run a new thread?run_new_thread() {newThread = PickNewThread();switch(curThread, newThread);ThreadHouseKeeping(); /* Later in lecture */}• How does dispatcher switch to a new thread?– Save anything next thread may trash: PC, regs, stack– Maintain isolation for each threadyieldComputePIStack growthrun_new_threadkernel_yieldTrap to OSswitchLec 5.59/14/05 Kubiatowicz CS162 ©UCB Fall 2005Review: Two Thread Yield Example• Consider the following code blocks:proc A() {B();}proc B() {while(TRUE) {yield();}}• Suppose we have 2 threads:– Threads S and TThread SStack growthAB(while)yieldrun_new_threadswitchThread TAB(while)yieldrun_new_threadswitchLec 5.69/14/05 Kubiatowicz CS162 ©UCB Fall 2005Goals for Today• More on Interrupts• Thread Creation/Destruction• Cooperating ThreadsNote: Some slides and/or pictures in the following areadapted from slides ©2005 Silberschatz, Galvin, and Gagne Lec 5.79/14/05 Kubiatowicz CS162 ©UCB Fall 2005Interrupt Controller• Interrupts invoked with interrupt lines from devices• Interrupt controller chooses interrupt request to honor– Mask enables/disables interrupts– Priority encoder picks highest enabled interrupt – Software Interrupt Set/Cleared by Software– Interrupt identity specified with ID line• CPU can disable all interrupts with internal flag• Non-maskable interrupt line (NMI) can’t be disabledNetworkIntIDInterruptInterrupt MaskControlSoftwareInterruptNMICPUPriority EncoderTimerInt DisableLec 5.89/14/05 Kubiatowicz CS162 ©UCB Fall 2005Example: Network Interrupt• Disable/Enable All Ints ⇒ Internal CPU disable bit– RTI reenables interrupts, returns to user mode• Raise/lower priority: change interrupt mask • Software interrupts can be provided entirely in software at priority switching boundaries…add $r1,$r2,$r3subi $r4,$r1,#4slli $r4,$r4,#2PC savedDisable All IntsSupervisor ModeRestore PCUser ModeRaise priorityReenable All IntsSave registersDispatch to Handler…Transfer Network Packet from hardwareto Kernel Buffers…Restore registersClear current IntDisable All IntsRestore priorityRTI“Interrupt Handler”lw $r2,0($r4)lw $r3,4($r4)add $r2,$r2,$r3sw 8($r4),$r2…External InterruptPipeline FlushLec 5.99/14/05 Kubiatowicz CS162 ©UCB Fall 2005Review: Preemptive Multithreading• Use the timer interrupt to force scheduling decisions• Timer Interrupt routine:TimerInterrupt() {DoPeriodicHouseKeeping();run_new_thread();}• This is often called preemptive multithreading, since threads are prempted for better scheduling– Solves problem of user who doesn’t insert yield();Some Routinerun_new_threadTimerInterruptInterruptswitchStack growthLec 5.109/14/05 Kubiatowicz CS162 ©UCB Fall 2005Review: Lifecycle of a Thread (or Process)• As a thread executes, it changes state:– new: The thread is being created– ready: The thread is waiting to run– running: Instructions are being executed– waiting: Thread waiting for some event to occur– terminated: The thread has finished execution• “Active” threads are represented by their TCBs– TCBs organized into queues based on their stateLec 5.119/14/05 Kubiatowicz CS162 ©UCB Fall 2005ThreadFork(): Create a New Thread• ThreadFork() is a user-level procedure that creates a new thread and places it on ready queue– We called this CreateThread() earlier• Arguments to ThreadFork()– Pointer to application routine (fcnPtr)– Pointer to array of arguments (fcnArgPtr)– Size of stack to allocate• Implementation– Sanity Check arguments– Enter Kernel-mode and Sanity Check arguments again– Allocate new Stack and TCB– Initialize TCB and place on ready list (Runnable).Lec 5.129/14/05 Kubiatowicz CS162 ©UCB Fall 2005How do we initialize TCB and Stack?• Initialize Register fields of TCB– Stack pointer made to point at stack– PC return address ⇒ OS (asm) routine ThreadRoot()– Two arg registers initialized to fcnPtr and fcnArgPtr• Initialize stack data?– No. Important part of stack frame is in registers (ra)– Think of stack frame as just before body of ThreadRoot() really gets startedThreadRoot stubInitial StackStack growthLec 5.139/14/05 Kubiatowicz CS162 ©UCB Fall 2005Administrivia• If you haven’t generated a new key yet (and given a passcode), you mustdo this NOW!– We need the ssh keys to make the group accounts• Sections in this class are mandatory– Make sure that you go to the section that you have been assigned• Should be reading Nachos code by now!– You should know enough to start working on the first project– Set up regular meeting times with your group– Let’s try to get group interaction problems figured out earlyLec 5.149/14/05 Kubiatowicz CS162 ©UCB Fall 2005How does Thread get started?• Eventually, run_new_thread() will select this TCB and return into beginning of ThreadRoot()– This really starts the new threadStack growthAB(while)yieldrun_new_threadswitchThreadRootOther ThreadThreadRoot stubNew ThreadLec 5.159/14/05 Kubiatowicz CS162 ©UCB Fall 2005What does ThreadRoot() look like?• ThreadRoot() is the root for the thread routine:ThreadRoot() {DoStartupHousekeeping();UserModeSwitch(); /* enter user mode */Call


View Full Document

Berkeley COMPSCI 162 - Lecture 5 Cooperating Threads

Documents in this Course
Lecture 1

Lecture 1

12 pages

Nachos

Nachos

41 pages

Security

Security

39 pages

Load more
Download Lecture 5 Cooperating Threads
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Lecture 5 Cooperating Threads and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Lecture 5 Cooperating Threads 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?