Exercises and selected solutions for TDDC47 Real-time and concurrent

advertisement
Exercises and selected solutions for
TDDC47
Real-time and concurrent
programming
NOTE: This is a revised version of the earlier exercise set for TDDC47
prepared by:
Mehdi Amirijoo
Jonas Elmqvist
Adapted to the English version and to conform to the new content of the
course defined in 2010, by:
Simin Nadjm-Tehrani
Jordi Cucurull
Institutionen för datavetenskap (IDA)
Linköpings universitet
Copyright © 2010 Simin Nadjm-Tehrani
TDDC47 – Real-time and concurrent programming
1. Concurrent programming
1.1
Consider the following processes where critical_section corresponds to a sequence of
statements:
process_A
repeat
...
critical_section;
...
until false;
process_B
repeat
...
critical_section;
...
until false;
process_C
repeat
...
critical_section;
...
until false;
Solve the following problems with the help of semaphores.
(a) Only one process at a time may execute in a critical section.
(b) Max two processes may be present in critical_section at any point in time.
1.2
Consider the following data structures and two processes:
integer
integer
i {initially = 0};
buffer[3];
producer
repeat
i = i + 1;
buffer[i] = funktionA;
until false;
consumer
repeat
temp = buffer[i];
i = i - 1;
until false;
We assume that a fault appears when data is being written to or read from buffer[i] when
i < 1 or i > 3.
(a) Give an example of what can happen in case the producer process and the consumer
process are not synchronized.
(b) Extend the above code with semaphores so that correct program behaviour is
obtained.
1
TDDC47 – Real-time and concurrent programming
1.3
Which problem can show up in the following program and why?
semaphore X {initially = 1};
semaphore Y {initially = 1};
process_A
repeat
...
wait(X);
wait(Y);
kritisk_sektion;
signal(X);
signal(Y);
...
until false;
process_B
repeat
...
wait(Y);
wait(X);
kritisk_sektion;
signal(Y);
signal(X);
...
until false;
1.4
Consider a system with three smoker processes and an agent process. In order to smoke a
cigarette a smoker should acquire three ingredients: tobacco, paper and matches. The
first smoker process has only paper, the second has only tobacco, and the third process
has only matches. The agent process has all three ingredients (the smokers and the agent
have an infinite amount of the ingredients they possess). The agent places two randomly
chosen ingredients on a table. These can be taken by one or more smoker processes who
need the ingredients. If a smoker process has all the three ingredients it can smoke,
whereas if it does not, it must wait. When a smoker process has smoked enough, the
agent is going to place another two ingredients on the table and the scenario is repeated
again.
(a) What can happen if the smoker processes and the agent process are not synchronized?
(b) Write a program that uses semaphores in order to synchronize the smokers and the
agent.
1.5
Consider a system consisting of four resources of the same type that are shared by three
processes. Each process needs two resources. The processes voluntarily give up the
acquired resource and a resource cannot be used by two processes at the same time. Can
the system end up in a deadlock? Why/why not?
2
TDDC47 – Real-time and concurrent programming
1.6
Consider the following view of a given system:
Allocation
A
0
1
1
0
0
P0
P1
P2
P3
P4
B
0
0
3
6
0
C
1
0
5
3
1
Max
D
2
0
4
2
4
A
0
1
2
0
0
B
0
7
3
6
6
Available
C
1
5
5
5
5
D
2
0
6
2
6
A
1
B
5
C
2
D
0
Answer the following questions using the bankers algorithm:
(a) What is the content of the matrix Need?
(b) Is the system in a ”safe” state (according to Banker terminology)?
(c) Process P1 asks for the following further resources (0,4,2,0). Can this request be
granted immediately?
1.7
Consider the following resource picture in a system:
Max
P0
P1
P2
A
0
1
2
B
0
7
3
C
1
5
5
Available
D
2
0
6
A
0
B
6
C
5
D
0
(a) Find a matrix Allocation such that the system is in an unsafe state.
(b) In the unsafe state you have created, will the system necessarily end up in a deadlock
state? In other words, is it possible that the processes complete their executions even
if the system has reached an unsafe state?
1.8
Consider the following resource allocation approach. Processes can request and release
resources at any point in time. If some request is not granted due to insufficient resources,
we can investigate whether the given resource is allocated to some process(es) which is
(are) blocked and are waiting for other resources. If this is the case we disallocate the
resource from a blocked process and give it to the process that requires it. The Need
vector of the blocked process is increased with the corresponding amount of disallocated
resource.
(a) Can the system end up in deadlock? If so give an example of such a case.
3
TDDC47 – Real-time and concurrent programming
(b) Can infinite blocking take place? That is, can a process be deprived from allocating a
resource for ever?
1.9
A system is composed of m resources of the same type that are shared by n processes.
Resources can be requested and released only one at a time. Show that the system cannot
end up in deadlock if the following condition holds:
(i) A process’s maximal need (sum of total potential requests) of resources is
between 1 and m.
(ii) The sum of all maximal need values (max requested) is less than m + n.
4
TDDC47 – Real-time and concurrent programming
2. Scheduling
2.1
Assume that the following processes are given:
Process
Period
A
B
C
10
4
2
Worst case
execution time
1
1
1
(a) Order the process priorities according to Rate Monotonic (RM) policy.
(b) Compute CPU utilisation.
(c) Show an execution trace starting at a critical time point given that RM scheduling is
used.
(d) Compute the response time for A, B och C with the help of exact analysis.
2.2
Create a scenario where you have three processes. Ensure that you set the periods and
worst case execution times so that one process misses some deadline if you use RM
scheduling, and meet all their deadlines if you schedule with earliest deadline first (EDF).
2.3
Assume that we have n processes with periods T1 ,..., Tn and that all processes have the
maximum execution time C.
(a) What is the largest C such that all processes manage their deadline given that EDF is
used to schedule the processes?
(b) For which values of C can one be sure that all processes meet their deadlines when
RM is used for scheduling the processes?
2.4
Consider the following processes where Priority-Ceiling (also called ”Original Ceiling
Priority”) protocol is used for resource management and RM is used for scheduling the
5
TDDC47 – Real-time and concurrent programming
processes. By locking time we mean the maximum duration that a process locks a given
semaphore.
Process
A
B
C
D
Period
100
40
50
1000
Process
A
B
C
D
Semafor
S1
S1
S2
S2
Max. Exec. time
10
12
6
50
Locking time
1
2
1
4
(a) Compute the priority ceiling for each resource.
(b) Compute the blocking component B in the response time for each process.
2.5
Consider the following processes where Immediate-Inheritence (also called ”Immediate
Ceiling Priority”) protocol is used for resource management and RM is used for
scheduling the processes. Locking time denotes how long the process locks the respective
semaphore. Compute the maximum blocking time and the response time for each process.
Process
A
B
C
Period
16
10
8
Max. Exec. time
4
3
2
Process
A
B
B
C
C
C
Semaphore
S1
S1
S2
S1
S2
S3
6
Max. Locking time
1
1
1
1
2
1
TDDC47 – Real-time and concurrent programming
2.6
A system consists of the four aperiodic processes P1, P2, P3 and P4. These processes
share the common resources a, b, c, and d. Consider the following resource use patterns:
Process
P1
P2
P3
P4
Execution pattern
EaabdE
EbbdddE
EbbaccE
EccaE
Priority
4
3
2
1
Release time
8
5
2
0
‘E‘ means executing without using a resource. Whereas ”a”, ”b” etc. represent execution
with the resource a, b, etc. When a resource is allocated to a process, the process is going
to retain the resource until it is not used any more. Assume that the Priority-Ceiling
protocol is used. Show the actual execution sequence based on the above patterns. Use
the attached table (see the last page) for this purpose.
7
TDDC47 – Real-time and concurrent programming
3. Real-time Communication
3.1
Consider a CAN network that consists of 3 nodes, where CSMA/CR is used. Node n1 has
ID 000…00 and sends its frames with a period of 5ms. Node n2 has ID 000…01 and
sends frames with the period 7ms. Node n3 has ID 000…10 and sends frames with the
period 10ms. Each frame is maximally 135 bits and the transmission time ( τ bit ) for a bit
is 1 x 10-6s.
(a) Describe how the nodes are going to agree on the order that the frames are going to
be sent when all nodes send simultaneously. Exemplify with the nodes n1, n2 and n3.
(b) Compute the response time for the frames sent by the nodes n1, n2 and n3 (based on
the time that it takes to send the whole frame).
3.2
Tests performed in the network described in exercise 3.1 have shown that the measured
response time is much larger than expected. One has discovered that this depends on the
scheduling of those processes that generate the frames. For the nodes n1 and n2 a frame is
ready to be sent in the worst case 5ms after the start of their respective periods, that is, the
frame is queued at the latest 5ms after the period start. For node n3 a frame becomes
ready to be sent 8ms after its period start. Consider whether this information affects the
response times, and if so, by how much.
3.3
The message ”STOPENGINE” should be sent over a CAN network. Assume that no
other nodes send for the being, and that each letter consists of 8 bits (1 byte).
(a) Compute the shortest transmission time for the message.
(b) Compute the longest transmission time for the message.
8
TDDC47 – Real-time and concurrent programming
4. Extra exercise
4.1
Compute the maximum and minimum execution time for the following C snippet:
for(y=0;y<200;y++)
{
if(test(y)==1)
{
for(x=0;x<640;x++)
{
if(image[x][y]==1)
{
int weight;
weight=calc_weight(image,x,y);
x_sum+=x*weight;
y_sum+=y*weight;
squares+=weight;
}
}
}
}
Assume that:
- assignment takes 25 cycles
- comparison takes 20 cycles
- addition takes 15 cycles
- multiplication takes 90 cycles
- to call a function takes 50 cycles
- test() takes at most 180 and at least180 cycles
- calc_weigth() takes at most 350 and at least 120 cycles.
In order to simplify we assume all jumps (conditional as well as unconditional) take 0
cycles. Note that the units are cycles in some given processor (all times are fictional).
Note also that ++ and += consist of both addition and assignment.
9
TDDC47 – Real-time and concurrent programming
Suggested solutions
1. Concurrent programming
1.1
(a)
Inför semaforen
semaphore gå_in {initially = 1};
Processernas kod ser ut som följer
process_A
repeat
...
wait(gå_in);
kritisk_sektion;
signal(gå_in);
...
until false;
process_B
repeat
...
wait(gå_in);
kritisk_sektion;
signal(gå_in);
...
until false;
process_C
repeat
...
wait(gå_in);
kritisk_sektion;
signal(gå_in);
...
until false;
(b)
Vi ändrar endast initialvärdet på semaforen, dvs. vi deklarerar gå_in enligt:
semaphore gå_in {initially = 2};
1.2
(a)
Fel uppstår om processen producent exekverar fler än tre gånger i rad, då skrivning
sker till buffer för i > 3. Det omvända gäller för processen konsument då den
exekverar fler än tre gånger i rad (i blir mindre än 1). Dessutom kan bl.a. denna sekvens
av satser ske:
producent: i = i + 1;
konsument: temp = buffer[i];
konsument: i = i - 1;
producent: buffer[i] = funktionA;
Detta innebär tex. att värdet av funktionA kommer att skrivas till fel plats i buffer.
(b)
Vi måste se till att (i) ingen skrivning sker till en redan full buffer, (ii) ingen läsning sker
från en tom buffer och (iii) endast en process kan ändra variabeln i och buffer åt
gången. Den sista punkten innebär att vi har följande kritiska sektioner:
10
TDDC47 – Real-time and concurrent programming
producent:
i = i + 1;
buffer[i] = funktionA;
konsument:
temp = buffer[i];
i = i - 1;
Vi utökar koden med följande:
integer
integer
semaphore
semaphore
semaphore
i {initially = 0};
buffer[3];
innehåller_data {initially = 0};
finns_utrymme {initially = 3};
buffer_läs_skriv {initially = 1};
producent
repeat
wait(finns_utrymme);
wait(buffer_läs_skriv);
i = i + 1;
buffer[i] = funktionA;
signal(buffer_läs_skriv);
signal(innehåller_data);
until false;
konsument
repeat
wait(innehåller_data);
wait(buffer_läs_skriv);
temp = buffer[i];
i = i - 1;
signal(buffer_läs_skriv);
signal(finns_utrymme);
until false;
1.3
Baklås (deadlock) kan uppstå då alla fyra villkor är uppfyllda:
Mutual exclusion: En semafor kan enbart ”allokeras” av en process, där allokeringen sker
med wait().
Hold & wait: En process kan allokera en semafor och sedan vänta på att allokera en
annan semafor. Tex. kan process_A allokera semafor X med wait() och vänta på att
allokera semafor Y.
11
TDDC47 – Real-time and concurrent programming
No preemption: En process ger frivilligt upp en semafor som den har allokerat genom att
anropa signal().
Circular wait: Följande cykel kan uppstå. Process_A har allokerat semafor X och vill ha
semafor Y. Process_B har allokerat semafor Y och vill ha semafor X.
1.4
(a)
Baklås kan uppstå då alla fyra villkor är uppfyllda:
Mutual exclusion: En ingrediens på bordet är en resurs som enbart kan användas av en
rökarprocess, dvs. man kan inte dela på denna resurs.
Hold & wait: En rökarprocess har en ingrediens och väntar på den andra ingrediensen.
No preemption: En ingrediens blir tillgänglig när en rökarprocess slutar röka. En
rökarprocess ger frivilligt upp resursen.
Circular wait:
P = papper, Ts= tändstickor, Tb = tobak. P1 = process 1, P2 = process 2, P3 = process 3
Agenten har inte placerat ut ingredienser ännu:
Agenten placerar ut två ingredienser på bordet och en circular wait uppstår:
12
TDDC47 – Real-time and concurrent programming
(b)
Gemensamma datastrukturer är:
semaphore ingrediens_par[3] {initially=0};
// ingrediens_par[1] = tobak_papper
// ingrediens_par[2] = tobak_tändstickor
// ingrediens_par[3] = papper_tändstickor
semaphore agent {initially=1};
Koden för agenten är:
agent_process
…
repeat
wait(agent);
sätt i till ett värde mellan 1 och 3; //välj två ingredienser
placera ingredienserna på bordet;
signal(ingrediens_par[i]);
until false;
Koden för processerna är (0<i<4):
rökar_process_i
…
repeat
wait(ingrediens_par[i]);
rök;
signal(agent);
until false;
1.5
Anta värsta fallet: varje process har allokerat en resurs. Då finns det en resurs som inte är
allokerad. Denna fria resurs kan allokeras av en av processerna som har då sina två
resurser och därmed kan avsluta. Detta medför att det nu finns två fria resurser som de
återstående processerna kan allokera och därmed kan även de avsluta. Circular wait kan
därmed inte uppstå och således kan inte systemet hamna i baklås.
13
TDDC47 – Real-time and concurrent programming
1.6
(a) Need = Max - Allocation
Need
A
0
0
1
0
0
P0
P1
P2
P3
P4
B
0
7
0
0
6
C
0
5
0
2
4
D
0
0
2
0
2
(b)
Ja. Genom att använda oss av säkerhets algoritmen (safety algorithm) kan vi hitta en
sekvens <P0,P2,P1,P3,P4> som visar att systemet är i ett säkert tillstånd.
(c)
Ja. Vi använder oss av algoritmen för hantering av resursbegäran (resource request
algorithm) för att visa detta:
(i) Request1 = (0,4,2,0) <= Need1 = (0,7,5,0)
(ii) Request1 = (0,4,2,0) <= Available = (1,5,2,0)
(iii) Efter en allokering är systemets tillstånd säkert. Sekvensen <P0,P2,P1,P3,P4> visar
att systemet befinner sig i ett säkert tillstånd.
1.7
(a) Följande system är i ett osäkert tillstånd:
Allocation
P0
P1
P2
A
0
1
1
B
0
0
3
P0
P1
P2
A
0
0
1
B
0
7
0
C
1
0
5
Max
D
2
0
4
A
0
1
2
B
0
7
3
C
1
5
5
Available
D
2
0
6
A
0
B
6
C
5
D
0
Need
C
0
5
0
D
0
0
2
(b)
P0 avslutas vilket leder till att Available = (0,6,6,2). Men P1 behöver kanske inte 7
instanser av resurs B (Max är ju trots allt vad en process behöver i västa fall) utan nöjer
sig med 6 instanser av resurs B. När P1 avslutas blir Available = (1,6,6,2), vilket betyder
att P2 kan också avslutas. Detta betyder att systemet inte behöver hamna i baklås då
tillståndet är osäkert.
14
TDDC47 – Real-time and concurrent programming
1.8
(a)
Nej, baklås kan ej ske ty processer tvingas ge upp sina resurser. Med andra ord gäller inte
voluntary release som är ett av fyra kraven för att baklås ska kunna ske.
(b)
Ja, en process kan blockeras för alltid om processens allokerade resurser blir avallokerade
genom en serie av begäran från andra processer.
1.9
Vi har följande:
(i) Max i ≥ 1
(ii)
∑ Max
i
< m+n
(iii) Need i = Maxi − Allocationi
Om baklås uppstår måste ∑ Allocation i = m . Vi visar att systemet inte kan hamna i
baklås genom motsägelsebevis. Anta att ett baklås har ägt rum, dvs. att
∑ Allocation i = m . Detta innebär då att
∑ Need + ∑ Allocation =∑ Need
i
i
i
+ m = ∑ Max i < m + n ⇒ ∑ Need i < n
Detta innebär att det existerar en process Pi sådan att Needi = 0. Med andra ord kan Pi
avsluta sin exekvering och släppa alla resurser som den har allokerat. Då Max i ≥ 1
innebär detta att Pi har åtminstone en resurs som den kan släppa. Detta innebär dock att
∑ Allocation i < m , vilket motstrider antagandet ovan. Med andra ord kan systemet inte
vara i baklås.
15
TDDC47 – Real-time and concurrent programming
2. Scheduling
2.1
(a)
Process
A
B
C
Period
10
4
2
Exekveringstid
1
1
1
Prioritet
Lägst
Mellan
Högst
(b) CPU:s utnyttjandegrad ges av
U = 1/10 + 1/4 + 1/2 = 0.85
(c)
Tiden 0 är en kritisk tidpunkt, ty alla processer har maximalt långa svarstider. Längden på
tracen måste vara minsta multipel av processernas perioder, dvs. 20.
Time
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Executing
C
B
C
A
C
B
C
Ready
A, B
A
A
C
B
C
A
C
B
C
B
B
A
B
C
B
C
B
C
B
A, B
A
16
Waiting
C
B
B, C
A
A, C
A, B
A, B, C
A
A, C
B
B, C
A
A,C
A,B
A,B, C
A
A, C
A, B
A, B, C
C
TDDC47 – Real-time and concurrent programming
(d) Vi utnyttjar följande ekvation som löses genom fixpunktsiteration:
R 
Ri = Ci + ∑∀j∈hp (i )  i C j
Tj 
Svarstiden RC: Svarstiden för C blir 1 (C:s exekveringstid) då inga processer med högre
prioritet kan avbryta, m.a.o.
RC = CC + 0 = 1
Svarstiden RB: C har högre prioritet än B och således gäller att hp(B) = C. Svarstiden RB
räknas ut med iteration tills fixpunkt uppnås. Antag initialt RB = 1 (B:s exekveringstid)
RB = C B = 1
0
RB
1
 R B0 
