Starting from:

$30

CMPE322 AN OPERATING SYSTEM SYNCHRONIZATION IMPLEMENTATION Project Series Solved

AN      OPERATING          SYSTEM       SYNCHRONIZATION      IMPLEMENTATION       

  CMPE322          project series   is          a          set       of         projects            that      teaches how      to         construct          an        operating            system, named  BUnix   (written in         institutional      colors   of         Boğaziçi            University         J         ),          from     scratch. In         the            first      project, you      scheduled         processes         which   are       independent     from     each     other.   In         addition            to         your            implementation            of         the       first      project, now      these    processes         have     to         use       the       same    critical  resources,            thus     you      also      have     to         synchronize      them    with     binary   semaphores.                 

Scenario       in        the      Second          Project          
BUnix    manages           a          hardware          which   has       some    critical  resources         that      only      one      process at         a          time            is          allowed to         use.      So,       you      inform  your     BUnix   coders  that      if          they     need    to         use       a          critical            section, they     have     to         write    “waitS_[Semaphore_No]”         to         not       permit  other    processes         to         use       that            critical  resource.          Also,     you      remind them    that      they     should  not       forget   to         write    “signS_[Semaphore_No]”          to            release this       critical  section after     it          is          completed.       You      allow    them    to         use       at         most    10        semaphores            which   are       numbered        from     0          to         9.         After    all,        they     compile their     new      codes   which   is          in         the            form     that      is          presented         in         Table    1.         

 

INSTRUCTION   NAME   
INSTRUCTION   EXECUTION       TIME    (ms)            
instruction_1    
20        
instruction_2    
20        
waitS_0 
0          
instruction_3    
50        
instruction_4    
20        
signS_0 
0          
waitS_2 
0          
instruction_5    
30        
instruction_6    
30        
signS_2 
0          
instruction_7    
30        
.           

.           

.           
.           

.           

.           
exit      
10        
                                             Table                                        1 –          A          Text      Based   Program           Code     File       Example                       

The    Synchronization   Code  
In         addition            to         the       first      project, we        want    you      to         implement        the       following          parts    in         your            second project: 

•       Implement        a          wait      queue   for        each     semaphore.                  These   wait      queues should  be        a          FIFO     again.   

•       Implement        “waitS” operation:        

o    If         it          is          not       used     by        any       process allow    the       current process to         use       it          and      lock      the           semaphore.      

o    Otherwise        remove this       process from     the       ready    queue   and      send     it          to         the       corresponding  wait           queue.  

o    Prevent           the       starvation         of         a          process in         wait      queue.  Allow    a          process to         use       this           semaphore       before  any       other    process wants   to         use       this       semaphore.      For       example,          P1        calls           waitS_0 and      starts    to         use       critical  section. Then     P3        calls      waitS_0 before  P1        calls      signS_0 which           means  that      you      have     to         send     P3        to         the       wait      queue   of         the       semaphore       0.         You           have     to         send     any       other    process (P1       included)          to         this       wait      queue   if          they     call           waitS_0 before  P3        calls      signS_0.                        

•       Implement        “signS” operation:        

o    Allow   the       use       of         this       semaphore       again.   o If       there    is          any       process in         the       wait      queue   of           semaphore,      remove it          from     the       wait      queue   (do       not       forget   that      this       queue   is          a           FIFO!)   and      send     it          to         the       ready    queue.  

o    Continue          to         run       this       process.            

•       An        output  mechanism       that      generates         a          file       to         present the       ready    queue   and      wait      queues whenever it          is          changed           by        the       algorithm.         The      format  of         the       files      should  be        same    as         the       first project.            

•       Ready   queue   output  name    should  be        “output.txt”      again.   Wait     queue   output  names  should  be “output_[Semaphore_No].txt”, e.g.       “output_0.txt”, “output_1.txt”. If          a          semaphore       queue   is          not       used     according to         test      input    files,     you      don’t    have     to         create   it.         

Restrictions      in         Test      Input    Files     

The      following          restrictions       are       added   to         reduce  complexity        of         the       implementation.           

•       In         our       test      definition          files:     

o    P1       will       always  arrive   at         time     0          o Process         arrival   times    will       increase            in         each     row.     

o    There  will       be        always  a          process in         the       ready    queue   according         to         test      definition          files.     So,           you      don't    have     to         worry   about   what    to         do        in         "idle     CPU"    state.                

•       If          a          running process and      a          new      arrived process should  have     been    enqueued         at         the       same    time,    first enqueue           the       new      arrived process and      then     the       running process.            For       example:          

140::HEAD-P2-P1-TAIL 

250::HEAD-P1-P3-P2-TAIL  

P2        consumes         its        dedicated         time     slot       at         250      and      P3        has       arrived at         the       same    time.    First enqueue           P3        and      then     P2.       

•       Your     output  file       does     not       have     to         show    the       ready    queue   when    a          new      process has       arrived. 

For       example:          

P1 has arrived at time 0 

P2 has arrived at time 120 P3 has arrived at time 250 Output:         

0::HEAD-P1-TAIL 

120::HEAD-P1-P2-TAIL 

140::HEAD-P2-P1-TAIL 

250::HEAD-P1-P3-P2-TAIL 

290::HEAD-P3-P2-TAIL 

You       do        not       have     to         show    the       second line       (time    120).    On        the       other    hand,    you      have     to         show the       fourth   line       (time    250)     when    P3        is          arrived but       also      P1        starts    to         execute by        CPU.     

•       Execution          time     of         waitS    and      signS    operations        are       always  0.         

•       Your     BUnix   coders  are       really    good    coders  that      never   call       another waitS    command         before  releasing          the first      one.     So,       don’t    be        afraid   from     a          deadlock.          You      will       never   see       a          code     like Table-2.            

INSTRUCTION    NAME   
INSTRUCTION   EXECUTION       TIME    (ms)            
waitS_0 
0          
instruction_3    
50        
waitS_2 
0          
instruction_5    
30        
signS_0 
0          
Table    2          –          A          Code     Example           that      may      cause    a          deadlock           

Development         Platform      
            You      have     to         implement        your     design  in         the       Linux    Platform           with     GCC/G++          Compiler.         We            strongly            advise   you      to         install   Ubuntu which   has       pre-installed     GCC/G++          compiling         tools.    We       will       test            your     code     in         this       platform           and      if          your     compiled          code     is          not       compatible       with     the       test            platform,          you      might   be        invited  for        a          demo,  if          necessary.        

Provided      Files   
The following          files      are       given    together           with     the       project: 

•       The process definition          file       (number           of         processes         and      their     arrival   times    will       be        modified           to      test      your     code).   

•       Four           program           code     files      (number           of         instructions,     their     names  and      their     execution         times    will      be        modified           to         test      your     code.    Only     exception         is          the       last       instruction        name    is      always  “exit”   and      its        execution         time     is          10        milliseconds).    

•       The expected          output  file.      

•       Note:          The      length  of         the       time     slot       is          a          constant           value    in         BUnix   operating          system (100      milliseconds).    

Project          Requirements        
•       Your     project should  have     generated         the       expected          output  file       for        modified           process definition          file       and program           code     files.                 (80%)   

•       The       source  code     documentation. The      documentation depends           on        your     design  style     but       at         least     having comments        that      explain your     code     is          strongly            advised.            (20%)   

            

 

More products