38
Betriebssystembau (BSB) 5. Übung http://ess.cs.tu-dortmund.de/DE/Teaching/WS2013/BSB/ Olaf Spinczyk [email protected] http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik 12, TU Dortmund technische universität dortmund

Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

Betriebssystembau (BSB)

5. Übung

http://ess.cs.tu-dortmund.de/DE/Teaching/WS2013/BSB/

Olaf Spinczyk

[email protected]://ess.cs.tu-dortmund.de/~os

AG Eingebettete SystemsoftwareInformatik 12, TU Dortmund

technische universität dortmund

Page 2: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 2

technische universität dortmund

embedded system software

Agenda● Aufgabe 4

– Tipps und Tricks

● Aufgabe 5

– Überblick

– PIT-Programmierung

– Präemptives Scheduling

Page 3: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 3

technische universität dortmund

embedded system software

Agenda● Aufgabe 4

– Tipps und Tricks

● Aufgabe 5

– Überblick

– PIT-Programmierung

– Präemptives Scheduling

Page 4: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 4

technische universität dortmund

embedded system software

OO-StuBS: Aufgabe 4

Page 5: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 5

technische universität dortmund

embedded system software

Aufgabenteil a: CoroutineKoroutinenwechsel „von Hand“

Page 6: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 6

technische universität dortmund

embedded system software

toc – Koroutinen für C-ProgrammeStrukturelemente

void *ebx, *esi, *edi, *ebp, *esp;

Funktionen

void toc_settle (struct toc* regs, void* tos, void (*kickoff)(void*), void* object);

Diese Funktion bereitet die Struktur toc für die erste Aktivierung vor.

void toc_go (struct toc* regs);

Diese Funktion lädt die Prozessorregister mit den Inhalten der Struktur regs.

void toc_switch (struct toc* regs_now, struct toc* regs_then);

Diese Funktion führt einen Kontextwechsel durch. Dazu brauchen nur dieaktuellen Registerwerte in regs_now gesichert und durch die Wertevon regs_then ersetzt werden.

Page 7: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 7

technische universität dortmund

embedded system software

toc – Koroutinen für C-ProgrammeStrukturelemente

void *ebx, *esi, *edi, *ebp, *esp;

Funktionen

void toc_settle (struct toc* regs, void* tos, void (*kickoff)(void*), void* object);

Diese Funktion bereitet die Struktur toc für die erste Aktivierung vor.

void toc_go (struct toc* regs);

Diese Funktion lädt die Prozessorregister mit den Inhalten der Struktur regs.

void toc_switch (struct toc* regs_now, struct toc* regs_then);

Diese Funktion führt einen Kontextwechsel durch. Dazu brauchen nur dieaktuellen Registerwerte in regs_now gesichert und durch die Wertevon regs_then ersetzt werden.

Aufruf aus C++ heraus erfordert Deklaration mit extern “C“!Aufruf aus C++ heraus erfordert Deklaration mit extern “C“!

● kickoff ist eine C++-Funktion. Beim Aufruf von toc_settle ist daher ein Type-Cast erforderlich!

● Über tos soll der Stapel initialisiert werden. Geht das mit einem Zeiger auf void?

● kickoff ist eine C++-Funktion. Beim Aufruf von toc_settle ist daher ein Type-Cast erforderlich!

● Über tos soll der Stapel initialisiert werden. Geht das mit einem Zeiger auf void?

Page 8: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 8

technische universität dortmund

embedded system software

CoroutineMethodenCoroutine (void* tos);

Im Koroutinen-Konstruktor werden die Registerwerte so initialisiert, dass der

Stackpointer initial auf tos zeigt und bei der ersten Aktivierung die Ausführung

mit der Funktion kickoff beginnt.

void go ();

Diese Methode dient der ersten Aktivierung der ersten Koroutine im System.

Daher müssen hier keine Registerwerte gerettet werden.

void resume (Coroutine& next); Mit dieser Methode wird ein Koroutinenwechsel ausgelöst.

virtual void action () = 0;

Die Methode action stellt die eigentliche Aufgabe der Koroutine dar.

Page 9: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 9

technische universität dortmund

embedded system software

Aufgabenteil b: DispatcherKoroutinenwechselüber den Dispatcher

Page 10: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 10

technische universität dortmund

embedded system software

Arbeitsteilung● Scheduler

– trifft strategische Entscheidungen zur Ablaufplanung

