Real Time Systems

45
1 Real Time Systems Part 1

description

Real Time Systems. Part 1. Fadi’s HW 11 Solution. line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void); // in uni.c 4 unsigned char mbtn() //16 or 17 bytes - PowerPoint PPT Presentation

Transcript of Real Time Systems

Page 1: Real Time Systems

1

Real Time Systems

Part 1

Page 2: Real Time Systems

2

Fadi’s HW 11 Solutionline level source 1 #pragma CODE 2 #include <c8051f020.h> // SFR declarations 3 extern unsigned char rd_buttons(void); // in uni.c 4 unsigned char mbtn() //16 or 17 bytes 5 { 6 1 static unsigned char last_button=1; 7 1 unsigned char prev_button; 8 1 9 1 prev_button = rd_buttons(); 10 1 11 1 if(8%prev_button==0) 12 1 last_button = prev_button; 13 1 14 1 15 1 return(last_button); 16 1 } 17 18 //if(!last_button) 19 //last_button += 1; // if not static 23...

Page 3: Real Time Systems

3

0000 120000 E LCALL rd_buttons;---- Variable 'prev_button' assigned to Register 'R7' ---- ; SOURCE LINE # 110003 7408 MOV A,#08H0005 8FF0 MOV B,R70007 84 DIV AB0008 E5F0 MOV A,B000A 7002 JNZ ?C0001 ; SOURCE LINE # 12000C 8F00 R MOV last_button,R7000E ?C0001: ; SOURCE LINE # 15000E AF00 R MOV R7,last_button ; SOURCE LINE # 160010 ?C0002:0010 22 RET

Page 4: Real Time Systems

4

Real time systems differ from conventional systems in:

• Dominant role of timing constraints.

• Concurrency

• Significance of reliability and fault tolerance

Page 5: Real Time Systems

5

Timing constraints• Real time systems must not only provide correct answers, but

must provide it on time.• Hard and soft real time systems

– Hard real time systems are those that, without exception, must meet their timing constraints – if a constraint is violated the system fails.

– Soft real time systems can be considered successful even if some constraints are missed. i.e. The telephone system.

• Real time software must satisfy timing assertions that involve relations over relative and absolute times. The most common and simplest such assertion is a deadline – a limit on the absolute or relative time when a computation must complete.

• Most timing constraints are deterministic.

Page 6: Real Time Systems

6

Concurrency• Computer systems use concurrency to improve

performance, for example, by employing parallel processors.

• Concurrency can also be used to model parallel activities, even though they may be implement by interleaving the activities on a single processor.

• Real time systems must deal with the concurrency of the real world.

• Combining concurrency and time constraints is especially difficult.

Page 7: Real Time Systems

7

Reliability and fault tolerance • Reliability is a measure of how often a system

fails.– No system is perfectly reliable.– Failures will occur.

• Fault tolerance is concerned with the recognition and handling of failures.

• Systems or parts of systems can be classified according to critically.– Critically is a measurement of the failure cost.

Page 8: Real Time Systems

8

Concurrent processes• Concurrency is typically implemented by using processes.

• Each processes is a separate program executing sequential statements.

• Each process appears to execute concurrently with other processes.

• Recall how processes work in VHDL.

Page 9: Real Time Systems

9

Concurrent processes• Consider two examples

having separate tasks running independently but sharing data

• Difficult to write system using sequential program model

• Concurrent process model easier– Separate sequential programs

(processes) for each task– Programs communicate with

each other

Heartbeat Monitoring System

B[1

..4]

Hea

rt-b

eat

puls

e

Task 1:Read pulseIf pulse < Lo then Activate SirenIf pulse > Hi then Activate SirenSleep 1 secondRepeat

Task 2:If B1/B2 pressed then Lo = Lo +/– 1If B3/B4 pressed then Hi = Hi +/– 1Sleep 500 msRepeat

Set-top Box

Inpu

t Si

gnal

Task 1:Read SignalSeparate Audio/VideoSend Audio to Task 2Send Video to Task 3Repeat

Task 2:Wait on Task 1Decode/output AudioRepeat

Task 3:Wait on Task 1Decode/output VideoRepeat

Vid

eo

Aud

io

Page 10: Real Time Systems

10

Process• A sequential program, typically an infinite loop

– Executes concurrently with other processes

• Basic operations on processes– Create and terminate

• Create is like a procedure call but caller doesn’t wait– Created process can itself create new processes

• Terminate kills a process, destroying all data– Suspend and resume

• Suspend puts a process on hold, saving state for later execution• Resume starts the process again where it left off

– Join• A process suspends until a particular child process finishes execution

Page 11: Real Time Systems

11

Page 12: Real Time Systems

12

Communication among processes• Processes need to communicate data and signals

to solve their computation problem– Processes that don’t communicate are just independent

programs solving separate problems

• Basic example: producer/consumer– Process A produces data items, Process B consumes

them– E.g., A decodes video packets, B display decoded

packets on a screen

• How do we achieve this communication?– Two basic methods

• Shared memory• Message passing

processA() { // Decode packet // Communicate packet to B }}

void processB() { // Get packet from A // Display packet}

Encoded video packets

Decoded video packets

To display

Page 13: Real Time Systems

13

Shared Memory

• Processes read and write shared variables– No time overhead, easy to implement

– But, hard to use – mistakes are common

Page 14: Real Time Systems

14

Shared Memory continued

• Example: Producer/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

Page 15: Real Time Systems

15

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: }

Shared Memory continued

Page 16: Real Time Systems

16

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: }

Shared Memory continued

Page 17: Real Time Systems

17

– 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

Shared Memory continued

Page 18: Real Time Systems

18

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 */ }}

Page 19: Real Time Systems

19

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 */ }}

Page 20: Real Time Systems

20

Back to Shared Memory: Mutual Exclusion

• Certain sections of code should not be performed concurrently– Critical section

• Possibly noncontiguous section of code where simultaneous updates, by multiple processes to a shared memory location, can occur

• When a process enters the critical section, all other processes must be locked out until it leaves the critical section– Can be accomplished using MUTEX primative

Page 21: Real Time Systems

21

Correct Shared Memory Solution to the Consumer-Producer Problem

• The primitive mutex is used to ensure critical sections are executed in mutual exclusion of each other

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: }

Page 22: Real Time Systems

22

•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

Page 23: Real Time Systems

23

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: }

Page 24: Real Time Systems

24

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: }

Page 25: Real Time Systems

25

Page 26: Real Time Systems

26

Page 27: Real Time Systems

27

Page 28: Real Time Systems

28

Page 29: Real Time Systems

29

Page 30: Real Time Systems

30

Page 31: Real Time Systems

31

Page 32: Real Time Systems

32

Page 33: Real Time Systems

33

Page 34: Real Time Systems

34

Page 35: Real Time Systems

35

Page 36: Real Time Systems

36

Page 37: Real Time Systems

37

Page 38: Real Time Systems

38

Page 39: Real Time Systems

39

Page 40: Real Time Systems

40

Page 41: Real Time Systems

41

Page 42: Real Time Systems

42

Page 43: Real Time Systems

43

Page 44: Real Time Systems

44

Page 45: Real Time Systems

45