1
= C B +  C C = 1 +   = 1 + 1 = 2
2
 TC 
 R1 
2
2
RB = C B +  B C C = 1 +  1 = 1 + 1 = 2
2
 TC 
2
1
RB = RB = RB
Svarstiden RA: Processer B och C har högre prioritet än process A och därmed är
hp(A) = {B,C}.
RA = C A = 1
0
 R0 
 R0 
1  1 
1
R A = C A +  A C C +  A C B = 1 +  1 +  1 = 1 + 1 + 1 = 3
2 4
 TC 
 TB 
 R1 
 R1 
3 3
2
R A = C A +  A C C +  A C B = 1 +  1 +  C B = 1 + 2 + 1 = 4
2 4
 TC 
 TB 
 R2 
 R2 
4 4
3
R A = C A +  A C C +  A C B = 1 +  1 +  1 = 1 + 2 + 1 = 4
2 4
 TC 
 TB 
RA = RA = RA
3
2
17
TDDC47 – Real-time and concurrent programming
2.2
Anta att vi har tre processer och välj exekveringstider och perioder enligt:
Process
A
B
Period
3
7
Exekveringstid
1
2
C
10
3
Detta innebär att utnyttjandegraden är
C
1 2 3
U =∑ i = + +
= 0,919
Ti 3 7 10
Alla processer klarar av sina deadline med EDF då U ≤ 1. För RM kan en eller flera
processer missa sina deadlines då 0,919 ≤/ 3(21 / 3 − 1) = 0,75 . För att säkerställa huruvida
deadline kommer att missas måste vi använda oss av responstidsanalys.
Svarstiden RA: hp(A)={} och därmed är R A = 1 . Process A klarar av sin deadline.
Svarstiden RB: Endast processen A har högre prioritet än B och således har vi att
hp(B)={A}. Beräkning av responstiden ger att:
RB0 = C B = 2
 R0 
