Realzeitprogrammierung Flashcards

1
Q

Was muss in einem System gegeben sein, damit Deadlocks auftreten können?

A

Damit in einem System Deadlocks auftreten können, müssen folgende vier Bedingungen gleichzeitig erfüllt sein:

  1. Ressourcen stehen nur exklusiv zur Verfügung, d.h. mehrere Tasks können somit nicht gleichzeitig auf die Ressourcen zugreifen.
  2. Eine Task arbeitet mit mehreren Ressourcen gleichzeitig, hält also eine Ressource, während sie auf eine andere wartet.
  3. Die Ressource kann einer Task nicht einfach entzogen werden.
  4. Bei der Benutzung der Ressourcen der Tasks untereinander entsteht eine zyklische Kette.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wann sollten Spinlocks einem Mutex oder einer Semaphore vorgezogen werden?

A

Spinlocks werden einem Mutex oder Semaphor dann vorgezogen, wenn die Bearbeitungszeit des kritischen Abschnitts deutlich kürzer ist als die Zeit, die für einen Kontextwechsel benötigt wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was ist relatives Schlafen?

A

Beim realtiven Schlafen wird mitgeiteilt wie lange die Zeitspanne des Schlafens sein soll (z.B. 100ms).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was ist absolutes Schalfen?

A

Beim absoluten Schlafen wird mitgeiteilt bis wann geschlafen werden soll (z.B. bis 5:12 Uhr).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Welche Vorteile hat das absolute Schlafen gegenüber dem relativen Schlafen?

A
  • Schlafende Rechenprozesse werden unter Umständen zwischendurch aufgeweckt (weil beispielsweise ein Signal eintrifft).
  • Anhand des Rückgabewertes der Funktion zum Schlafenlegen ist erkennbar, dass die anvisierte Zeit noch nicht vollständig abgelaufen ist.
  • Der Job wird also auf die Restzeit erneut schlafen gelegt. Das Auswerten und erneute Schlafenlegen kostet jedoch Rechenzeit, die sich als Fehler auf die Gesamtschlafenszeit aufaddiert. Dadurch kann es vorkommen, dass beim relativen Schlafen zu lange geschlafen wird.
  • Beim absoluten Schlafen gibt es diesen Fehler nicht.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist der Unterschied zwischen Direct-IO und Buffered-IO? Welche der beiden Varianten eignet sich für Realzeitsysteme?

A
  • Von Direct-IO spricht man, Wenn Ein- und Ausgabebefehle (z.B. read() oder write()) direkt ohne Verzögerungen umgesetzt werden.
  • Von Buffered-IO spricht man, wenn bei Ein- und Ausgabebefehlen (z.B. fread() oder fwrite()), die Daten aus Gründen der Effizienz gepuffert werden. Erst wenn es sinnvoll erscheint, werden die zwischengespeicherten Daten transferiert.
  • Da nur die Direct-IO-Funktionen die volle Kontrolle über die Ein- und Ausgabe geben, werden in Realzeitapplikationen nur diese für den Datentransfer mit der Peripherie eingesetzt.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Was ist eine Condition-Variable?

A

Eine Condition-Variable ist ein Synchronisationselement, welches Rechenprozessen erlaubt, so lange den Prozessor freizugeben, bis eine bestimmte Bedingung erfüllt ist. Die Signalisierung kommt synchron zum Programmablauf und wird synchron verarbeitet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wofür werden Signale verwendet?

A

Ein Signal führt zu einer Unterbrechung des Programmablaufs innerhalb der Applikation. Das Programm wird dann entweder abgebrochen oder reagiert mit einem vom Programm zur Verfügung gestellten Signal-Handler. Die Signalisierung kommt asynchron zum Programmablauf und wird asynchron verarbeitet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wie funktioniert die klassische Ein- bzw. Ausgabe?

Welches Problem besteht hierbei?

A
  • Auf klassischem Wege werden Daten kopiert, indem die Applikation einen Buffer reserviert und dann per read() Daten von der Eingabequelle in diesen Buffer transferieriern lässt. Typischerweise werden vom Kernel hierzu die Daten über den Gerätetreiber zunächst in den Kernel-Speicher gelesen und von dort in den von der Applikation bereitgestellten Buffer kopiert. Sind die Daten dort angelangt, übergibt die Applikation per write() die Daten dem Kernel, der sie typischerweise noch einmal zwischenspeichert und dann den Gerätetreiber aktiviert, damit dieser den eigentlichen Schreibzugriff durchführt.
  • Um Daten von A nach B zu kopieren, werden diese also bis zu viermal angefasst und es gibt mehrere Kontextwechsel, was nicht wirklich effizient ist.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie können Daten effizenter als mit der klassischen Ein- bzw. Ausgabe von A nach B kopiert werden?

A

Um Daten effizient von A nach B zu transferieren, gibt es den sognenannten splice()-Systemcall. Mit diesem werde Daten ohne Umweg über das Userland direkt von der Eingabequelle an die Ausgabequelle kopiert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wie kann das Auslagern von Speicherseiten (Swapping) einer Anwendung verhindert werden?

A

Das Auslagern von Speicherseiten lässt sich mittels mlock() bzw. mlockall() verhindern. Dabei werden die Speicherseiten, die zum übergebenen Adressbereich gehören markiert, sodass sie von der Speicherverwaltung des Kernels nicht mehr ausgelagert werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Welche Aspekte sollte eine Realzeitapplikation bezüglich des Memory Managements beachten?

A

Eine Realzeitapplikation sollte bezüglich Memory Management die folgenden drei Aspekte beachten:

  1. Sie muss das Auslagern von Speicherseiten (Swapping) verhindern
  2. Sie beugt Verzögerungen vor, die entstehen können, wenn die Realzeitapplikation Daten auf dem Stack ablegt. Daher reserviert die Realzeitapplikation direkt zu Beginn der Verarbeitung ausreichend Speicher auf dem Stack (Stack-Prefault).
  3. Sie beugt Verzögerungen vor, die entstehen können, wenn die Realzeitapplikation Daten auf dem Heap ablegt. Daher reserviert die RT-Applikation direkt zu Beginn per malloc() den benötigten Speicher (Heap-Prefault).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was versteht man unter Prefault?

A
  • Unter Prefault versteht man eine Technik, mit der ein Betriebssystemkern veranlasst wird, später benötigte Speicherseiten vorzeitig in den Adressraum der Realzeitapplikation einzubinden.
  • Der Trick besteht darin, direkt zu Beginn der Realzeitapplikation sämtlichen Speicher zu reservieren, der später benötigt wird. Das betrifft sowohl den Stack als auch den Heap.
  • Hierbei ist es wichtig, den Speicher nicht nur anzufordern, sondern auch einmal auf den Speicher zuzugreifen.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly