CSCU9V5   
CSCU9V5:	   Concurrent	   	   Distributed	   Systems	    
  
RESIT	   Assignment	   2	   -‐-‐	   Distributed	   Systems	    
  
  
Assignment	   Outline	    
  
This	   assignment	   covers	   material	   presented	   during	   the	   lectures	   on	   distributed	   systems	   and	   builds	    
upon	   the	   work	   in	   the	   distributed	   practicals.	   The	   deadline	   for	   submitting	   this	   assignment	   is	   	    
  
  	    	    	    Tuesday,	   24th	   April	   2020	   at	   12:00	   	    
  
A	   mandatory	   demo	   where	   you	   will	   demonstrate	   your	   solution	   to	   the	   given	   problem.	   A	   schedule	    
will	   be	   communicated.	    
 	    
For	    the	    submission	    you	    should	    prepare	    a	    single	    document	    which	    includes	    i)	    a	    short	    report	    
(roughly	    four	   pages	   plus	   a	   cover	   sheet	   with	   your	   student	   number)	   discussing	    the	   problem,	   any	    
assumptions	   you	   made,	   and	   a	   description	   of	   your	   solution;	   as	   well	   as	   ii)	   the	   code	   listings	   of	   your	    
program.	   Please	   use	   appropriate	   report	   headings.	   	    
  The	    report	    should	    include	   appropriate	   diagrams	   of	    the	   design	   and	    screen	    shots	   of	    your	    
application.	   Describe	   the	   various	   classes,	   their	   relationships,	   and	   outline	   the	   class	   methods.	   The	    
report	    should	   explain	   how	   complete	   your	    solution	    is,	   and	    if	   applicable,	   any	    special	    cases	   when	    
your	    program	    is	    not	    functioning	    correctly.	    It	    is	    important	    that	    your	    program	    code	    is	    properly	    
commented,	    and	    neatly	    structured	    for	    readability.	    You	    will	    lose	    marks	    if	    the	    code	    is	    not	    
sufficiently	   commented	   or	   formatted!	    
  
In	   short,	   your	   assignment	   submission	   should	   consist	   of	   (in	   a	   single	   document):	    
• a	   cover	   sheet	   giving	   the	   module,	   title,	   and	   student	   number	    
• a	   document	   of	   about	   4	   pages	   discussing	   the	   problem	   and	   your	   solution	    
• a	   printout	   of	   your	   program	   code	   with	   comments	    
and	    
• a	   zip	   file	   of	   your	   source	   code	   (for	   reference	   purposes	   only).	   	    
  
You	   will	   receive	   marks	   for:	    
• the	   efficacy	   of	   the	   code	   (basic	   solution)	    45%	    
• advanced	   features	   	    	    	    	    20%	    
• the	   report	    	    	    	    	    25%	    
• code	   comments	   and	   structure	    	    10%	    
  
  
CSCU9V5   
Assignment	   Problem	    
  
  
Basic	   Problem	    
This	   assignment	   will	   extend	   the	   theme	   of	   the	   third	   distributed	   laboratory,	   where	   you	   developed	   a	    
Distributed	   Mutual	   Exclusion	    (DME)	   system	   based	   on	   a	   socket-‐based	    token	   ring.	    In	    the	    lab	   you	    
had	   a	   class	   implementing	   a	   ring	   node	   and	   a	   start	   manager	   class	   to	   inject	   a	   token	   to	   start	   off	   the	    
system.	    
  In	   this	   assignment	   you	   will	   develop	   a	   traffic	   light	   centralised	   controller,	   that	   works	   like	   a	    
centralised	   DME.	   The	   system	   will	   consists	   of	   two	   traffic	   lights	   and	   a	   coordinator.	   The	   rule	   is	   that	    
only	   one	   traffic	   light	   at	   the	   time	   can	   expose	   the	   green	   light	   and	   let	   the	   cars	   that	   it	   controls	   go.	   In	    
a	   word,	   the	   green	   light	   of	   the	   two	   traffic	   lights	   must	   be	   mutually	   exclusive.	    
  In	    order	    to	    guarantee	    the	    correct	    functioning	    of	    the	    traffic	    lights,	    a	    given	    coordinator	    
passes	   a	   unique	   token	   to	   each	   one	   of	   the	   two	   traffic	   lights,	   exclusively.	   When	   granted	   the	   unique	    
token,	   a	   traffic	   light	   will	   be	   allowed	   to	   switch	   the	   green	   light	   on,	   keep	   it	   on	   for	   a	   while,	   and	   then	    
switch	   the	   light	   off	   (no	   car	   is	   allowed	   to	   pass)	   and	   return	   the	   token	   to	   the	   coordinator.	   A	   traffic	    
light	    cannot	    switch	    the	    green	    light	    on	    if	    it	    does	    not	    have	    the	    token.	    In	    a	    sense,	    switching	    the	    
green	   light	   on	   is	   a	   critical	   section	   that	   can	   be	   performed	   by	   one	   traffic	   light	   only	   at	   the	   time.	   	    
  You	    can	    assume	    that	    the	    coordinator	    program	    runs	    on	    a	    JVM	   on	    one	    computer	    in	    the	    
