The document is a presentation on state machines and concurrent process models given by Vishal R. Satpute at VNIT, Nagpur on July 3, 2014. It discusses basic state machine models, finite state machines with data paths, describing systems as state machines, capturing state machines in sequential programming languages, hierarchical concurrent finite state machines and statecharts language, and concurrent process models. The presentation outline lists 11 topics to be covered related to state processes and concurrent process models.
The document is a presentation on state machines and concurrent process models given by Vishal R. Satpute at VNIT, Nagpur on July 3, 2014. It discusses basic state machine models, finite state machines with data paths, describing systems as state machines, capturing state machines in sequential programming languages, hierarchical concurrent finite state machines and statecharts language, and concurrent process models. The presentation outline lists 11 topics to be covered related to state processes and concurrent process models.
The document is a presentation on state machines and concurrent process models given by Vishal R. Satpute at VNIT, Nagpur on July 3, 2014. It discusses basic state machine models, finite state machines with data paths, describing systems as state machines, capturing state machines in sequential programming languages, hierarchical concurrent finite state machines and statecharts language, and concurrent process models. The presentation outline lists 11 topics to be covered related to state processes and concurrent process models.
Session : II Academic Year : 2008 09 Subject Code: 7EC 03 Visvesvaraya National Institute of Technology, Nagpur VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 2 Advanced Microprocessors And Embedded Systems
State Processes and Concurrent Process Models
Vishal R. Satpute Lecturer, Dept. of ECE, VNIT, Nagpur.
e mail: vrsatpute@ece.vnit.ac.in VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 3 Outline.. This session includes. 1. Basic state machine model. 2. Finite state machine model with Data path Model (FSMD) 3. Using state machine a) Describing a System as a State Machine b) Capturing State Machine is Sequential Programming Language 4. HCFSM and the Statecharts language 5. Program-state machine model 6. Concurrent Process Model 7. Concurrent Processes 8. Communication Among Processes 9. Concurrent process model: Implementation 10. Data Flow Model 11. Synchronous Dataflow VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 4 Basic State Machine Model 1 In a Finite State Machine FSM model, we describe system behaviour as a set of possible states.
The system can be only in one state at a given time and jumps to another state depending upon the type of input values.
Finally we describe the actions that occur when in a state or when transitioning between states.
Example for this can be considered as the Elevator Controller of which the state diagram is described in next slide. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 5 Basic State Machine Model 2 The states in this case are taken as: The initial state of the FSM is Idle, other states are Going Up, GoingDn and DoorOpen
Thus in this example we have, Possible states E.g., Idle, GoingUp, GoingDn, DoorOpen Possible transitions from one state to another based on input E.g., req > floor Actions that occur in each state E.g., In the GoingUp state, u,d,o,t = 1,0,0,0 (up = 1, down, open, and timer_start = 0) VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 6 Basic State Machine Model 3 Idle GoingUp req > floor req < floor !(req > floor) !(timer < 10) req < floor DoorOpen GoingDn req > floor u,d,o, t = 1,0,0,0 u,d,o,t = 0,0,1,0 u,d,o,t = 0,1,0,0 u,d,o,t = 0,0,1,1 u is up, d is down, o is open req = = floor !(req<floor) timer < 10 t is timer_start UnitControl process using a state machine VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 7 Formal definition An FSM is a 6-tuple F<S, I, O, F, H, s 0 > S = is a set of all states {s 0 , s 1 , , s l } I = is a set of inputs {i 0 , i 1 , , i m } O = is a set of outputs {o 0 , o 1 , , o n } F = is a next-state function (S x I S) H = is an output function (S O) s 0 = is an initial state Two types of State Machines are possible: Moore-type Associates outputs with states (as given above, H maps S O) Mealy-type Associates outputs with transitions (H maps S x I O) Shorthand notations to simplify descriptions Implicitly assign 0 to all unassigned outputs in a state Implicitly AND every transition condition with clock edge (FSM is synchronous) Tuple: a structure containing multiple parts; a finite sequence of objects VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 8 Finite-state machine with datapath model (FSMD) FSMD extends FSM: complex data types and variables for storing data FSMs use only Boolean data types and operations, no variables
FSMD: 7-tuple <S, I , O, V, F, H, s 0 > S = is a set of states {s 0 , s 1 , , s l } I = is a set of inputs {i 0 , i 1 , , i m } O = is a set of outputs {o 0 , o 1 , , o n } V = is a set of variables {v 0 , v 1 , , v n } F = is a next-state function (S x I x V S) H = is an action function (S O + V) s 0 = is an initial state
I, O, V may represent complex data types (i.e., integers, floating point, etc.)
F, H may include arithmetic operations
H is an action function, not just an output function Describes variable updates as well as outputs
Complete system state now consists of current state, s i , and values of all variables Idle GoingUp req > floor req < floor !(req > floor) !(timer < 10) req < floor DoorOpen GoingDn req > floor u,d,o, t = 1,0,0,0 u,d,o,t = 0,0,1,0 u,d,o,t = 0,1,0,0 u,d,o,t = 0,0,1,1 u is up, d is down, o is open req == floor !(req<floor) timer < 10 t is timer_start We described UnitControl as an FSMD VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 9 Describing a system as a state machine 1. List all possible states 2. Declare all variables (none in this example) 3. For each state, list possible transitions, with conditions, to other states 4. For each state and/or transition, list associated actions 5. For each state, ensure exclusive and complete exiting transition conditions No two exiting conditions can be true at same time Otherwise nondeterministic state machine One condition must be true at any given time Reducing explicit transitions should be avoided when first learning req > floor !(req > floor) u,d,o, t = 1,0,0,0 u,d,o,t = 0,0,1,0 u,d,o,t = 0,1,0,0 u,d,o,t = 0,0,1,1 u is up, d is down, o is open req < floor req > floor req == floor req < floor !(req<floor) !(timer < 10) timer < 10 t is timer_start Idle GoingUp DoorOpen GoingDn VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 10 State machine vs. sequential program model Different thought process used with each model
State machine: Encourages designer to think of all possible states and transitions among states based on all possible input conditions
Sequential program model: Designed to transform data through series of instructions that may be iterated and conditionally executed
State machine description excels in many cases More natural means of computing in those cases Not due to graphical representation (state diagram) Would still have same benefits if textual language used (i.e., state table) Besides, sequential program model could use graphical representation (i.e., flowchart) VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 11 Capturing state machines in sequential programming language Despite benefits of state machine model, most popular development tools use sequential programming language C, C++, Java, Ada, VHDL, Verilog, etc. Development tools are complex and expensive, therefore not easy to adapt or replace Must protect investment Two approaches to capturing state machine model with sequential programming language Front-end tool approach Additional tool installed to support state machine language Graphical and/or textual state machine languages May support graphical simulation Automatically generate code in sequential programming language that is input to main development tool Drawback: must support additional tool (licensing costs, upgrades, training, etc.) Language subset approach Most common approach... VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 12 Language subset approach Follow rules (template) for capturing state machine constructs in equivalent sequential language constructs Used with software (e.g.,C) and hardware languages (e.g.,VHDL) Capturing UnitControl state machine in C Enumerate all states (#define) Declare state variable initialized to initial state (IDLE) Single switch statement branches to current states case Each case has actions up, down, open, timer_start Each case checks transition conditions to determine next state if() {state = ;}
#define IDLE 0 #define GOINGUP 1 #define GOINGDN 2 #define DOOROPEN 3 void UnitControl() { int state = IDLE; while (1) { switch (state) { IDLE: up=0; down=0; open=1; timer_start=0; if (req==floor) {state = IDLE;} if (req > floor) {state = GOINGUP;} if (req < floor) {state = GOINGDN;} break; GOINGUP: up=1; down=0; open=0; timer_start=0; if (req > floor) {state = GOINGUP;} if (!(req>floor)) {state = DOOROPEN;} break; GOINGDN: up=1; down=0; open=0; timer_start=0; if (req < floor) {state = GOINGDN;} if (!(req<floor)) {state = DOOROPEN;} break; DOOROPEN: up=0; down=0; open=1; timer_start=1; if (timer < 10) {state = DOOROPEN;} if (!(timer<10)){state = IDLE;} break; } } } UnitControl state machine in sequential programming language VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 13 General Template Thus on the similar grounds we can have an general template as shown below: #define S0 0 #define S1 1 ... #define SN N void StateMachine() { int state = S0; // or whatever is the initial state. while (1) { switch (state) { S0: // Insert S0s actions here & Insert transitions T i leaving S0: if( T 0 s condition is true ) {state = T 0 s next state; /*actions*/ } if( T 1 s condition is true ) {state = T 1 s next state; /*actions*/ } ... if( T m s condition is true ) {state = T m s next state; /*actions*/ } break; S1: // Insert S1s actions here // Insert transitions T i leaving S1 break; ... SN: // Insert SNs actions here // Insert transitions T i leaving SN break; } } } VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 14 HCFSM and the Statecharts language Hierarchical/concurrent state machine model (HCFSM) Extension to state machine model to support hierarchy and concurrency States can be decomposed into another state machine With hierarchy has identical functionality as Without hierarchy, but has one less transition (z) Known as OR-decomposition States can execute concurrently Known as AND-decomposition Statecharts Graphical language to capture HCFSM timeout: transition with time limit as condition history: remember last substate OR- decomposed state A was in before transitioning to another state B Return to saved substate of A when returning from B instead of initial state Concurrently : At the Same Time A1 z B A2 z x y w Without hierarchy A1 z B A2 x y A w With hierarchy C1 C2 x y C B D1 D2 u v D Concurrency VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 15 Elevator Unit Controller with FireMode FireMode (Special case for urgency) When fire is true, move elevator to 1 st floor and open door Without hierarchy Idle GoingUp req>floor req<floor !(req>floor) timeout(10) req<floor DoorOpen GoingDn req>floor u,d,o = 1,0,0 u,d,o = 0,0,1 u,d,o = 0,1,0 req==floor !(req<floor) fire fire fire fire FireGoingDn floor>1 u,d,o = 0,1,0 u,d,o = 0,0,1 !fire FireDrOpen floor==1 fire u,d,o = 0,0,1 UnitControl w/o hierarchy: Getting messy! With hierarchy Idle GoingUp req>floor req<floor !(req>floor) timeout(10) req<floor DoorOpen GoingDn req>floor u,d,o = 1,0,0 u,d,o = 0,0,1 u,d,o = 0,1,0 req==floor !(req>floor) u,d,o = 0,0,1 NormalMode UnitControl FireGoingDn floor>1 u,d,o = 0,1,0 FireDrOpen floor==1 fire FireMode u,d,o = 0,0,1 fire !fire with hierarchy: Simple! NormalMode FireMode fire !fire UnitControl ElevatorController RequestResolver ... With concurrent RequestResolver VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 16 Program-state machine model (PSM): HCFSM plus sequential program model PSM extends state machine to allow use of sequential program code o define a states action, including extensions for complex data bytes and variables. PSM allows hierarchy and concurrency extensions of HCFSM. Program-states actions can be FSM or sequential program Designer can choose most appropriate Stricter hierarchy than HCFSM used in Statecharts transition between sibling states only, single entry Program-state may complete Reaches end of sequential program code, OR FSM transition to special complete substate PSM has 2 types of transitions Transition-immediately (TI): taken regardless of source program-state Transition-on-completion (TOC): taken only if condition is true AND source program-state is complete SpecCharts: extension of VHDL to capture PSM model SpecC: extension of C to capture PSM model up = down = 0; open = 1; while (1) { while (req == floor); open = 0; if (req > floor) { up = 1;} else {down = 1;} while (req != floor); open = 1; delay(10); } }
NormalMode FireMode up = 0; down = 1; open = 0; while (floor > 1); up = 0; down = 0; open = 1;
fire !fire UnitControl ElevatorController RequestResolver ... req = ... ... int req; NormalMode and FireMode described as sequential programs Black square originating within FireMode indicates !fire is a TOC transition Transition from FireMode to NormalMode only after FireMode completed VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 17 Role of appropriate model and language Finding appropriate model to capture embedded system is an important step Model shapes the way we think of the system Originally thought of sequence of actions, wrote sequential program First wait for requested floor to differ from target floor Then, we close the door Then, we move up or down to the desired floor Then, we open the door Then, we repeat this sequence To create state machine, we thought in terms of states and transitions among states When system must react to changing inputs, state machine might be best model HCFSM described FireMode easily, clearly Language should capture model easily Ideally should have features that directly capture constructs of model FireMode would be very complex in sequential program Checks inserted throughout code Other factors may force choice of different model Structured techniques can be used instead E.g., Template for state machine capture in sequential program language VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 18 Concurrent Process Model 1 This is a new computational model. This model allows us to describe the functionality of a system in terms of two or more concurrently executing subtasks. Many systems are easier to describe as a se of concurrently executing tasks because they are inherently multitasking. Ex: the system allows user to provide two numbers X and Y and depending upon values it concurrently executes two subroutines nd prints Hello World every X seconds and How are you very Y seconds. To describe a system as a set of concurrently executing tasks, we use a language that captures the concurrent process model. An implementation is a mapping of a systems functionality, captured using a computational model or many computational models and written in some language, onto hardware processor. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 19 Concurrent Process Model 2 Describes functionality of system in terms of two or more concurrently executing subtasks Many systems easier to describe with concurrent process model because inherently multitasking E.g., simple example: Read two numbers X and Y Display Hello world. every X seconds Display How are you? every Y seconds More effort would be required with sequential program or state machine model Simple concurrent process example ConcurrentProcessExample() { x = ReadX() y = ReadY() Call concurrently: PrintHelloWorld(x) and PrintHowAreYou(y) } PrintHelloWorld(x) { while( 1 ) { print "Hello world." delay(x); } } PrintHowAreYou(x) { while( 1 ) { print "How are you?" delay(y); } } Subroutine execution over time time ReadX ReadY PrintHelloWorld PrintHowAreYou Sample input and output Enter X: 1 Enter Y: 2 Hello world. (Time = 1 s) Hello world. (Time = 2 s) How are you? (Time = 2 s) Hello world. (Time = 3 s) How are you? (Time = 4 s) Hello world. (Time = 4 s) ... VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 20 Concurrent Process Model 3 State Machine Sequential Program Data Flow Concurrent Processes Pascal C/C++ Java VHDL Implementation A Implementation B Implementation C Distinction between computational models, languages and implementations VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 21 Concurrent Process Model 4 The choice of the programming language is independent of the implementation. A particular language may be used because it captures the computational model used to describe the system. A particular implementation may be used because it meets all power, timing, performance, and cost requirements of the system. Once the final implementation is obtained, a designer can executes the system and observes the behaviour of the system. A final implementation also serves as a blue print or prototype for mass manufacturing of the final product. Distinctions between computational models, languages and implementations are shown in previous slide. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 22 Concurrent Processes 1 We are more familiar with describing a systems desired behaviour using sequential programming language. (e.g. C) A sequential program model consists of a set of statements and its execution consists of executing each statement at one time. However, some systems have behaviour which are consists of several independent behaviours. (e.g. TV set top boxes) A TV set top box has three different behaviours as shown in figure or its behaviour has three different parts mostly as: First part: Receive a digital broadcast from the antenna and decompose into Audio and Video. Second and Third part: Decode the compressed audio and video signals. These subparts are quite independent to each other and hence forms three different behaviours of the system. Trying to describe them in a sequential program model will be much more difficult and cumbersome. Thus it is advisable to opt for the concurrent process model to express this model instead of sequential program model. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 23 Concurrent Processes 2 These three programs are concurrent but they need some data from each other hence these processes can communicate with each other. But in fact these processes share a large data i.e. audio and video. To describe this model the best solution available is Concurrent Process Model as it allows to have independent behaviour with data sharing among processes. In this model, a process is just one sequential program which can executes sequential instructions and can produce some results. In this model, a process can execute concurrently with the other processes in the model and is typically thought of as an infinite loop executing its sequential statements forever. In this model processes can have various states as: States: running, runnable, or blocked. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 24 Concurrent Processes 3 A process is in the running state if it is currently being in execution. A process is in runnable state if it is ready and executable. A process is in blocked state when it is not executable. There are various reasons for a process to be in blocked state which may include.. Waiting for another process to get completed when some data is needed by this process to execute further. Waiting for some hardware device to receive any data packet from that device (e.g. Network devices) Concurrent Process Model define some basic operations of processes which are: Create, Terminate, Suspend, Resume, and join VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 25 Concurrent Processes 4 Process Create and Terminate: Create process creates a new process. Remember in sequential programming language, a procedure if called from a main program stops the main program and execute the procedure and then come back to main program to continue further execution. But is concurrent process model, the creation of a new process by a old process will not cause break to the old process, it may continue its execution. The number of process creation or the authority of process is not fixed. A new created process can also create a new process and this process can also create a new process and this process creation may continue but only the care should be taken that creation of more processes may lead to a complex and bigger system and if any process require some data then this may block other processes. Terminate terminates a process created by a process. It destroys the data created by the process and stops that process execution permanently. A process can terminate another process if it ind any error in the process. If an indefinite loop is not created by a process then the process terminates automatically when its execution is completed. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 26 Concurrent Processes 5 Process Suspend and Resume: Suspend process suspends the execution of a already created process. One process can suspend another process without terminate it and will let that process continue execution after its execution is complete. Resume allows a suspended process to continue its execution after the suspension is over. The process while going into suspension stores all the necessary information and data to use it when it resumes. During resume, the process regains their stored data and necessary information for regaining the original status back. Process Join: Join operation is useful for synchronisation among processes. In join operation, a process is suspended till the time the to be joined process has completed the execution. E.g. Suppose process 1 needs some data from process 2 then till the time process 2 gives data to the process 1, process 1 is suspended because these processes are joined processes. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 27 Communication among Processes 1 When a systems functionality is divided into two or more concurrently executing processes, it is essential to provide means for communication among these processes. Two common methods for communication among processes are: Shared Memory and Message passing In shared memory, multiple processes communicate by reading and writing the same memory location or common variables. This form of communication is very simple and easy to implement. While in message passing, data is exchanged between to processes in an explicit fashion i.e. when a process wants to send data to another process it performs a special operation called as send and likwise the other process performs receive. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 28 Communication among Processes 2 (Shared Memory) Using shared memory processes communicate by reading and writing the same memory location or same variables. This form of communication is very simple and mostly used. Consider an example to illustrate this type of communication Let two processes for communication use shared memory address space. These processes share a N data items called buffer and a variable that holds the number of valid data items in the array called count One process named A produces as part of its computational elements data items which are stored in buffer and consumed by the consume process. This can be example for an LCD display where producer produces the video packets and consumer consumes these video packets. In shared memory method, No time overhead, easy to implement. But, hard to use and mistakes are common. processA() { // Decode packet // Communicate packet to B } } void processB() { // Get packet from A // Display packet } Encoded video packets Decoded video packets To display VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 29 Communication Among Processes 3 (Shared Memory) Example: Producer and consumer with a mistake Share buffer[N], count count = # of valid data items in buffer processA produces data items and stores in buffer If buffer is full, must wait processB consumes data items from buffer If buffer is empty, must wait Error when both processes try to update count concurrently (lines 10 and 19) and the following execution sequence occurs. Say count is 3. A loads count (count = 3) from memory into register R1 (R1 = 3) A increments R1 (R1 = 4) B loads count (count = 3) from memory into register R2 (R2 = 3) B decrements R2 (R2 = 2) A stores R1 back to count in memory (count = 4) B stores R2 back to count in memory (count = 2) count now has incorrect value of 2 01: data_type buffer[N]; 02: int count = 0; 03: void processA() { 04: int i; 05: while( 1 ) { 06: produce(&data); 07: while( count == N );/*loop*/ 08: buffer[i] = data; 09: i = (i + 1) % N; 10: count = count + 1; 11: } 12: } 13: void processB() { 14: int i; 15: while( 1 ) { 16: while( count == 0 );/*loop*/ 17: data = buffer[i]; 18: i = (i + 1) % N; 19: count = count - 1; 20: consume(&data); 21: } 22: } 23: void main() { 24: create_process(processA); 25: create_process(processB); 26: } VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 30 Communication Among Processes 4 (Shared Memory) This problem has arrive because execution of lines 9 and 19 is executed concurrently which should never occur.
This problem can be easily solved by a method called as mutual exclusion.
This section of the program is called as a critical section and which must be executed by only one processor at a given time i.e. access to this critical section must be given to only one processor at a given time.
Thus we must put some primitives which allows us to lock the access of this critical section to other processors when one processor is accessing this critical section.
To achieve this mutual exclusion, a primitive is used called as mutex.
Mutex is a shared object and it allows us to perform two operations i.e. lock and unlock the critical section. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 31 Communication Among Processes 5 (Shared Memory) Mutex is typically associated with a segment of shared data and serves as a guard which disallow multiple read or write operations simultaneously on the critical section.
Two or more processes can lock the critical section simultaneously but only one process can access the critical section.
When one process is allotted the critical section other processes are blocked to access the critical section till the time first process releases the critical section.
This way one can avoid the problem of accessing the critical section simultaneously. VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 32 Communication Among Processes 6 (Shared Memory) The primitive mutex is used to ensure critical sections are executed in mutual exclusion of each other Following the same execution sequence as before: A/B execute lock operation on count_mutex Either A or B will acquire lock Say B acquires it A will be put in blocked state B loads count (count = 3) from memory into register R2 (R2 = 3) B decrements R2 (R2 = 2) B stores R2 back to count in memory (count = 2) B executes unlock operation A is placed in runnable state again A loads count (count = 2) from memory into register R1 (R1 = 2) A increments R1 (R1 = 3) A stores R1 back to count in memory (count = 3) Count now has correct value of 3 01: data_type buffer[N]; 02: int count = 0; 03: mutex count_mutex; 04: void processA() { 05: int i; 06: while( 1 ) { 07: produce(&data); 08: while( count == N );/*loop*/ 09: buffer[i] = data; 10: i = (i + 1) % N; 11: count_mutex.lock(); 12: count = count + 1; 13: count_mutex.unlock(); 14: } 15: } 16: void processB() { 17: int i; 18: while( 1 ) { 19: while( count == 0 );/*loop*/ 20: data = buffer[i]; 21: i = (i + 1) % N; 22: count_mutex.lock(); 23: count = count - 1; 24: count_mutex.unlock(); 25: consume(&data); 26: } 27: } 28: void main() { 29: create_process(processA); 30: create_process(processB); 31: } VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 33 Communication Among Processes 7 (Shared Memory) The problem associated with mutex is deadlock. A deadlock is nothing but a wait condition where two or more processes are blocked waiting for each other two unlock critical section of the code. This deadlock may lead to stuck up of the processes and will halt the embedded systems normal execution. Example code has 2 different critical sections of code that can be accessed simultaneously 2 locks needed (mutex1, mutex2) Following execution sequence produces deadlock A executes lock operation on mutex1 (and acquires it) B executes lock operation on mutex2( and acquires it) A/B both execute in critical sections 1 and 2, respectively A executes lock operation on mutex2 A blocked until B unlocks mutex2 B executes lock operation on mutex1 B blocked until A unlocks mutex1 DEADLOCK! One way to avoid deadlock is to only allow locking of mutexes in increasing order. One deadlock elimination protocol requires locking of numbered mutexes in increasing order and two-phase locking (2PL) Acquire locks in 1 st phase only, release locks in 2 nd phase 01: mutex mutex1, mutex2; 02: void processA() { 03: while( 1 ) { 04: 05: mutex1.lock(); 06: /* critical section 1 */ 07: mutex2.lock(); 08: /* critical section 2 */ 09: mutex2.unlock(); 10: /* critical section 1 */ 11: mutex1.unlock(); 12: } 13: } 14: void processB() { 15: while( 1 ) { 16: 17: mutex2.lock(); 18: /* critical section 2 */ 19: mutex1.lock(); 20: /* critical section 1 */ 21: mutex1.unlock(); 22: /* critical section 2 */ 23: mutex2.unlock(); 24: } 25: }
VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 34 Communication Among Processes 8 (Message Passing) Message passing Data explicitly sent from one process to another Sending process performs special operation, send Receiving process must perform special operation, receive, to receive the data Both operations must explicitly specify which process it is sending to or receiving from Receive is blocking, send may or may not be blocking Safer model, but less flexible void processA() { while( 1 ) { produce(&data) send(B, &data); /* region 1 */ receive(B, &data); consume(&data); } } void processB() { while( 1 ) { receive(A, &data); transform(&data) send(A, &data); /* region 2 */ } } VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 35 Concurrent process model: implementation Can use single and/or general-purpose processors (a) Multiple processors, each executing one process True multitasking (parallel processing) General-purpose processors Use programming language like C and compile to instructions of processor Expensive and in most cases not necessary Custom single-purpose processors More common (b) One general-purpose processor running all processes Most processes dont use 100% of processor time Can share processor time and still achieve necessary execution rates (c) Combination of (a) and (b) Multiple processes run on one general-purpose processor while one or more processes run on own single_purpose processor Process1 Process2 Process3 Process4 Processor A Processor B Processor C Processor D C o m m u n i c a t i o n
B u s
(a) (b) Process1 Process2 Process3 Process4
General Purpose Processor Process1 Process2 Process3 Process4 Processor A
General Purpose Processor C o m m u n i c a t i o n
B u s
(c) VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 36 Dataflow Model Derivative of concurrent process model Nodes represent transformations May execute concurrently Edges represent flow of tokens (data) from one node to another May or may not have token at any given time When all of nodes input edges have at least one token, node may fire When node fires, it consumes input tokens processes transformation and generates output token Nodes may fire simultaneously Several commercial tools support graphical languages for capture of dataflow model Can automatically translate to concurrent process model for implementation Each node becomes a process
modulate convolve transform A B C D Z Nodes with more complex transformations t1 t2 + * A B C D Z Nodes with arithmetic transformations t1 t2 Z = (A + B) * (C - D) VNIT, Nagpur Thursday, July 03, 2014 Vishal R. Satpute 37 Synchronous Dataflow With digital signal-processors (DSPs), data flows at fixed rate Multiple tokens consumed and produced per firing Synchronous dataflow model takes advantage of this Each edge labeled with number of tokens consumed/produced each firing Can statically schedule nodes, so can easily use sequential program model Dont need real-time operating system and its overhead How would you map this model to a sequential programming language? Try it... Algorithms developed for scheduling nodes into single-appearance schedules Only one statement needed to call each nodes associated procedure Allows procedure inlining without code explosion, thus reducing overhead even more modulate convolve transform A B C D Z Synchronous dataflow mt1 ct2 mA mB mC mD tZ tt1 tt2 t1 t2