Verteilte Systeme
Verteilte Systeme
Verteilte Systeme
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />
Der Client<br />
<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />
Auftragsempfang bei einem Server<br />
client {<br />
sendGroup(druckserverGroup, druckTask);<br />
receive (ackNachricht);<br />
}<br />
taskReceive (task) {<br />
if (task ⊂ missing) remove task from missing;<br />
else {<br />
add task to taskQ;<br />
if !busy {<br />
contention-Nachricht mit taskId, MyPID, MyPrio an<br />
rechten Ringnachbarn senden;<br />
}<br />
}<br />
}<br />
<strong>Verteilte</strong> <strong>Systeme</strong>-VI 21<br />
<strong>Verteilte</strong> <strong>Systeme</strong>-VI 22<br />
<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />
Ankunft einer contention-Nachricht beim Server<br />
<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />
Ankunft einer contention-Nachricht beim Server<br />
contentionReceive (c) {<br />
if (c.PID == MyPID) {<br />
busy = true;<br />
activeTask = Top(taskQ);<br />
Druckauftrag(activeTask) bearbeiten;<br />
send (clientId, ACK);<br />
delete activeTask;<br />
busy = false;<br />
{<br />
else { //fremde contention-Nachricht<br />
if (c.taskId ⊄ taskQ) {//task ist unbekannt<br />
add c.taskId zu missing;<br />
c weiterleiten auf Ring;<br />
}<br />
else {//task ist bekannt<br />
if (!Konflikt) {//kein Wettbewerb um diesen Auftrag<br />
remove c.taskId from taskQ;<br />
c weiterleiten auf Ring;<br />
}<br />
else {//Konflikt, d h. Wettbewerb um den Auftrag<br />
if (MyPrio < c.Prio) {//ich bin Verlierer<br />
remove c.taskId from taskQ;<br />
c weiterleiten;<br />
}<br />
<strong>Verteilte</strong> <strong>Systeme</strong>-VI 23<br />
<strong>Verteilte</strong> <strong>Systeme</strong>-VI 24