system,	    and	    the	    traffic	    light	    programs,	    called	    nodes,	    run	    on	    a	    different	    JVM,	    possibly	    on	    a	    
different	    computer.	    The	    two	    nodes	    are	    connected	    to	    the	    coordinator,	    they	    use	    sockets	    to	    
communicate,	   as	   standard.	   	    
  You	   will	   be	   issued	   with	   a	   skeleton	   solution,	   with	   incomplete	   programs	   for	   the	   coordinator	    
and	   the	   nodes,	   as	   a	   starting	   point.	   It	    is	   strongly	   recommended	   that	   you	   study	   the	   details	   of	   the	    
problem	   and	   the	   general	   functioning	   of	   the	   provided	   implementation.	   	    
  
Each	   node	   will	   be	    running	   on	   a	    specific	   host	    and	   port	    (the	   port	   must	   be	    instantiated	   at	    launch	    
time,	    e.g.	    by	    the	    command	    line).	    For	    simplicity,	    the	    two	    nodes	    and	    the	    coordinator	    will	    be	    
running	    on	    the	    same	    host,	    i.e.	    your	    computer.	    However,	    the	    skeleton	    solution	    proposed	    is	    
general	    and	    could	    work	    on	    different	    hosts.	    Each	    (non-‐coordinator)	    node	    will	    perform	    the	    
following	   loop:	   	    
  
1. request	   the	   token	   from	   the	   coordinator.	   This	   is	   done	   by	   passing	   node's	   ip	   and	   port	   to	   the	    
coordinator	   (the	   coordinator	   listens	   on	   port	   7000	   at	   a	   known	   ip).	   	    
2. wait	   until	   the	   token	   is	   granted	   by	   the	   coordinator.	   Granting	   the	   token	   can	   be	   implemented	    
by	   a	   simple	   synchronisation	   by	   the	   coordinator	   on	   the	   node's	   ip:port,	   analogously	   to	   what	    
done	   for	   the	   socket-‐based	   token	   ring	   that	   you	   developed	   in	   the	   practicals.	    
3. execute	   the	   critical	   region,	   simulated	   by	   printing	   the	   message	   "Green	   light	   ON",	   sleeping	    
for	    about	    3-‐5	    secs,	    and	    printing	    the	    message	    "Green	    light	    OFF",	    clearly	    marking	    the	    
beginning	   and	   end	   of	   the	   critical	   section.	   Important:	   the	   two	   nodes	   (and	   the	   coordinator)	    
will	    run	    on	    different	    windows	    (open	    more	    console	    windows	    or	    better	    use	    three	    
terminals/CMD	   in	   three	   different	   windows).	   It	   must	   be	   evident	   that	   only	   one	   node	   at	   the	    
time	   is	   executing	   the	   critical	   session.	   Adapt,	   if	   needed,	   (random)	   timings	   to	   facilitate	   the	    
understanding	   of	   programs'	   execution,	   and	   to	   test	   your	   program.	   	    
CSCU9V5   
4. return	   the	   token	   to	   the	   coordinator.	   This	   can	   also	   be	   done	   by	   means	   of	   a	   synchronisation	    
message	   (the	   coordinator	   listens	   on	   port	   7001).	   	    
  
The	   coordinator	   consists	   of	   two	   concurrent	   tasks	   that	   share	   a	   buffer	   data	   structure:	    
  
• a	    receiver	    that	    listen	    for	    requests	    from	    nodes.	    Requests	    consist	    of	    ip	    and	    port	    sent	    
through	    a	    socket	    (on	    port	    7000).	    On	    connection,	    the	    receiver	    will	    spawn	    a	    thread	    
(C_connection_r)	   	   that	   receives	   ip	   and	   port,	   and	   store	   them	   in	   the	   buffer	   using	   a	   request	    
data	   structure,	   defined	   in	   the	   code.	    
• a	   mutex	   thread	   that	   constantly	   fetches	   requests	   from	   the	   buffer,	   if	   any	   (!),	   in	   a	   FIFO	   order.	    
For	    each	    request,	    the	    mutex	    grants	    the	    token	    to	    the	    requesting	    node,	    by	    a	    simple	    
synchronisation	   to	   the	   node's	   indicated	   port.	   Then,	   it	   waits	   for	   the	   token	   to	   be	   returned	    
by	   means	   of	   a	   synchronisation	   (on	   port	   7001).	   	    
  
All	    sockets/servers	    must	    be	    suitably	    closed.	    All	    exceptions'	    catches	    must	    print	    appropriate	    
messages,	    declaring	    occurred	    exceptions,	    if	    any	    -‐	    there	    should	    be	    none!	    All	    nodes	   must	    print	    
suitable	   messages	   showing	   their	   activities	   as	   suggested,	   e.g.	   star	   and	   stop	   of	   a	   critical	   section	   for	    
nodes,	   and	   granting	   and	   receiving	   the	   token	   back	   for	   the	   coordinator.	   	    
  Add	   some	   suitable	    	    random	   sleeping	   times	   and	   keep	   them	   varied:	    the	   order	   of	   granting	    