2
1
R B = C B +  B  C A = 2 +  1 = 2 + 1 = 3
3
 TA 
 R1 
3
2
R B = C B +  B C A = 2 +  1 = 2 + 1 = 3
3
 TA 
RB = RB = RB
1
2
Process B klarar av sin deadline.
Svarstiden RC: Processer A och B har högre prioritet än C och således har vi att
hp(C)={A,B}. Beräkning av responstiden ger att:
RC0 = C C = 3
 RC0 
 RC0 
3  3 
RC = C C +   C A +   C B = 3 +  1 +   2 = 3 + 1 + 2 = 6
3  7 
 TA 
 TB 
 R1 
 R1 
6 6
2
RC = C C +  C C A +  C  C B = 3 +  1 +   2 = 3 + 2 + 2 = 7
3 7 
 TA 
 TB 
1
18
TDDC47 – Real-time and concurrent programming
RC
3
RC
4
RC
5
 RC2 
 RC2 
7  7
= C C +   C A +   C B = 3 +  1 +   2 = 3 + 3 + 2 = 8
3 7
 TA 
 TB 
 R3 
 R3 
8   8 
= C C +  C C A +  C C B = 3 +  1 +   2 = 3 + 3 + 4 = 10
3  7 
 TA 
 TB 
 R4 
 R4 
