Wir versuchen ein (komplexes) stück hardware und oder software zu "beweisen"
Also nicht schauen, dass es da ist, sondern beweisen, dass es das tut, wozu wir es definiert haben
Idealerweise macht man das eben nicht von hand, sondern eben mit einem Compuper
Wir wollen letztendlich dann alles irgendwie formell definieren und eben auch verifizieren
Wir schauen uns zunächst ein "tolles" szenario an
Das können wir am besten mit diesem bild veranschaulichen:
Wenn wir uns das anschauen, sehen wir, dass wir (hallup time) ein abhängiges System haben, indem sich mehrere Prozesse gegenseitig beeinflussen
Diese zwei prozesse können am ende alles sein, ob jetzt programme, Autos o.ä.
Die können auch nen gemeinsames Ziel verfolgen oder auch eben nicht
Das beste beispiel dabei sind praktisch "Beispiele"
Denn jedes beispiel ist ein System dessen Prozesse ein "gemeinsames" Ziel erreichen (nämlich das zeigen, wozu wir ein beispiel machen)
Denn unterm strich greifen sie auf gemeinsame ressourcen zu
Ein problem was wir dabei erkennen ist, dass vieles nur eine sache gleichzeitig machen kann
Dementsprechend kann dann immer nur ein Prozess drauf zugreifen
Das nennen wir dann "Mutual Exclusion" auch bekannt als der legendäre Mutex
Wir schauen uns jetzt ein Szenario an:
Von zwei Prozessen kann maximal ein Prozess auf eine Gemeinsame Ressource zugreifen
Es gibt einen Kritischen und einen Unkritischen bereich.
Der geteilte bereich, ist dann eben der "kritische" bereich, weil dieser "weitergegeben" werden muss
Wir wollen also garantieren, dass nicht beide Prozesse gleichzeitig in eben diesem Kritischen bereich sind
Das lösen wir am besten eben mit Semaphoren-
Wat dat?
Ein Semaphor "bewacht" eine gemeinsame Ressource, und entscheidet bzw. Signalisiert, ob diese gerade nutzbar ist
Ein Prozess kann sich eine Ressource vom Semaphor "reservieren" lassen, und solange diese Ressource reserviert ist, kann kein anderer Prozess auf eben diese Ressource zugreifen
Der Semaphor behält hier den überblick
Die, und all ihre operationen, sollen Atomar ausführen
Sprich: Das muss für alle immer gleich aussehen, und alles muss in einer festen reihenfolge passieren.
In der realen welt stelt das Betriebssysten eben das sicher
Wie geht das? Man lernt das in Betriebssysteme an
Wir schauen uns eben das in "Dijkstras Protokoll" an.
Initial ist unser Prozess (den wir uns anschauen) im Unkritischen bereich
Der Prozess entscheidet jetzt, dass er die geteilte ressource braucht
Jetzt schaut er, ob sie frei ist, und wartet wenn sie nicht frei ist
Wenn die ressource dann frei ist, signalisiert der Prozess dem Semaphor, dass er die Ressource nutzen will und dieser Reserviert diese dann für unseren prozess
Dann ist der Prozess im sog. Kritischen Bereich, und hat alleinigen zugriff auf die ressource
wenn der Prozess dann fertig mit der Ressource ist, gibt der semaphor die ressource wieder frei, und der Prozess ist wieder im unkritischen bereich
Genauer gesagt, kann es auch passieren, dass ein OS wärend die Prozesse laufen sie zwangsweise abwechseln lässt, aber das ist hier gerade nicht weiter relevant
Wir können so auch sehen, dass Dijkstras Protokoll nicht fair ist, dementsprechend schauen wir uns noch zwei andere Protokolle an:
Letztendlich ist die Große frage die wir uns stellen und die wir entscheiden wollen ist eben, ob die Aussage bzw. das vorliegende Protokoll Stimmt und unseren Vorraussetzungen entpsicht