– betrachtet wird immer eine Menge lauffähiger Fäden● die Fäden sind allgemein in einer CPU-Warteschlange aufgereiht● die Sortierung erfolgt entsprechend der Scheduling-Strategie

– der aktuell laufende Prozess ist immer von der Entscheidung mit betroffen● dazu muss der laufende Faden jederzeit „greifbar“ sein● vor der Umschaltung ist ist der laufende Faden (beim Dispatching) zu vermerken

– ein ausgewählter neuer Faden wird dem Dispatcher übergeben

● Dispatcher

– setzt die Entscheidungen durch und schaltet Fäden um (mit Hilfe von resume)

– merkt sich den gestarteten Faden

Page 11: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 11

technische universität dortmund

embedded system software

DispatcherBeschreibung

Der Dispatcher verwaltet den Life-Pointer, der die jeweils aktive Koroutine angibt und führt Prozesswechsel durch.

Methoden

Dispatcher () Der Konstruktor initialisiert den Life-Pointer mit Null, um anzuzeigen, dass noch keine Koroutine bekannt ist.

void go (Coroutine& first) Mit dieser Methode wird die Koroutine first im Life-Pointer vermerkt und gestartet.

void dispatch (Coroutine& next) Diese Methode setzt den Life-Pointer auf next und führt einen Koroutinenwechselvom alten zum neuen Life-Pointer durch.

Coroutine* active ()

Hiermit kann abgefragt werden, welche Koroutine gerade im Besitz des Prozessors ist.

Page 12: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 12

technische universität dortmund

embedded system software

Aufgabenteil c: Kooperatives SchedulingKoroutinenwechselüber Scheduler

Page 13: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 13

technische universität dortmund

embedded system software

EntrantBeschreibung

Die Klasse Entrant erweitert die Klasse Coroutine um die Möglichkeit, ineinfach verkettete Listen eingetragen zu werden, insbesondere auch in dieReady-Liste des Schedulers. Die Verkettungsmöglichkeit wird durch dieAbleitung von Chain erreicht.

öffentliche Methoden

Entrant (void* tos); Der Entrant Konstruktor gibt nur den Parameter tos an den Koroutinen-Konstruktor weiter.

Vorsicht Mehrfachvererbung! Coroutine und Chain stehen in keiner Vererbungsbeziehung. Expliziter Type-Cast von einem zum anderen führt zu Problemen!

Vorsicht Mehrfachvererbung! Coroutine und Chain stehen in keiner Vererbungsbeziehung. Expliziter Type-Cast von einem zum anderen führt zu Problemen!

Page 14: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 14

technische universität dortmund

embedded system software

SchedulerBeschreibung

Der Scheduler verwaltet die Ready-Liste (ein privates Queue Objekt der Klasse), also die Liste der lauffähigen Prozesse (Entrant Objekte). Die Liste wird von vorne nach hinten abgearbeitet. Dabei werden Prozesse, die neu im System sind oder den Prozessor abgeben, stets an das Ende der Liste angefügt.

öffentliche Methoden

void ready (Entrant& that) Mit dieser Methode wird der Prozess that beim Scheduler angemeldet. Er wird an das Ende der Ready-Listeangefügt.

void schedule () Diese Methode setzt das Scheduling in Gang, indem der erste Prozess von der Ready-Liste entfernt und aktiviert wird.

void exit () Hiermit kann sich ein Prozess selbst beenden. Er wird nun nicht wieder an das Ende der Ready-Liste angefügt.Statt dessen wird nur der erste Prozess von der Ready-Liste heruntergenommen und aktiviert.

void kill (Entrant& that)

Mit dieser Methode kann ein Prozess einen anderen (that) beenden. Der Prozess that wird einfach von der Ready-Liste entfernt und erhält somit nie wieder den Prozessor.

void resume () Hiermit kann ein Prozesswechsel ausgelöst werden, ohne dass der aufrufende Entrant wissen muss, welche anderen Entrant Objekte im System existieren und welcher davon sinnvollerweise aktiviert werden sollte.

Page 15: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 15

technische universität dortmund

embedded system software

Agenda● Aufgabe 4

– Tipps und Tricks

● Aufgabe 5

– Überblick

– PIT-Programmierung

– Präemptives Scheduling

Page 16: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 16

technische universität dortmund

embedded system software

