chapter 4: interprocess communication and coordinationnemo/cop5615/chow/ch4.pdf · message passing...

29
CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATION Chapter outline Discuss three levels of communication: basic message passing, request/reply and transaction communication based on message passing Discuss name services for communication Show examples of process coordination using message passing Basic message passing communication Communication primitives: send(destination, message) receive(source, message) channel naming = process name, link, mailbox, port direct communication: symmetric/asymmetric process naming, link indirect communication: many-to-many mailbox, many-to-one port 1

Upload: others

Post on 11-Jun-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

CHAPTER 4: INTERPROCESS

COMMUNICATION

AND COORDINATION

Chapter outline

• Discuss three levels of communication: basic message passing, request/replyand transaction communication based on message passing

• Discuss name services for communication

• Show examples of process coordination using message passing

Basic message passing communication

Communication primitives:

send(destination, message)receive(source, message)channel naming = process name, link, mailbox, port

• direct communication: symmetric/asymmetric process naming, link

• indirect communication: many-to-many mailbox, many-to-one port

1

Page 2: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Message buffering and synchronization

7

source

kernel

sender destination

kernel

receivernetwork

Service8

message 4 request31 2

ack 5 reply6

1. Nonblocking send, 1+8 : Sender process is released after messagehas been composed and copied into sender’s kernel (local system call)

2. Blocking send, 1+2+7+8 : Sender process is released after messagehas been transmitted to the network

3. Reliable blocking send, 1+2+3+6+7+8 : Sender process is releasedafter message has been received by the receiver’s kernel (kernel receivesnetwork ACK).

4. Explicit blocking send, 1+2+3+4+5+6+7+8 : Sender process isreleased after message has been received by the receiver process (kernelreceives kernel delivery ACK)

5. Request and reply, 1-4, service, 5-8 : Sender process is released aftermessage has been processed by the receiver and response returned tothe sender

2

Page 3: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Message passing API

• Pipe: A FIFO byte-stream unidirectional link for related processes

• Message queue: A structured variable length message queue

• Named Pipe: A special FIFO file pipe using path name for unrelatedprocesses under the same domain (explicitly created and accessed)

• Socket: A logical communication endpoint for communication betweenautonomous domains (bound to physical communication endpoint)

3

Page 4: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Connectionless socket communication

sendto / recvfrom

bind bind

socketsocket

endpoint (PCE)

physical communication

endpoint (socket, LCE)

logical communication

peer process

endpoint (socket, LCE)

endpoint (PCE)

peer processes

physical communication

logical communication

• peer process: application-level process - application protocol

• LCE: Logical Communication Endpoint - established with socket call

• PCE: Physcial Communication Endpoint - (a.k.a. endpoint in network)(Transport TSAP/L4SAP, Network NSAP/L3SAP) pair bound to LCEwith bind() call

• Network: Accessed by sendto()/recvfrom() primitives

4

Page 5: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Connection-oriented socket communication

Server Client

rendezvous

request

reply

socket socket

bind

listen

connect

accept

read write

readwrite

5

Page 6: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Asymmetric - Client and Server

Server Starts first:

• Server process: application-level process - server protocol

• LCE: Logical Communication Endpoint - established with socket call

• PCE: Physcial Communication Endpoint - (a.k.a. endpoint in network)(Transport TSAP/L4SAP, Network NSAP/L3SAP) pair bound to LCEwith bind() c all

• Listen: Server waits for incoming connection request

• Accept: Server accepts connection request, initializes connection

• Read: Server reads incoming segment(s) of request

• Write: Server writes reply segment(s)

• Close: Server terminates connection when reply is received

Client starts after Server:

• Client process: application-level process - client protocol

• LCE: Logical Communication Endpoint - established with socket call

• PCE: Physcial Communication Endpoint - (a.k.a. endpoint in network)(Transport TSAP/L4SAP, Network NSAP/L3SAP) pair bound to LCEwith connect() call, which also initializes connection to Server PCE

