45
1 Real Time Systems Part 1

1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

Embed Size (px)

Citation preview

Page 1: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

1

Real Time Systems

Part 1

Page 2: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

4

Real time systems differ from conventional systems in:

• Dominant role of timing constraints.

• Concurrency

• Significance of reliability and fault tolerance

Page 5: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

11

Page 12: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

13

Shared Memory

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

– But, hard to use – mistakes are common

Page 14: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

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: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

25

Page 26: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

26

Page 27: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

27

Page 28: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

28

Page 29: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

29

Page 30: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

30

Page 31: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

31

Page 32: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

32

Page 33: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

33

Page 34: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

34

Page 35: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

35

Page 36: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

36

Page 37: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

37

Page 38: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

38

Page 39: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

39

Page 40: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

40

Page 41: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

41

Page 42: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

42

Page 43: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

43

Page 44: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

44

Page 45: 1 Real Time Systems Part 1. 2 Fadi’s HW 11 Solution line level source 1 #pragma CODE 2 #include // SFR declarations 3 extern unsigned char rd_buttons(void);

45