29
Synchronization with Eventcounts and Sequencers David P. Reed Rajendra K. Kanodia

Synchronization with Eventcounts and Sequencers

  • Upload
    alexis

  • View
    36

  • Download
    0

Embed Size (px)

DESCRIPTION

Synchronization with Eventcounts and Sequencers. David P. Reed Rajendra K. Kanodia. Introduction. What is it used for? Synchronizing the use of shared resources How is it different from semaphores and monitors? Mutual exclusion. EventCounts. What is an eventcount? - PowerPoint PPT Presentation

Citation preview

Page 1: Synchronization with Eventcounts and Sequencers

Synchronization with Eventcounts and

Sequencers

David P. Reed

Rajendra K. Kanodia

Page 2: Synchronization with Eventcounts and Sequencers

Introduction

What is it used for?

Synchronizing the use of shared resources

How is it different from semaphores and monitors?

Mutual exclusion

Page 3: Synchronization with Eventcounts and Sequencers

EventCounts

What is an eventcount?

Tracks number of events

Non-decreasing integer variable

Page 4: Synchronization with Eventcounts and Sequencers

EventCount operations

advance(E)

read(E)

await(E, v)

Page 5: Synchronization with Eventcounts and Sequencers

advance( E )

Signals occurrence of an event

Update eventcount value

Page 6: Synchronization with Eventcounts and Sequencers

read( E )

Returns value of eventcount

May or may not count events in progress

Page 7: Synchronization with Eventcounts and Sequencers

await( E, v )

Similar to read( E )

Waits for value v to be reached

May not return immediately once the vth advance is executed

Page 8: Synchronization with Eventcounts and Sequencers

Producer/Consumer Example

N-cell ring buffer

buffer[0:N –1]

Eventcounts IN and OUT

produce() to generate items

Page 9: Synchronization with Eventcounts and Sequencers

Single producer code

Procedure producer() begin integer i; for i:= 1 to infinity do begin await( OUT, i – N); buffer[i mod N] := produce( ); advance( IN ); end end

Page 10: Synchronization with Eventcounts and Sequencers

Single consumer codeProcedure consumer() begin integer i; for i := 1 to infinity begin await( IN, i ); consume( buffer[i mod N]); advance( OUT ); end end

Procedure producer()

begin integer i;

for i:= 1 to infinity do

begin

await( OUT, i – N);

buffer[i mod N] := produce( );

advance( IN );

end

Page 11: Synchronization with Eventcounts and Sequencers

Possible Situations

Fast Producer Producer will wait until item it

is trying to overwrite is consumed.

Fast Consumer Consumer will wait until the

producer has added the value.

Page 12: Synchronization with Eventcounts and Sequencers

EventCount observations

How is this solution different than semaphores?Relative ordering rather than mutual exclusion.Producer & consumer can be concurrent. Never does a process have to wait due to synchronization.

Page 13: Synchronization with Eventcounts and Sequencers

Sequencers

Used when synchronization requires arbitrationUsed to order the events Useful with Eventcounts but not on its own Non-decreasing integer value

Page 14: Synchronization with Eventcounts and Sequencers

Sequencer operations

ticket(S) Value returned is the

process’s ordering. Two calls to ticket( S ) will

always return different values.

Page 15: Synchronization with Eventcounts and Sequencers

Producer/Consumer Example

Same as with Eventcounts but multiple producers now

Sequencer T

Use ticket(T) to synchronize with other producers

Page 16: Synchronization with Eventcounts and Sequencers

Procedure producer() begin integer t; do forever begin t := ticket(T); await( IN, t); await( OUT, t – N + 1 ) buffer[t+1mod N] := produce( ); advance( IN ); end end

Procedure producer()

begin integer i;

for i:= 1 to infinity do

begin

await( OUT, i – N);

buffer[i mod N] := produce( );

advance( IN );

end

Page 17: Synchronization with Eventcounts and Sequencers

Relation to semaphores

Lower level than Semaphores

Semaphores can be built from Eventcounts and Sequencers

Page 18: Synchronization with Eventcounts and Sequencers

Semaphore Example

Semaphore S

EventCount is S.E

Sequencer is S.T

Initial value of S is S.I

Page 19: Synchronization with Eventcounts and Sequencers

Semaphore Wait

Procedure P(S)

begin integer t;

t := ticket( S.T );

await( S.E, t – S.I );

end

Page 20: Synchronization with Eventcounts and Sequencers

Semaphore Signal

Procedure V( S )

begin

advance( S.E )

end

Page 21: Synchronization with Eventcounts and Sequencers

Deadlock Free Simultaneous P

2 Semaphores R and S

Global semaphore G to synchronize part of operation

Page 22: Synchronization with Eventcounts and Sequencers

Procedure Pboth( R, S )

begin integer g, r, s;

g := ticket( G.T );

await( G.E, g );

r := ticket( R.T );

s := ticket( S.T );

advance( G.E );

await( R.E, r – R.I );

await( S.E, s – S.I );

end

Page 23: Synchronization with Eventcounts and Sequencers

Observations

G is used for obtaining tickets await operation could be deferredUseful in solving the Dining Philosophers Problem

Page 24: Synchronization with Eventcounts and Sequencers

Observations

Process destroyed while holding 1 ticket

Keep the window during which a process has an unredeemed a ticket short

Don’t allow destroying the process during the window

Page 25: Synchronization with Eventcounts and Sequencers

Flow of information

operations are: Observer or Signaler unlike the semaphore wait

Easily adapted to permissions Observer permission(advance). signaler permission(read,await).

Useful in secure systems

Page 26: Synchronization with Eventcounts and Sequencers

Secure Readers - Writers

Shared database

Readers have observer permission

Writers have observer and signaler permission

Writer priority

S and C are eventcounts

T is a sequencer

Page 27: Synchronization with Eventcounts and Sequencers

Reader code

Procedure reader()

begin integer w;

abort: w := read(S);

await(C, w);

“read DB”

if read(S) ≠ w then goto abort;

end

Page 28: Synchronization with Eventcounts and Sequencers

Writer code

Procedure writer()

begin integer t;

advance( S );

t := ticket( T );

await( C, t );

advance( C );

end

Page 29: Synchronization with Eventcounts and Sequencers

Conclusion

new mechanism for synchronization.not based on mutual exclusion.Provides an interface between processes.Information flow paths are clear.Effective in secure systems.Unnecessary serialization avoided.