2 - Implementierung [ID:24341]
50 von 115 angezeigt

Mein, mein liebe Leute willkommen zum nächsten Video zur Vorlesung Betriebssysteme. Weiter geht es im

Kapitel Soft-IRQs. Wir haben uns im letzten Video angeguckt, wie die Aufteilung gemacht wird und

warum die Aufteilung gemacht wird bei der Interrupt-Behandlung. Gucken wir uns das jetzt in der

Implementierung an, gucken uns einfach ein Beispiel an, wie man das jetzt in der Praxis wirklich

implementiert. Also sieht folgendermaßen aus, stellt euch vor, ihr sollt, na, ihr kennt das Beispiel aus dem

letzten Video, einen Keyboard-Interrupt-Händler schreiben. Ja, Keyboard-Interrupt-Request, was soll der

machen? Zwei Dinge. Er soll einmal im ersten Schritt, haben wir uns angeguckt, das Zeichen von

der Tastatur wirklich abholen. Dann haben wir gesagt, können wir die Interrupts wieder anschalten.

In der Interrupt-Welt heißt das dann Z, Set Interrupt Enable und wenn die Interrupts enabled sind,

dann können wir den eher softwarelastigen Teil der Interrupt-Bearbeitung machen. Gut,

was macht jetzt? Gehen wir es der Reihe nach durch. Hardware-Interrupt-Abarbeitung, was ist das?

Ja, also wir holen uns den Code vom Keyboard-Controller, das ist der wirklich

hardwareabhängige Teil. Wenn in unserem Buffer Platz ist, packen wir das Zeichen in den Buffer.

Mehr nicht. Also wichtiger Punkt, das hier ist ein vergleichsweise kleiner Teilsoftware.

Der sollte auch nicht lange schleifendurch laufen. Das ist nur einfach ein paar Bytes vom Keyboard-

Controller abholen. Das Bytes, ein bisschen Rechnerei außen rum reicht, um dann den Buffer zu befüllen.

Der zweite Schritt. Was machen wir, um das Zeichen dann letztendlich weiter zu verarbeiten? Ja,

wir holen uns ein Zeichen aus dem Buffer raus, solange noch eins drin ist. Wichtig, wenn wir das hier

rausholen, dann darf in dem Moment natürlich jetzt kein Interrupt da wieder diesen Teil

auslösen. Das heißt, da darf nichts in den Buffer in der Zwischenzeit eingefügt werden.

Haben wir uns in einem der letzten Videos angeguckt, wie man das verhindert. Also vorher

Interrupts ausschalten, ein Byte, ein Code auslesen, Interrupts wieder anschalten. Dann haben wir

ein Byte aus dem Buffer rausgeholt. Das Byte können wir jetzt weiter verarbeiten. Also wir können es

umwandeln in irgendwie in ASCII-Zeichen, wir können es auf den Bildschirm malen und so weiter.

Dann schalten wir die Interrupts wieder aus, gucken, ob noch ein weiteres Byte im Buffer drin ist.

Wenn ja, holen wir uns sonst raus, Interrupts wieder anschalten, verarbeiten, Interrupts aus,

Byte holen, Interrupts an, verarbeiten und so weiter, bis irgendwann unser Buffer leer ist.

Und dann schalten wir die Interrupts wieder an und sind fertig. Warum, Preisfrage, ist das hier

oben jetzt ein Zeichen, was ich abholen und wenn ich überhaupt in den Buffer tue, vielleicht auch

nicht, weil Buffer vielleicht schon voll. Hier unten habe ich jetzt noch eine Weilschleife.

Könnte das hier nicht ein IF sein? Nee, kann es nicht. Warum? Es könnte sein, dass während wir

hier unser Zeichen verarbeiten, natürlich schon wieder ein Tastaturinterrupt kommt. Heißt, wir

würden dann schon wieder den Teil hier ausführen, wir würden schon wieder sozusagen ein Byte

nachfüllen in den Buffer. Dementsprechend könnte es sein, während wir hier den Code verarbeiten,

dass sich der Buffer schon wieder füllt. Dementsprechend machen wir das hier in einer Weilschleife.

Kommen wir nachher noch darauf, dass das vielleicht aus anderen Gründen nicht geht,

aber das wäre erstmal die Idee. Das wäre so die Abarbeitung in zwei Teilen. Ein mehr

Hardware abhängiger Teil, der dann nur noch was in den Buffer füllt und ein Teil, der was aus dem

Buffer holt und jetzt pure Software ist irgendwie Zeichen verarbeiten. Gut, das war mal so das Prinzip.

Jetzt gehen wir uns das noch mal genauer angucken. Das war so der Aufteilungsteil. Wie verarbeiten wir

Keyboardinterrupt aufgeteilt in zwei Teile? Geht eventuell nicht. Da kann man jetzt lange

leider darüber nachdenken. Wer jetzt gar nichts zu tun hat, kann das Video ja mal anhalten und

mal darüber nachdenken. Da muss man wahrscheinlich auch schon länger darüber nachdenken, bis man auf

die Idee kommt. Folgendes Problem kann auftreten. Stellt euch vor, ihr schaltet hier die Interrupts

wieder an und verarbeitet das Zeichen. Da habe ich gerade gesagt, wenn die Interrupts an sind, dann

kann ja schon wieder, wenn eine weitere Taste gedrückt wurde, kann ja schon wieder die

Hardwareinterrupt Abarbeitung laufen. Dann wird dieser Keyboardinterrupt Händler ja durch

sich selber sozusagen unterbrochen. Okay, dann wird das nächste Zeichen angenommen in den Tastaturbuffer

getan und die Abarbeitung wieder gestartet. Während die Abarbeitung gestartet wird, sind aber die

Interrupts wieder an. Das heißt, es kann schon wieder ein Tastencode kommen und ihr müsst ja

Teil einer Videoserie :
Teil eines Kapitels:
Unterbrechungen, SoftIRQs

Zugänglich über

Offener Zugang

Dauer

00:14:26 Min

Aufnahmedatum

2020-11-16

Hochgeladen am

2020-11-19 11:09:35

Sprache

de-DE

5. Kapitel der Vorlesung Betriebssysteme.

Folien zum Video.

Tags

betriebssysteme operating systems
Einbetten
Wordpress FAU Plugin
iFrame
Teilen