Aufgabe 5: Zeitscheiben-Scheduler● Ziel: Schutz kritischer Betriebssystem-Abschnitte mit Hilfe

von Schleusen

● Die Synchronisation der Aktivitäten innerhalb von OO-Stubs soll auf die Verwendung einer Schleuse umgestellt werden

● Gleichzeitig soll nun eine grobgranulare Locking-Strategie verwendet und eine Systemaufrufschnittstelle definiert werden

● Der Scheduler soll ausgelöst durch den Timer-Interrupt Threads verdrängen können

Page 17: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 17

technische universität dortmund

embedded system software

Aufgabe 5: Zeitscheiben-Scheduler● Hierzu müssen die Klassen Guarded_Scheduler, Thread, PIT

und Watch implementiert werden

● Um aus Benutzerprogrammen heraus die geschützten Methoden des Schedulers aufrufen zu können, darf die globale Variable scheduler nicht länger ein Objekt der Klasse Scheduler sein, sondern muss eine Instanz der Klasse Guarded_Scheduler sein.

Page 18: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 18

technische universität dortmund

embedded system software

Aufgabe 5: Zeitscheiben-Scheduler

Page 19: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssysteme: 08-Kontrollflussverwaltung 19

technische universität dortmund

embedded system software

Präemptiver Fadenwechsel● CPU-Entzug durch Zeitgeberunterbrechung

– die Unterbrechung ist „nur“ ein impliziter Aufruf

– Behandlungsroutine kann resume aufrufen

Achtung: So geht es normalerweise nicht, denn resume trifft eine Scheduling-Entscheidung. Bei den notwendigen Datenstrukturenist Unterbrechungssynchronisation zu beachten!

Achtung: So geht es normalerweise nicht, denn resume trifft eine Scheduling-Entscheidung. Bei den notwendigen Datenstrukturenist Unterbrechungssynchronisation zu beachten!

Bet

rieb

s sys

tem

<app1>

<app2>re

sum

e

<handler>

<resume>

ret

resume

ret

sti()

iret

Anw

end u

ngen

Page 20: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssysteme: 08-Kontrollflussverwaltung 20

technische universität dortmund

embedded system software

Fadenwechsel im Epilog● Implementierung

– Scheduler-Daten (Liste der laufbereiten Fäden)werden auf der Epilogebene angesiedelt

– alle Systemfunktionen, die diese Daten manipulieren,müssen zuvor die Epilog-Sperre anfordern (enter/leave)

● Faden erzeugen, Faden beenden, freiwilliger Fadenwechsel, ...

● Grundregel beim Fadenwechsel– der abgebende Faden fordert die Sperre an

(ggf. implizit bei der Unterbrechungsbehandlung)– der aktivierte Faden muss die Sperre freigeben

● Tipps– aus dem Epilog heraus nie enter Aufrufen (Doppelanforderung)

– Grundregel (s.o) gilt auch für die erste Fadenaktivierung

Mehr dazu in der Übung … also jetzt.Mehr dazu in der Übung … also jetzt.

Page 21: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 21

technische universität dortmund

embedded system software

Aufgabe 5: Klasse Guarded_Scheduler● implementiert die Systemaufrufschnittstelle zum Scheduler● Die von ihm angebotenen Methoden werden direkt auf die

Methoden der Basisklasse abgebildet– Ihre Ausführung wird aber jeweils mit Hilfe eines Objekts der Klasse

Secure geschützt– Es werden keine Entrant-, sondern Thread-Objekte behandelt

● Öffentliche Methoden:– void ready (Thread& that)

● Mit dieser Methode wird der Prozess that beim Scheduler angemeldet– void exit ()

● Hiermit kann sich ein Prozess selbst beenden.– void kill (Thread& that)

● Mit dieser Methode kann ein Prozess einen anderen (that) beenden.– void resume ()

● Hiermit kann ein Prozesswechsel ausgelöst werden.

Page 22: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 22

technische universität dortmund

embedded system software

Aufgabe 5: Klasse Guarded_Scheduler● Tipp

– Da die Methoden von Guarded_Scheduler die gleichen Namen haben wie die der Basisklasse Scheduler, verdecken sie diese normalerweise

– Dies kann verhindert werden, wenn bei dem Aufruf einer Methode der Name der Basisklasse explizit angeführt wird

– Beispiel:

Guarded_Scheduler scheduler;Application appl1, appl2;