10  10 
= C C +  C  C A +  C  C B = 3 +  1 +   2 = 3 + 4 + 4 = 11 > 10
3 7
 TA 
 TB 
Här ser vi att process C missar sin deadline.
2.3
(a)
EDF: För att garantera att alla processer klarar av sina deadline måste följande gälla
1
.
C≤
1
1
+ ... +
T1
Tn
(b)
RM: Genom att sätta exekveringstiden för processerna enligt
n (21 / n − 1)
C≤
1
1
+ ... +
T1
Tn
kan man garantera att alla processer klarar av sina deadline. Observera att för RM kan ett
större C användas, men att ovanstående är ett tillräckligt krav.
2.4
Prioritetstilldelning enligt RM ger
Process
A
B
C
D
Prioritet (π)
2
4
3
1
(a)
Taket på en semafor är den maximala prioriteten av alla processer som kan tänkas låsa
semaforen. Därmed har vi att
Tak ( S1) = max(π A , π B ) = 4
Tak ( S 2) = max(π C , π D ) = 3
(b)
19
TDDC47 – Real-time and concurrent programming
Vi använder oss av algoritmen för beräkning av blockering. Lås lp{Z } beteckna
mängden av processer med lägre prioritet än Z.
BD: Det finns ingen process med lägre prioritet än process D och således har vi att
lp{D} = {} . Därmed kan ingen process blockera process D och därmed är B D = 0 .
BA: Vi har att lp{ A} = {D} . Process D låser S2 och Tak ( S 2) = 3 ≥ π A = 2 och därmed
kan process D blockera process A. Detta medför att B A = t S 2, D = 4 .
BC: Vi har att lp{C} = {D, A} . Vi undersöker vilka processer som kan blockera process
C.
(i) Process D låser S2 och Tak ( S 2) = 3 ≥ π C = 3 . Process D kan blockera C.
(ii) Process A låser S1 och Tak ( S1) = 4 ≥ π C = 3 . Process A kan blockera C.
Därmed kan process C blockeras högst en gång av processerna D och A. Detta
medför att BC = max(t S 2, D , t S1, A ) = 4 .
BB: Vi har att lp{B} = {D, A, C} . Undersöker vilka processer som kan blockera process C.
(i) Process D låser S2 och Tak ( S 2) = 3 ≥/ π B = 4 . Process D kan ej blockera B.
(ii) Process A låser S1 och Tak ( S1) = 4 ≥ π B = 4 . Process A kan blockera B.
(iii) Process C låser S2 och Tak ( S 2) = 3 ≥/ π B = 4 . Process C kan ej blockera B.
Med andra ord kan B endast blockeras av A och därmed har vi att BB = t S1, A = 1 .
2.5
Prioritetstilldelning enligt RM ger
Process
A
B
C
Prioritet (π)
1
2
3
För att beräkna blockeringsfaktorn för varje process måste vi först beräkna taket på
semaforerna:
Tak ( S1) = max(π A , π B , π C ) = 3
Tak ( S 2) = max(π B , π C ) = 3
Tak ( S 3) = max(π C ) = 3
Vi använder oss av algoritmen för beräkning av blockering. Låt lp{Z } beteckna mängden
av processer med lägre prioritet än Z.
BA: Det finns ingen process med lägre prioritet än process A och således har vi att
lp{ A} = {} . Därmed kan ingen process blockera process A och därmed är B A = 0 .
20
TDDC47 – Real-time and concurrent programming
BB: Vi har att lp{B} = {A} . Process A låser S1 och Tak ( S1) = 3 ≥ π B = 2 och därmed kan
process A blockera process B. Detta medför att BB = t S1, A = 1 .
BC: Vi har att lp{C} = { A, B} . Vi undersöker vilka processer som kan blockera process C.
(i) Process A låser S1 och Tak ( S1) = 3 ≥ π C = 3 . Process A kan blockera C.
(ii) Process B låser S1 och Tak ( S1) = 3 ≥ π C = 3 . Process B kan blockera C genom
semafor S1.
(iii) Process B låser S2 och Tak ( S 2) = 3 ≥ π C = 3 . Process B kan blockera C genom
semafor S2.
Process C blockeras högst en gång av processerna A och B. Detta medför att
BC = max(t S 1, A , t S1, B , t S 2, B ) = 1 .
Vi beräknar nu svarstiderna genom att lösa följande ekvation med fixpunktsiteration:
R 
Ri = Ci + Bi + ∑∀j∈hp (i )  i C j
T j 
Svarstiden RC: hp(C)={} och därmed är RC = C1 + B1 = 2 + 1 = 3
Svarstiden RB: Endast processen C har högre prioritet än B och således har vi att
hp(B)={C}. Beräkning av responstiden ger att:
RB0 = C B + BB = 4
 R0 
