First Theoretical Presentation Team : Sistemas Soperativos Students: Jorge
Richie
Jose Using: nachOS version 3.4 (c++) . Contents: 1) Algorithm for solving producer consumer problem using locks. 2) Algorithms for testing the locks functionallity.
Producer Consumer with locks. consumer(){ bool hasConsumerLock = false; while(1){ if(!hasConsumerLock){ consumerLock->Acquire(); hasConsumerLock = true; } if(products > 0){ changeProductsState->Acquire(); products--; changeProductsState->Release(); consumerLock->Release() hasConsumerLock = false; } } } producer(){ bool hasProducerLock = false; while(1){ if(!hasProducerLock){ producerLock->Acquire(); hasProducerLock = true; } if(products < maxProducts){ changeProductsState->Acquire(); products--; changeProductsState->Release(); producerLock->Release() hasProducerLock = false; } } } int maxProducts; int products; Lock *consumerLock; Lock *producerLock; Lock *changeProductsState;
Producer producer(){ bool hasProducerLock = false; while(1){ if(!hasProducerLock){ producerLock->Acquire(); hasProducerLock = true; } if(products < maxProducts){ changeProductsState->Acquire(); products++;//producing changeProductsState->Release(); producerLock->Release() hasProducerLock = false; } } }
Consumer consumer(){ bool hasConsumerLock = false; while(1){ if(!hasConsumerLock){ consumerLock->Acquire(); hasConsumerLock = true; } if(products > 0){ changeProductsState->Acquire(); p roducts--; //consuming changeProductsState->Release(); consumerLock->Release() hasConsumerLock = false; } } }

Theoretical presentation1nachos

  • 1.
    First Theoretical PresentationTeam : Sistemas Soperativos Students: Jorge
  • 2.
  • 3.
    Jose Using: nachOSversion 3.4 (c++) . Contents: 1) Algorithm for solving producer consumer problem using locks. 2) Algorithms for testing the locks functionallity.
  • 4.
    Producer Consumer withlocks. consumer(){ bool hasConsumerLock = false; while(1){ if(!hasConsumerLock){ consumerLock->Acquire(); hasConsumerLock = true; } if(products > 0){ changeProductsState->Acquire(); products--; changeProductsState->Release(); consumerLock->Release() hasConsumerLock = false; } } } producer(){ bool hasProducerLock = false; while(1){ if(!hasProducerLock){ producerLock->Acquire(); hasProducerLock = true; } if(products < maxProducts){ changeProductsState->Acquire(); products--; changeProductsState->Release(); producerLock->Release() hasProducerLock = false; } } } int maxProducts; int products; Lock *consumerLock; Lock *producerLock; Lock *changeProductsState;
  • 5.
    Producer producer(){ boolhasProducerLock = false; while(1){ if(!hasProducerLock){ producerLock->Acquire(); hasProducerLock = true; } if(products < maxProducts){ changeProductsState->Acquire(); products++;//producing changeProductsState->Release(); producerLock->Release() hasProducerLock = false; } } }
  • 6.
    Consumer consumer(){ boolhasConsumerLock = false; while(1){ if(!hasConsumerLock){ consumerLock->Acquire(); hasConsumerLock = true; } if(products > 0){ changeProductsState->Acquire(); p roducts--; //consuming changeProductsState->Release(); consumerLock->Release() hasConsumerLock = false; } } }
  • 7.
    Testing lock implementationFairness Liveness Lock *l; Fairness(){ while(1){ l->Acquire(); #some critical computation # goes here l->Release(); print &quot;threadName adquired the lock&quot; } } Lock *l; Liviness(){ while(1){ print &quot;threadName ask for the lock&quot;; l->Acquire(); print &quot;threadName acquired the lock&quot;; l->Release(); print &quot;threadName released the lock&quot;; } } Remember that nachOS use a FCFS scheduler “until now”.
  • 8.
    Safety Here thecode produce a deadlock on porpuse to show that two locks can not have access to the same lock at the same time. Lock *l2; Lock *l3; Rutine1(){ while(1){ l2->Acquire(); l3->Acquire(); #some critical computation goes here l3->Release(); l2->Release(); } } Rutine2(){ while(1){ l3->Acquire(); l2->Acquire(); #some critical computation goes here l2->Release(); l3->Release() ; } }