scheduler.ready (appl1); // Methode von Guarded_Schedulerscheduler.Scheduler::ready (appl2); // Methode von Scheduler

Page 23: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 23

technische universität dortmund

embedded system software

Aufgabe 5: Klasse Thread● Die Klasse Thread implementiert die Benutzerschnittstelle

eines Fadens

● Zur Zeit ist Thread nichts weiter als ein neuer Name für die Klasse Entrant

– ... das wird sich in Aufgabe 6 noch ändern

● Öffentliche Methoden:– Thread (void* tos)

● Der Konstruktor leitet den Parameter tos an den Konstruktor der Basisklasse Entrant weiter.

Page 24: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 24

technische universität dortmund

embedded system software

Aufgabe 5: Klasse PIT● Die Klasse PIT steuert den Programmable Interval Timer (PIT)

des PCs

● Öffentliche Methoden– PIT (int us)

● Im Konstruktor wird der Timer so initialisiert, dass er in Abständen von ca. us Mikrosekunden regelmäßig Unterbrechungen auslöst

● Da die Auflösung des Timerbausteins maximal 838 Nanosekunden beträgt, ist keine ganz exakte Einstellung im Mikrosekundenbereich möglich

– int interval ()

● Gibt an, welches Unterbrechungsintervall eingestellt wurde.

– void interval (int us)

● Stellt das Unterbrechungsintervall neu ein.

Page 25: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 25

technische universität dortmund

embedded system software

Aufgabe 5: Klasse Watch● Watch sorgt für Behandlung der Zeitgeberunterbrechungen● Zeitscheiben werden verwaltet und bei Bedarf ein

Prozesswechsel ausgelöst● Öffentliche Methoden

– Watch (int us)● Im Konstruktor wird der Timer so initialisiert, dass er in Abständen von ca.

us Mikrosekunden regelmäßig Unterbrechungen auslöst.– void windup ()

● "zieht die Uhr auf"● Dazu muss sich das Watch-Objekt bei der Plugbox plugbox anmelden● ... und mit Hilfe des globalen PIC-Objekts pic die Unterbrechungen des

Timer-Bausteins (repräsentiert durch das globale PIT Objekt pit) zulassen– void prologue ()

● Enthält den Prolog der Unterbrechungsbehandlung.– void epilogue ()

● In dieser Methode wird der Prozesswechsel ausgelöst.

Page 26: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 26

technische universität dortmund

embedded system software

Agenda● Aufgabe 4

– Tipps und Tricks

● Aufgabe 5

– Überblick

– PIT-Programmierung

– Präemptives Scheduling

Page 27: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 27

technische universität dortmund

embedded system software

Der Timer 8254: Verwendung● PCs besitzen zwei Timer-Bausteine vom Typ 8253 oder 8254

– Mittlerweile natürlich auch im Chipsatz integriert

● Diese werden mit einem Takt von 1,19318 MHz betrieben– Unabhängig von der CPU-Frequenz!

– Warum so ein „krummer“ Takt?● 1,19318 MHz * 4 = 4,77 MHz● ... die Taktfrequenz des Ur-IBM-PC!● ... damals also doch nicht so unabhängig von der CPU-Frequenz

– Warum eine krumme Taktfrequenz wie 4,77 MHz für den Ur-PC?● 4,77 MHz * 12 = 14,31816 MHz● ... das ist die Grundfrequenz, die für NTSC-Fernsehen benötigt wird● ... also gibt es fertige, billige Quarze● ... und man kann die Frequenz gleich zur Video-Erzeugung verwenden!

Page 28: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 28

technische universität dortmund

embedded system software

Struktur des 8254

(aus dem intel-Datenblatt zum 8254)

Page 29: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 29

technische universität dortmund

embedded system software

Nutzung des 8254 im PC● Bezeichnung des 8254: „PIT“

– Programmable Interval Timer

● Jeder 8254 besitzt drei unabhängige Zähleinheiten

● Diese werden im PC unterschiedlich verwendet:

● Jeder Zähler besitzt einen eigenen Ausgang (OUTx)

Page 30: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 30

technische universität dortmund

embedded system software

Nutzung des 8254 im PC● Die verschiedenen Verwendungen der Kanäle ergeben sich

durch die Verdrahtung der Ausgänge auf den PC-Mainboard:

– OUT0 führt an Int 0 des (1.) PIC 8259