R 1B = C B + B B +  B  CC = 6
 TC 
 R B1 
2
R B = C B + B B +  C C = 6
 TC 
RB = RB = RB
1
2
Svarstiden RA: Processerna B och C har högre prioritet än A och således har vi att
hp(A)={B,C}. Beräkning av responstiden ger att:
R A0 = C A + B A = 4
R0 
R0 
R 1A = C A + B A +  A  C B +  A  C C = 9
 TB 
 TC 
1
R 
 R1 
R A2 = C A + B A +  A C B +  A  C C = 11
 TB 
 TC 
2
 RA 
 R A2 
3
R A = C A + B A +  C B +  C C = 14
 TB 
 TC 
21
TDDC47 – Real-time and concurrent programming
 R3 
 R3 
R A4 = C A + B A +  A C B +  A C C = 14
 TB 
 TC 
3
4
RA = RA = RA
2.6
Process
P1
P2
P3
P4
Exekveringssekvens Prioritet
4
EaabdE
3
EbbdddE
2
EbbaccE
1
EccaE
Släpptid
8
5
2
0
Följande beteckning används:
yx
P
P
1
P
2
P
3
P
4
Betyder att processen exekverar med prioritet x och att
processen har tilldelats resurs y. Till exempel, betyder a2 att
processen har fått resurs a och att processen exekverar med
prioriteten 2.
Preemption av en process med högre prioritet.
Blockeras av en process med lägre prioritet.
E
E
E
E c
1
P c
2
b
2
P
P b
3
P P
b
3
P
P b
4
P P
P
P P
a
4
P
a
4
P
b
4
P
d
4
P
P
P
P
P
P
P
22
E
P
P d
3
P P
d
3
P
d
3
P
P
P P
P
P
E
P a
2
P P
c
2
P
c
2
P
E
P a
1
E
TDDC47 – Real-time and concurrent programming
3. Real-time communication
3.1
(a) See course literature.
(b) We have the following parameters
Nod
1
2
3
Period Ti (ms)
5
7
10
Prioritet (π)
3
2
1
The formulas required to calculate the worst-case response time of each message are the
following
 win + J j + τ bit 
