Betriebssystembau (BSB): 01

Transcrição

Betriebssystembau (BSB): 01
Betriebssystembau (BSB)
7. Übung
http://ess.cs.tu-dortmund.de/DE/Teaching/WS2014/BSB/
Olaf Spinczyk
[email protected]
http://ess.cs.tu-dortmund.de/~os
AG Eingebettete Systemsoftware
Informatik 12, TU Dortmund
Agenda
●
Nachtrag: Die unterbrechungstransparente Queue
●
Korrektheitsbeweis mit SPIN
●
Vorstellung Aufgabe 7
13.01.15
Betriebssystembau: 7. Übung
2
Agenda
●
Nachtrag: Die unterbrechungstransparente Queue
●
Korrektheitsbeweis mit SPIN
●
Vorstellung Aufgabe 7
13.01.15
Betriebssystembau: 7. Übung
3
Knifflige Zeiger: Queue in Aufgabe 3
●
Queue-Elemente erben von Chain
–
●
Sie erben damit auch einen Zeiger
auf das nächste Element
Ein Queue-Objekte enthält
class Chain {
public:
Chain* next;
};
–
einen Zeiger auf das erste Element
–
einen Zeiger auf einen Zeiger namens 'tail'!?
class Queue {
Chain* head;
Chain** tail;
public:
Queue () { head = 0; tail = &head; }
void enqueue (Chain* item);
Chain* dequeue ();
void remove (Chain*);
};
13.01.15
Betriebssystembau: 7. Übung
4
Knifflige Zeiger: Queue in Aufgabe 3
●
'tail' ist ein Zeiger auf den 'next' Zeiger im letzten Element
–
Das macht das Anhängen (enqueue) sehr einfach:
q
q.enqueue(&e1)
item->next = NULL;
NULL
*tail = item;
q.enqueue(&e2)
13.01.15
e2
'b'
NULL
?
'a'
'b'
NULL
?
'a'
'b'
NULL
?
'a'
'b'
...
tail = &item->next;
e1
'a'
item->next = NULL;
*tail = item;
tail = &item->next;
NULL
Betriebssystembau: 7. Übung
5
Unterbrechungstransparente Queue
An der Tafel bzw. in ...
[1] F. Schön, W. Schröder-Preikschat, O. Spinczyk, and U.
Spinczyk. On Interrupt-Transparent Synchronization in an
Embedded Object-Oriented Operating System. In The Third
IEEE International Symposium on Object-Oriented
Real-Time Distributed Computing (ISORC 2000), pages 270277, Newport Beach, California, March 15-17,
2000. IEEE Computer Society. ISBN 0-7695-0607-0.
13.01.15
Betriebssystembau: 7. Übung
6
Agenda
●
Nachtrag: Die unterbrechungstransparente Queue
●
Korrektheitsbeweis mit SPIN
●
Vorstellung Aufgabe 7
13.01.15
Betriebssystembau: 7. Übung
7
Model Checking (mit SPIN)
●
●
Kein deduktiver mathematischer Beweis!
Korrektheitsbeweis durch vollständige Analyse des
Zustandsraumes
–
Zustandsraum muss endlich sein
●
–
Komplexitätsgrenzen für große Systeme/Algorithmen
●
●
Feste Anzahl von Prozessen, Wertebereiche, Speicher, …
Verifikation eines vereinfachten Modells (→ Model Checking)
Grundprinzip
–
Modell und negierte Korrektheitsanforderungen → Endliche Automaten
–
Suche: Eingabestring, den beide Automaten akzeptieren
(Gegenbeispiel)
13.01.15
Betriebssystembau: 7. Übung
8
Model Checking mit SPIN
●
Modellierung des Systems/Algorithmus' in PROMELA
–
Sehr einfache/reduzierte Sprache ähnlich zu C/Java
●
●
Keine Zeiger, Referenzen, Funktionen, Klassen, Generics, …
–
Abstraktion auf das Wesentliche → Minimale Zustandsautomaten
–
Achtung: Modell ⇔ Implementierung ?
Spezifikation der Korrektheitsanforderungen
–
assert(...) Anweisungen (lokal)
–
Lineare temporale Logik (global)
13.01.15
Betriebssystembau: 7. Übung
9
Beispiel: Gegenseitiger Ausschluss
// Peterson's solution to the mutual exclusion problem (1981)
bool turn, flag[2];
// the shared variables, booleans
byte ncrit;
// nr of procs in critical section
active [2] proctype user() { // two processes
assert(_pid == 0 || _pid == 1);
again:
flag[_pid] = 1;
turn = _pid;
(flag[1 - _pid] == 0 || turn == 1 - _pid);
ncrit++;
assert(ncrit == 1);
ncrit--;
}
//
//
//
//
13.01.15
// critical section
flag[_pid] = 0;
goto again
analysis:
$ spin -a peterson.pml
$ gcc -o pan pan.c
$ ./pan
Betriebssystembau: 7. Übung
Boolsche Ausdrücke
(ohne if) blockieren
bis die genannte
Bedingung eintrifft
10
Agenda
●
Nachtrag: Die unterbrechungstransparente Queue
●
Korrektheitsbeweis mit SPIN
●
Vorstellung Aufgabe 7
13.01.15
Betriebssystembau: 7. Übung
11