– OUT1 führt an Kanal 0 des DMA-Controllers 8237

– OUT2 führt (über ein schaltbares Gatter) an einen Verstärker

– OUT0 des 2. PIT führt an den NMI-Eingang der CPU● Über das NMI Mask Bit● Im PC sind „Non Maskable“ Interrupts doch maskierbar ...

Page 31: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 31

technische universität dortmund

embedded system software

Struktur eines Zählers im 8254

(aus dem intel-Datenblatt zum 8254)

Page 32: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 32

technische universität dortmund

embedded system software

Programmierung des 8254● Jeder PIT kann mit Hilfe von vier Ports angesprochen werden:

● Alle Ports sind 8 Bit breit!

● Um 16 Bit Zählerwerte in den PIT zu schreiben, muss eine besondere Vorgehensweise zum Einsatz kommen

Page 33: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 33

technische universität dortmund

embedded system software

Programmierung des 8254● Zunächst muss dem 8254 über ein Steuerwort gesagt werden,

was er als nächstes tun soll:

Page 34: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 34

technische universität dortmund

embedded system software

Programmierung des 8254● Der Modus bestimmt, wie der Zähler arbeitet und ob er mit

Hilfe seiner OUTx-Leitung externe Ereignisse auslöst● Im Modus 0 zählt der Zähler vom angegebenen Startwert bis 0

herunter– Alle 838 ns– Wenn der Zählerwert 0 ist, wird die OUTx-Leitung auf „1“ gesetzt

● Zum Erzeugen periodischer Impulse eignet sich Modus 2 am besten– Hier wird beim Erreichen des Wertes 0 ein kurzer Impuls auf OUTx

erzeugt und der Zähler wird automatisch wieder mit dem ursprünglichen Startwert initialisiert

● Zur Einstellung eines 16 Bit Zählerwertes sind damit drei out-Befehle notwendig– Schreiben des Steuerwortes– Schreiben des nieder- und höherwertigen Bytes des Zählerwerts

Page 35: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 35

technische universität dortmund

embedded system software

Spaß mit dem 8254● Das Intervall, mit dem ein Zähler im 8254 „tickt“, ist anhängig

von der Basisfrequenz● Der Zähler teilt diese Frequenz dann ganzzahlig● Bei einem initialen Zählerwert von 1 für Counter 0 wird also

eine Frequenz von 1,19318 MHz erzeugt● Zählerwert 2: f = 0,59659 MHz usw.● Initialwert für den Timer 0 im IBM PC: „0“

– Der PIT zählt erst herunter und vergleicht dann– Also wird der Zähler 2^16-mal heruntergezählt– Die Basisfrequenz wird also durch 65536 geteilt:

● 1,19318 MHz / 2^16 = 18,2 Hz– Das ist die Standard Interrupt-Frequenz im PC

● Wir können also nicht beliebige Frequenzen generieren, aber immerhin eine ganze Menge ...

Page 36: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 36

technische universität dortmund

embedded system software

Agenda● Aufgabe 4

– Tipps und Tricks

● Aufgabe 5

– Überblick

– PIT-Programmierung

– Präemptives Scheduling

Page 37: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 37

technische universität dortmund

embedded system software

Präemptives Scheduling● … soll dafür sorgen, dass kein Prozess/Faden die CPU

monopolisiert. Bei OO-StuBS gilt das nur eingeschränkt:

– Faden A rechnet 18 ms und ruft dann freiwillig resume() auf

– Faden B rechnet dauerhaft und gibt nie freiwillig die CPU ab

– Wer mag, darf gerne echtes Round Robin oder Virtual Round Robin in sein OO-StuBS einbauen!

20 ms Periode

resume() resume() resume()

Unfair! Effektiv bekommt B nur 10% der CPU-Zeit.Unfair! Effektiv bekommt B nur 10% der CPU-Zeit.

Page 38: Betriebssystembau (BSB): 4. Übung · 2020-03-02 · 09.12.13 Betriebssystembau: 5. Übung 2 technische universität dortmund embedded system software Agenda Aufgabe 4 – Tipps und

09.12.13 Betriebssystembau: 5. Übung 38

technische universität dortmund

embedded system software

Agenda● Aufgabe 4

– Tipps und Tricks

● Aufgabe 5

– Überblick

– PIT-Programmierung

– Präemptives Scheduling

Fragen?Fragen?