• Write: Client writes request segment(s)

• Read: Client reads incoming segment(s) of reply

• Close: Client terminates connection when reply is received and ac-knowledged

6

Page 7: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Secure Socket Layer protocol

• Privacy: use symmetric private-key cryptography

• Integrity: use message integrity check

• Authenticity: use asymmetric public-key cryptography

encrypted pre−mastersecret

randomS, CipherSuite, session id

randomC, CipherSuites

encrypted and signed Socket MessageSocket Message

hashed message and secret

Finished

Finished

ChangeCipherSpecChangeCipherSpec

CLIENT

ClientHello

ClientKeyExchange

server public key ServerKeyExchange

ServerHello

SERVER

• Server accepts connection, selects cipher suite both can use (if any),provides its public key in a signed certificate

• Client verifies Server public key certificate

• Client and Server exchange public information to establish shared secret

• Client and Server initialize hash key, session encryption key

• Either Client or Server may terminate secure connection

7

Page 8: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Group communication and multicast

• Reliability of message delivery

– Best effort

– Duplicate detection

– Omission detection/recovery per receiver

– All or none (atomic) to all receivers

• Orderly delivery

– FIFO (per sender)

– Causal order

– Total order

8

Page 9: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

22

1

s G

(d)

(c)

(b)(a)

2

2

1

1

2

2

1

1

12

1

G

G

G

s

s

G

G

s

s

G

s

s

s

s

G

G

G

s

2

1

• (a) Single sender/single group - reliable, ordered deliver (FIFO)

• (b) Multiple senders/single group - order between senders’ messages?

• (c-L) Single sender/overlapping groups - consistency of order of mes-sages sent to different groups for nodes in intersection

• (c-R) Multiple, single group senders/overlapping groups - consistencyof order of messages for nodes in intersection

• (d-L) Multiple, multi-group senders/independent groups - issues of (b)plus consistency of order in Group 1 and Group 2

• (d-R) Multiple, multi-group senders/overlapping groups - issues of (d-L) plus consistency of order for nodes in intersection of Group 1 andGroup 2

9

Page 10: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Causal order

• Accept message m if Ti = Si + 1 and Tk ≤ Sk for all k 6= i.

• Delay message m if Ti > Si+1 or there exists a k 6= i such that Tk > Sk.

• Reject the message if Ti ≤ Si.

M1_1

VLC after RxAction(s)Rx EventTx TimestampMessage

000

000

000

R2_4

R2_3R2_1

R3_3R3_2R3_1

R2_5

M1_2

R3_3

R3_2

R3_1

R2_5

R2_4

R2_3

R2_2

R2_1

R1_4

R1_3

R1_2

R1_1

M3_3

M3_2

M3_1

M2_1

R2_2

R1_4R1_3R1_2R1_1

Pro

cess

time

M1_2

M3_3M3_2

M1_1

M3_1

M2_1

Initial Vector Clock

P3

P2

P1

10

Page 11: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Total order

3

2

1

0

Buffer management in the

Time

Commit

Time

Acknowledge

Message

Multicast

communication handler

pending

delivered2

10

m

2

1

g

g

m

m

