Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » Lösungsvorschlag   (Übersicht)

Dies ist eine alte Version des Dokuments!


Lösungsvorschlag

Aufgabe 3:

a.

void bbPut(BNDBUF *bb,int value){
 
 
 
    P(bb->Sem_full);
    P(bb->Erz);//synchonisierung für die Erzeuger. Wird mit 1 initialisiert.
 
    bb->space[b->freeNextSpace++] = value; /
 
    bb->freeNextSpace= (bb->freeNextSpace)%(bb->SpaceLenghth);
 
    V(bb-Erz);
 
    V(bb->SEM_empty);
 
    }else{
 
    return;
 
    }
 
 void bbGet(struct data *data){
 
        int i =0;
 
        P(bb->Sem_empty);
 
    data= space[readPos];
 
    P(bb->Ver);.
 
    readPos=(reasPos+1)% (bb->SpaceLength);
 
    V(bb->Ver);
 
    V(bb->SEM_FULL);
    }
 
 

b.

Die Verwendung blockierender Synchronisatzionsverfahren ist nicht immer Unproblematisch. Beschreiben sie 3 Problembereiche,die blockierende Synchronisation

1. „spinn lock“ reduziert ggf. massiv die Busbreite

2.Robustheit: EIn im kritischen Zustand scheiternder Prozess kann im worst case das ganze System lahmlegen

3.Einplanung: wird behindt sich bringen kann.buddyworst-fit er/nicht durchgesetzt,weniger wichtige Prozesse können wichtige ausbremesen⇒prioritätenumkehr

4. Verklemmung einer oder mehrere Prozesse c. Im get() in dem Bespiel aus den Übungen haben wir iN(nächster Freier Platz) und iNnext (der Berechnete neue Platz) durch CAS geschützt,CAS prüft in einer Schleife, ob die kritische Variable nebenläufig verändert wurde. Im allg. können wir bb→Erz und bb→Ver mit nicht blockierender synch. ersetzen. d. Hab ich oben eigentlich schon erklärt^^