the	   token	   to	   nodes	   should	   not	   be	   fixed.	   	   Please,	   test	   the	   case	   of	   one	   "very	   quick"	   traffic	   light	   that	    
issues	    requests	    very	    frequently	    and	    one	    "very	    slow"	    traffic	    light,	    which	    issues	    request	    with	    a	    
lower	   frequency.	   Verify	   that	   the	   fast	   one	   can	   switch	   the	   green	   light	   on	   more	   frequently	   than	   the	    
slow	   one.	    
  All	   relevant	   primitives,	   e.g.	   a	   synchronisation	   communication,	   have	   been	   seen	   in	   labs.	    
  
  Develop	   a	   socket-‐based	   centralised	   DME	   based	   on	   the	   skeleton	   code	   provided.	    
  
  
Advanced	   Features	   	    
  
NOTE:	    basic	    solution	    and	    advanced	    features	   must	    be	    developed	    in	    separate	    files	    in	    different,	    
clearly	   named	   directories.	    
 	    
You	   can	   enhance	   the	   basic	   solution	   by	   implementing	   more	   advanced	   features:	    
  
1. Traffic	    lights	   are	   a	   bit	    less	    clever:	   nodes	   do	   not	   ask	    for	    the	    token	    (we	   can	    imagine	    that	    
they	   do	   so	   depending	   on	   the	   number	   of	   waiting	   cars)	   but	   the	   coordinator	   grants	   the	   token	    
to	   each	   of	   them	   alternatively.	   The	   two	   nodes	   initially	   have	   to	   register	   with	   the	   coordinator	    
in	   order	   to	   communicate	   their	    ip	   and	   port	   -‐	   they	   can	   use	   the	   same	   mechanism	   as	   in	   the	    
previous	   case,	   but	   the	   queue	   of	   pending	   requests	   is	   not	   needed	   anymore.	    
2. Describe	    in	    the	    report	   what	   would	    happen	    if	    the	    coordinator	    crashes.	    Be	    as	    precise	    as	    
possible	   and	   consider	   all	   the	   possible	   relevant	   cases.	    
  
  
CSCU9V5   
Plagiarism	   	    
Work	   which	    is	    submitted	    for	   assessment	   must	   be	   your	   own	   work.	   All	    students	    should	   note	    
that	    the	    University	    has	    a	    formal	    policy	    on	    plagiarism	    which	    can	    be	    found	    at	    
http://www.stir.ac.uk/academicpolicy/handbook/assessmentincludingacademicmisconduct/# 
q-‐8.	   	    
  
Plagiarism	   means	   presenting	   the	   work	   of	   others	   as	   though	   it	   were	   your	   own.	   The	   University	    
takes	   a	   very	   serious	   view	   of	   plagiarism,	   and	   the	   penalties	   can	   be	   severe.	   	    
  
Specific	    guidance	    in	    relation	    to	    Computing	    Science	    assignments	    may	    be	    found	    in	    the	    
Computing	   Science	   Student	   Handbook.	   	   	    
  
We	   check	   submissions	   carefully	    for	   evidence	   of	   plagiarism,	   and	   pursue	   those	   cases	   we	   find.	    
Several	   students	   received	   penalties	   on	   their	   work	   for	   plagiarism	   in	   past	   years.	   Penalties	   range	    
from	    a	    reduced	   mark,	    through	    to	    no	   mark	    for	    the	   module,	    to	    being	    required	    to	   withdraw	    
from	   studies.	   	    
  
Submission	   on	   CANVAS	    
  
Please	   ensure	   you	   submit	   your	   assignment	   on	   CANVAS	   before	   12:00	   on	   24th	   April	   2020.	   This	    
should	   be	   a	   single	   file	   with	   your	   report	   with	   the	   source	   code	   listings,	   and	   a	   zip	   of	   your	   source	    
files.	    
  
  
Late	   submission	   	    
  
If	   you	   cannot	   meet	   the	   assignment	   hand-‐in	   deadline	   and	   have	   good	   cause,	   please	   contact	   the	    
module	    coordinator	    by	    e-‐mail	    (Dr.	    Andrea	    Bracciali)	    before	    the	    deadline	    to	    explain	    your	    
situation,	    and	    ask	    for	    an	    extension	    through	    the	    Extension	    Request	    service	    on	    Canvas.	    
Coursework	   will	   be	   accepted	   up	   to	   seven	   calendar	   days	   after	   the	   hand-‐in	   deadline	   (or	   expiry	    
of	   any	   agreed	   extension),	   but	   the	   grade	   will	   be	   lowered	   by	   3	   marks	   per	   day	   or	   part	   thereof.	    
After	   seven	   days	   the	   work	   will	   be	   deemed	   a	   non-‐submission.