2)(msg

1)(msg

2

1

s

s

m

m

m

8

9

8

6

8,9 7,5

4,8

6,8

5,7

3,7

2,6

1,5

1

2

7

5

8

6

9

86

2

1

2

1075

7 c_2,8

c_1,99

Total Order Multicast Example: Time−Space Diagram

time at which g_1’s table is shown

a_3,9

98

m_2,7

m_3,2

10

a_1,6

m_2,7

10

97

10

a_2,8

a_2,8

a_1,9

m_1,5m_1,5

s_3

g_2

g_1

s_2

s_1

11

Page 12: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Request/reply communication

Remote Procedure Calls (RPCs)

call request

message to

parameters

parameters to

message

Client Stub

Transport

receive send

message to

parameters

parameters to

message

Transport

receive send

Server Stub

return replycall request

Server

return reply

Client

• Parameter passing and data conversion

• Binding

• Compilation

• Exception and failure handling

• Security

12

Page 13: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

RPC Binding

client

server

directory server

(binder or trader)

register program,

register

service

port #

client handleclient machine

server machine

or h

andl

e to

ser

ver

serv

er m

achi

ne a

ddre

ss

create port mapper

version, and port

4

1

2

3

RPC compilation

server

procedures

interface

specification

client

main program

server stub

client stub

header fileRPC

run−time library

server program

client program

RPC

generator

compilation

compilation

13

Page 14: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

RPC exception and failure

• Exception: in-band or out-band signaling

• Link failure: retransmission, sequence number and idempotent requests,use of transaction id xid

• Server crash:

– at least once: server raises an exception and client retries

– at most once: server raises an exception and client gives up

– maybe: server raises no exception and client retries

• Client crash:

– orphan killed by client

– orphan killed by server

– orphan killed by expiration

14

Page 15: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Secure RPC

• Cs and Ss are 128-bit random numbers.

• Cp = αCs modM , and Sp = αSs modM ,where α and M are known constants.

SKcs = SCs

p = (αSs)Cs = αSs∗Cs

SKsc = CSs

p = (αCs)Ss = αCs∗Ss

. public and encrypted secret key

login process

key server

client process

key server

server process{CK} session key −>

{RPC message} CK

user id and

password

CsSp

Client machine Server machine

Cp

Ss

. user network name

NIS server

records of

15

Page 16: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Transaction Communication

Must handle

• multiple operations

• many participants

• message failures

• node failures

ACID properties

• Atomicity - either all operations take place or none of them,

• Consistency - the results of interleaved execution of operations of mul-tiple transactions is equivalent to serial execution of the transactions

• Isolation - partial results of a transaction in progress are not visible toothers

• Durability - once a transaction is committed, its results will be madepermanent

16

Page 17: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Two-phase commit protocol

− if COMMIT then commit

− send response− received response

request

reply

decision

result

PARTICIPANT

− if all votes are unanimous YES

− precommit the transaction

then precommit and send YESPha

se 1

Pha

se 2

COORDINATOR

− if ABORT then abort

− send request to all participants − received request message

− if ready

else abort transaction and send NO− collect all replies

then commit and send COMMIT

else abort and send ABORT − receive decision

Failure and recovery of the 2PC protocol

update

continuefind out commit or abortabort

abort or continueabort

endresp.commit

endreceive

commit

sendcommitpre−

Participant failure recovery actions

Coordinator failure recovery actions

receiverequest

sendreceivesendpre−

responsecommitreplyrequestcommit

reply

resend commit message

collect

commitbegin

sendbegin

17

Page 18: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Name and Directory Services

Object attributes and name structures

Attribute Partitioning

structure−free attribute−based resolution

Name StructuresService /object Attributes

(e.g., yellow pages)

(e.g., white pages)

hierarchical structure name−based resolution

< name, type, attributes, address >

< name, attributes, address >

functional

organizational

physicalflat structure< attributes >

Name space and information base

B

A

C D E

DSA 3

DSA 2 DSA 1

User

Organization

Country

Root

Five naming contexts of Directory Info Tree in three Directory Service Agents

18

Page 19: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Name resolution

DUA DSA DSA

1 2

34

1 2

3

DUA

DSA

DSA

DUA

MulticastReferral

Transitive chainingRecursive chaining

4

3

2

1

4

32

1

DSA

DSA

DSADSADUA

Points of comparison:

• Simplicity at DUA

• Stateless DSA (with regard to requests)

• Ability of DSA to cache

• Message efficiency

• Response time at DUA

19

Page 20: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Distributed Mutual Exclusion

• Contention-based

– Timestamp prioritized

– Voting

• Control (Token)-based

– Ring structure

– Tree structure

– Broadcast structure

20

Page 21: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Contention-based DME

• Timestamp prioritized

– Lamport:Send REQUEST with Lamport Timestamp to all processesWait for REPLY from all processesWhen own REQUEST at front of queue, enter CSWhen complete CS, sent RELEASE to all processes

When receive REQUEST from S, enqueue REQUEST and sendREPLY to SWhen receive RELEASE from S, dequeue its REQUEST

– 3(N − 1) messages

<(5,1),(5,3),(7,2)>

<(5,3),(7,2)> <(5,1),(5,3),(7,2)>

<(5,3),(7,2)><(5,1),(7,2)><(5,1)>REQ(5,1)

<(5,3)>

REPLY<(5,1),(5,3)>

<(5,1)>

6

4

4

4 5

one reply

one reply

one reply

<(5,3),(7,2)>all replies

<(5,3),(7,2)>

8 all replies RELEASE 8

all replies

<(5,1),(5,3),(7,2)>REQ(7,2) 7

8 8

Enter CS

Enter CS

REPLY

REPLY

REPLY

REPLY

5

REPLY

REQ(5,3)

Initial Logical Clock

Pro

cess

time

P3

P2

P1

Lamport Timestamp DME

21

Page 22: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Contention-based DME (cont)

– Ricart & Agrawala:Like Lamport, but only send REPLY ifNot in CS, andREQUEST is ahead of mine (if any) in queue

– 2(N − 1) messages

8

<(5,1),(5,3),(7,2)>REQ(7,2) 7

8 8

5

<(5,1),(5,3),(7,2)>

<(5,3),(7,2)><(5,1)>REQ(5,1)

<(5,3)>

REPLY<(5,1),(5,3)>

all replies

WAIT

WAITWAIT

<(5,3),(7,2)>Enter CSall replies

one reply

<(5,3),(7,2)>one reply

one reply<(5,1),(7,2)> <(5,1),(5,3),(7,2)>

REPLY

<(5,3),(7,2)>

8

<(5,1)>

6

4

4

4

Enter CS

REPLY

REPLY

5

REQ(5,3)

Initial Logical Clock

Pro

cess

time

P3

P2

P1

Ricart & Agrawala Timestamp DME

22

Page 23: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Contention-based DME (cont)

– Message failure:

∗ Node may resend request if no reply

∗ Receiving any request, node replies

∗ Duplicate request just not entered into queue

∗ Node may ask head of queue what is the hold up

8 8

5

<(5,1),(5,3),(7,2)>

<(5,3),(7,2)> <(5,1),(5,3),(7,2)>

<(5,3),(7,2)><(5,1),(7,2)><(5,1)>REQ(5,1)

<(5,3)>

REPLY<(5,1),(5,3)>

<(5,1)>

6

4

4 7one reply

one reply

one reply

X

<(5,3),(7,2)>

<(5,3),(7,2)>Enter CS

all replies

REPLY

REQ(5,3)

8 all replies RELEASE 8

all replies

<(5,1),(5,3),(7,2)>REQ(7,2)

4

Enter CS

REPLY

REPLY

REPLY

REPLY

5

REPLY

REQ(5,3)

Initial Logical Clock

Pro

cess

time

P3

P2

P1

Lamport Timestamp DME with message failure

– Node failure:

∗ More severe problem

∗ Must detect failed node, recover

23

Page 24: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Contention-based DME (cont)

• Voting

– Simple Majority Voting:Candidates solicit votesVoters can vote for only one candidateAt most one gets majorityCandidate returns votes when done with CSProblem: deadlock!

– Majority Voting with Rescension:Voter can ask for vote backCandidate not in CS must return vote if askedVoters always vote for ‘best ’candidate

– Coterie-based Voting:Each process Pi has its request set Si of voters (quorum)Pi must have vote from every member of Si to enter CS∀i, j, Si ∩ Sj 6= ∅

16151413

121110987

654321

6

5

4

3

2

17 14S

363534333231

302928272625

242322212019

18

1

1 65432

Maekawa O(√

N) Quorum Method

24

Page 25: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Control (Token)-based DME

• Ring structure

– Pass DME token around logical ring

– Must wait for DME token to enter CS

– Delay

– Overhead

– Priority scheme possible

• Tree structure (Raymond)

– Only send messages when token is requested

– Send messages along edges of logical tree

– Send requests toward root (current token holder)

– Maintain distributed queue with self, neighbors on it

– Send token toward first request in queue when done

– When receive token and first in queue, enter CS

1

2 3

4

5 6

74

43 4

3

4

3

3

3

Tree Structure Distributed FIFO Queue Token Passing

25

Page 26: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Control (Token)-based DME (cont)

• Broadcast structure (Suzuki & Kasami)

– Token has Token Vector T and Request Queue Q

– T indicates completed CSs for each process

– Q indicates pending requests, in request order

– Each process maintains a sequence number for its requests

– Broadcast REQUEST with incremented request sequence number

– Process i maintains vector Si of largest request sequence numbersit has seen for each process

– Receive REQUEST, update Si; if holding token, append to Q

– If hold token and idle, send to first process in Q, if any

– If receive token, update Q and enter CS

481120159112115

8102114

4381020159112015

2

i

Process 4

Process 3

Process 2

Process 1

Token queueToken vectorSequence vectors QTS

*

*

*

291120159102115

43214321

Broadcast Structure Token Passing

26

Page 27: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Leader Election

Complete topology

The Bully algorithm1. Are-U-Up to higher numbered nodes2. If highest alive, Enter-Election to lower nodes3. When ACK or TRO for all lower nodes, send Result4. Enter-Election received: transient state until Result

so 12 starts election process

17 does not answer, 5 and 7 suspect

send Enter−Election to lower nodes

announces Result to all

5 and 7 send R−U−Up msgs to

17 is leader

that they are alive (except 17)These nodes reply to confirm

6 and 9 get their replies,but 12 gets no reply from 17

17 dies, 5 and 7 try to contact

higher numbered nodes

and send probes (except 7)

12 gets ACKs from all nodes

12 becomes new leader

12

12

97653 17

1797653

97653

12

7 9 12 17

5 6 7 9 123

6

5 6 7 9 123 17

3 5 6

17

7 9 1712

3 5 7 9 12 17

3 5 6 7 9 12 17

3 5 6

27

Page 28: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Leader Election (cont)

Tree topology

Distributed MST formationGalleger, Humbelt & Spira (Sollin’s Method in parallel)

Leader electionLast node to yield and mergeTimestamp protocol in tree

Logical ring topology

end case

(id) to its successor node;

The initiator node sets partcipating = true and

For each process node ,

send

send

case

receive

send

value == id : announce leader;

(id);value < id and participating == false : participating := true,

(value);value > id : participating := true,

(value);

28

Page 29: CHAPTER 4: INTERPROCESS COMMUNICATION AND COORDINATIONnemo/cop5615/chow/ch4.pdf · Message passing API • Pipe: A FIFO byte-stream unidirectional link for related processes • Message

Logical ring topology

start election

9

3

5

17 is leader

12 on, giving 129 passes 12 on12 supresses 9,

6 passes 12 on7 passes 9 on,

12

12 supercedes 75 passes 9 on,

9

12 won12 won

12 won 12 won12 won

12

12

12

12

9

12

its victory12 proclaims

the election

3, 5, and 7 pass

3, 5, and 9

7

7 supercedes 55 suppresses 3,3 passes 9 on,

5 and 3 suspect,

9

repair ring

17 dies,

9

17

5

3 12

17

6

7

3 12

9 6

717

5

3 12

9 6

717

5

7

3 12

9 6

7

5

17

3 12

9 6

717

17

5

3 12

9 6

17

5

3 12

9 6

7

5

3 12

9 6

717

5

5

3 12

9 6

7

29