where wi0 ( q ) = Bi + qCi
win +1 (q) = Bi + qCi + ∑ 
C j
Tj
∀j∈hp ( i ) 

Ri (q ) = J i + wi (q ) − qTi + Ci
Ri = max ( Ri (q ))
q =0..Qi −1
In addition, before using them, the number of possible messages, Qi, that become ready
before the end of the busy period must be calculated with the following formulas:
t
n +1
i
 t in + J j 
= Bi + ∑ 
C j
Tj 
∀j∈hep ( i ) 
where
ti0 = Ci
t + J i 
Qi =  i

 Ti 
The maximum blocking time for respective messages is B1 = B2 = 135 µs and B3 = 0 s .
Frames sent by n3 have the lowest priority, reason why their blocking factor is defined to
zero. The transmission time is given by C i = 135τ bit = 135µs .
Response time R1:
First the length of the busy period for message 1 is calculated:
t10 = C1 = 135µs
 t 0 + J1 
t11 = B1 +  1
C1 = 270µs
 T1 
23
TDDC47 – Real-time and concurrent programming
 t11 + J 1 
t = B1 + 
C1 = 270µs
 T1 
t12 = t11 = t1 = 270µs
2
1
Then the number of instances Q1 of message 1 that become ready before the end of the
busy period:
 t + J1 
Q1 =  1
 =1
 T1 
The response time must be calculated for each of the Q1 instances, in this case just one.
Since there are no messages with higher priority no iterations are required:
w10 (0) = B1 + 0C1 = 135µs
R1 (0) = J 1 + w1 (0) − 0T1 + C1 = 270µs
R1 = max( R1 (0)) = 270µs
Response time R2: We calculate the length of the busy period for message 2:
t 20 = C2 = 135µs
 t 0 + J1 
 t 20 + J 2 
t 21 = B2 +  2
C
+
 1 
C 2 = 405µs
 T1 
 T2 
 t 12 + J 1 
 t 12 + J 2 
2
t 2 = B2 + 
C1 + 
C 2 = 405µs
 T1 
 T2 
t 22 = t 12 = t 2 = 405µs
Then the number of instances Q2 that become ready:
t + J 2 
Q2 =  2
 =1
 T2 
The response time must be calculated for each of the Q2 instances:
w20 (0) = B2 + 0C 2 = 135µs
 w 0 + J 1 + τ bit 
w12 (0) = B2 + 0C 2 +  2
C1 = 270µs
T
1


1
 w + J 1 + τ bit 
w22 (0) = B2 + 0C 2 +  2
C1 = 270µs
T1


2
1
w2 = w2 = w2 = 270µs
R2 (0) = J 2 + w2 (0) − 0T2 + C 2 = 405µs
24
TDDC47 – Real-time and concurrent programming
R2 = max( R2 (0)) = 405µs
Response time R3: We calculate first the length of the busy period for message 3:
t 30 = C3 = 135µs
 t 0 + J1 
 t 30 + J 2 
 t 30 + J 3 
t 31 = B3 +  3
C
+
C
+
 1 
 2 
C3 = 405µs
T
T
T
1
2
3






1
1
1
 t + J1 
 t3 + J 2 
 t3 + J 3 
t 32 = B3 +  3
C1 + 
C 2 + 
C3 = 405µs
 T1 
 T2 
 T3 
t 32 = t 31 = t 3 = 405 µs
Then the number of instances Q3 that become ready:
t + J 3 
Q3 =  3
 =1
 T3 
The response time must be calculated for each of the Q3 instances:
w30 (0) = B3 + 0C 3 = 0 µs
 w 0 + J 1 + τ bit 
 w30 + J 2 + τ bit 
w31 (0) = B3 + 0C3 +  3
C
+
 1 
C 2 = 270µs
T1
T2




1
1
 w + J 1 + τ bit 
 w3 + J 2 + τ bit 
w32 (0) = B3 + 0C3 +  3
C1 + 
C 2 = 270µs
T1
T2




w32 = w31 = w3 = 270 µs
R3 (0) = J 3 + w3 (0) − 0T3 + C3 = 405µs
R3 = max( R3 (0)) = 405µs
3.2
In this case there is jitter:
J 1 = J 2 = 5ms and J 3 = 8ms
Then the response time for each message must be recalculated.
Response time R1: First the length of the busy period for message 1 is calculated:
t10 = C1 = 135µs
 t10 + J 1 
t = B1 + 
C1 = 405µs
 T1 
t1 + J1 
t12 = B1 +  1
C1 = 405µs
 T1 
1
1
25
TDDC47 – Real-time and concurrent programming
Then the number of instances Q1 that become ready:
 t + J1 
Q1 =  1
=2
 T1 
The response time must be calculated for each of the Q1 instances. Since there are no
messages with higher priority no iterations are required:
w10 (0) = B1 + 0C1 = 135µs
w10 (1) = B1 + 1C1 = 270µs
R1 (0) = J 1 + w1 (0) − 0T1 + C1 = 5270µs
R1 (1) = J 1 + w1 (1) − 1T1 + C1 = 405µs
R1 = max( R1 (0), R1 (1)) = 5270µs
Response time R2: We calculate the length of the busy period for message 2:
t 20 = C2 = 135µs
 t 0 + J1 
 t 20 + J 2 
t 21 = B2 +  2
C
+
 1 
C 2 = 540µs
 T1 
 T2 
t1 + J1 
 t 12 + J 2 
t 22 = B2 +  2
C
+
 1 
C 2 = 540µs
T
T
1
2




t 22 = t 12 = t 2 = 540µs
Then the number of instances Q2 that become ready:
t + J 2 
Q2 =  2
 =1
 T2 
The response time must be calculated for each of the Q2 instances:
w20 (0) = B2 + 0C 2 = 135µs
 w 0 + J 1 + τ bit 
w12 (0) = B2 + 0C 2 +  2
C1 = 405µs
T1


1
 w + J 1 + τ bit 
w22 (0) = B2 + 0C 2 +  2
C1 = 405µs
T1


2
1
w2 = w2 = w2 = 405µs
R2 (0) = J 2 + w2 (0) − 0T2 + C 2 = 5540µs
R2 = max( R2 (0)) = 5540µs
26
TDDC47 – Real-time and concurrent programming
Response time R3: We calculate first the length of the busy period for message 3:
t 30 = C3 = 135µs
 t 0 + J1 
 t 30 + J 2 
 t 30 + J 3 
t 31 = B3 +  3
C
+
C
+
 1 
 2 
C3 = 540µs
T
T
T
1
2
3






1
1
1
 t + J1 
 t3 + J 2 
 t3 + J 3 
t 32 = B3 +  3
C1 + 
C 2 + 
C3 = 540µs
 T1 
 T2 
 T3 
t 32 = t 31 = t 3 = 540 µs
Then the number of instances Q3 that become ready:
t + J 3 
Q3 =  3
 =1
 T3 
The response time must be calculated for each of the Q3 instances:
w30 (0) = B3 + 0C 3 = 0 µs
 w 0 + J 1 + τ bit 
 w30 + J 2 + τ bit 
w31 (0) = B3 + 0C3 +  3
C
+
 1 
C 2 = 405µs
T1
T2




1
1
 w + J 1 + τ bit 
 w3 + J 2 + τ bit 
w32 (0) = B3 + 0C3 +  3
C1 + 
C 2 = 405µs
T1
T2




w32 = w31 = w3 = 405 µs
R3 (0) = J 3 + w3 (0) − 0T3 + C 3 = 8540µs
R3 = max( R3 (0)) = 8540µs
3.3
(a)
Den kortaste transmissionstiden för en ram ges av C = (8n + 47 )τ bit där 0 ≤ n ≤ 8 är
antal bytes data. Meddelandet vi ska skicka är 10 bytes och således får vi dela upp
meddelandet i två ramar. Detta innebär att C = 174τ bit .
(b) På grund av bitstuffing kan antal skickade bitar ökas, vilket leder till att
transmissionstiden för en ram är maximalt

 34 + 8n − 1 
C =  8n + 47 + 
 τ bit .
4



Då vi måste dela upp meddelandet i två ramar får vi det maximala transmissionstiden
C = 210τ bit .
27
TDDC47 – Real-time and concurrent programming
4. Extra exercise
4.1
1
for(y=0;y<200;y++)
{
2
if(test(y)==1)
{
3
for(x=0;x<640;x++)
{
4
if(image[x][y]==1)
{
int weight;
5
weight=calc_weight(image,x,y);
6
x_sum+=x*weight;
7
y_sum+=y*weight;
8
squares+=weight;
}
}
}
}
Rad
1
2
3
4
5
6
7
8
Summa
MAX
MIN
25+20+200*(20+15+25)
25+20+200*(20+15+25)
200*(180+20)
200*(180+20)
200*(25+20)+200*640*(20+15+25)
0
200*640*20
0
200*640*(350+25)
200*640*(90+15+25)
200*640*(90+15+25)
200*640*(15+25)
96701045
28
0
0
0
0
52045
TDDC47 – Real-time and concurrent programming
Table for resource sharing exercises
2.6
Följande beteckning används:
yx
P
Betyder att processen exekverar med prioritet x och att
processen har tilldelats resurs y. Till exempel, betyder a2 att
processen har fått resurs a och att processen exekverar med
prioriteten 2.
Preemption av en process med högre prioritet.
Blockeras av en process med lägre prioritet.
P1
P2
P3
P4
******************
P1
P2
P3
P4
29
Download