Vorlesung Kleinrechnerbetriebssysteme...

51
Vorlesung Kleinrechnerbetriebssysteme (Solo) Nicole Ondrusch 20. Februar 2003

Transcript of Vorlesung Kleinrechnerbetriebssysteme...

VorlesungKleinrechnerbetriebssysteme (Solo)

Nicole Ondrusch

20. Februar 2003

Kapitel 9

Ein Real-Time Scheduler

• in CP geschrieben

• einfacher real-time scheduler fur Prozesskon-trollanwendungen, in welchen eine feste An-zahl von nebenlaufigen Aufgaben periodischimmer wieder ausgefuhrt werden, Frequen-zen durch menschlichen Operator ausgewahlt

• hier beschrieben: Ziel, Struktur, Sequenz vonProgrammkomponenten

9.1 Ziel und Design

nutzen eine bestimmte Anwendung als Inspira-tion, nach Programmstrukturen zu schauen, diein einer Klasse ahnlicher Anwendungen genutztwerden konnen:

113

Eine Prozesskontrollanwendung

Die Anwendung, die dieses nebenlaufige Pro-gramm inspirierte war ein kleines Prozessuber-wachungssystem, welches fur eine Ammomiak-Nitrat Fabrik geschrieben wurde.

Beschreibung:

• Das Computersystem erfaßt Prozessdaten undstellt diese fur den Bediener zur manuellenSteuerung der Anlage bereit.

• Analog/Digital Umwandler messen in regelmassi-gen Abstanden uber 500 Temperaturen, Druckeund Flussraten.

• Ca. 150 digital inputs registrieren Stromzahler,Alarm- und Fullstandsschalter

• Digital output register steuern Kontrollam-pen, die den Bediener uber Alarmzustandein der Fabrik informiern.

• In regelmassigen zeitlichen Abstanden wer-den Fehler- und Daten loggings uber zweiDrucker ausgegeben.

114

• Das System verfugt uber eine Konsole furBenutzereingaben, um z.B. das Sceduling derMess- und Berichtstasks zu beinflussen.

Task Scheduling

aus vorhergehendem nun nach allgemeinerer Cha-rakterisierung suchen:

• computer muss Anzahl von Aufgaben (Tasks)volfuhren (jede mit eigenen realtime Anfor-derungen)

• Aufgaben werden zyklisch ausgefuhrt, Peri-ode wie von Operator gewahlt

• d.h. fassen Aufgaben als nebenlaufige Pro-zesse, koordiniert durch einen real-time sche-duler auf

• task proceses von Anwendung zu Anwen-dung differieren, wir versuchen nun, einenreal-time scheduler zu schreiben, der in vie-len Anwendungen derselben Art verwendetwerden kann

Dieser scheduler sollte dem Operator ermogli-chen, folgendes zu tun:

115

1. sag dem System, wie spat es ist (in Stunden,Minuten, Sekunden): time(17:34:12)

2. sag, wenn ein task das erste mal ausgefuhrtwird und wie oft er wiederholt werden soll:start(log,18:35:00) bzw. period(log 1:00:00)

Programmstruktur

Zerlegen des real-time schedulers in Komponen-ten, die sie klein sind, dass sie fur sich program-miert und getestet werden konnen

Um eine Programmstruktur zu finden, die eineinfaches Lesen des Codes ermoglicht kann mansich die folgende Fragen stellen:

1. Welche Aktivitaten mussen in dieser An-wendung simultan laufen?

2. Welche Hauptdatenstruktur wird benotigtum das Problem auf einem Computer zuosen?

3. Konnen diese Datenstrukturen in kleineregeteilt werden?

116

zu Punkt (1):Ein real-time scheduler muss in der Lage sein,folgende Dinge gleichzeitig zu tun

• die Zeit beachten

• mit dem Operator reden

• tasks ausfuhren

Mit anderen Worten, wir haben drei Arten vonProgrammkomponenten:

P

TaskProcess

ClockProcess

OperatorProcess

P P

zu Punkt (2):Wenn ein Prozess Peripheriegerate nutzt odermit anderen Prozessen kooperiert, benotigen wireine Datenstruktur, um diese Interaktion zu kon-trollieren. Es gibt folgende Arten von Interakti-on in einem real-time system:

1. operator process benotigt Zugriff auf eineKonsole (um Kommandos einzugeben)

117

2. operator process benotigt Zugriff auf timeschedule aller tasks, so dass er diese andernkann, die tasks benutzen diese Tabelle, umauf ihre Zeit zu warten und der glock processmuss die Tabelle regelmassig kontrollieren

Wir erhalten also:Console

TaskProcess

ClockProcess

OperatorProcess

P PP

M C

Time Schedule

zu Punkt (3):Mussen nun einfachere Aspekte der Problemefinden, die durch die obigen Hauptdatenstruk-turen gelost werden.

Konsole: i.W. typewriter, der zu festem Zeit-punkt ein character ein- oder ausgeben kannkombiniert mit einem bell key, der vom Opera-tor genutzt wird, falls dieser die Aufmerksam-keit des operator processes braucht

118

fur einfachere Nutzung auf hoherem Program-mierlevel: fugen terminal Komponente oberhalbder typewriter Komponente ein (kann ganze text-strings ausgeben).

C

Operator Process

Bell Key

Terminal

Typewriter

P

C

C

Es ist sinnvoll, dass mehrere Prozesse eine Kon-sole teilen. Fugen also noch einen resource mo-nitor ein, den prozesse aufrufen mussen, um ex-clusives Zugriffsrecht auf die Konsole zu erhal-ten (virtuelle Peripheriegerate).

119

Prozesse

Terminal

Typewriter

C

C

P

C

C

P

M

Time Schedule: diese in kleinere Teile zu zer-legen ist etwas schwieriger:

task prozesse wissen, dass sie immer wieder durcheinen Prozesszyklus gehen, nicht jedoch, wie oft,man fuhrt also eine task queue ein, in derein task process wartet, bis ein weiterer Teil desschedluers signalisiert, dass er an der Reihe ist.

Im System gibt es einen Zahler, der die Zeitreprasentiert und (dank des glock process) alleSekunde um 1 heraufgezahlt wird.

Wer muss die Zeit wissen (Komponenten, diedie Zeit nutzen)?

• time schedule, wenn er entscheidet, einenProzess anzufangen

120

• task processes, um sie auf die von ihnen pro-duzierten eports zu drucken

Komponenten, die Zeit definieren:

• operator process, initialisiert clock

• clock process, updates clock

• timetable definiert Startzeit und Periodenaller tasks

operator process soll weiterhin task set erhal-ten, welches ihm ermoglicht Namen in Zahlenumzuwandeln.

Wir erhalten folgendes Bild:

Process

Process

P

PP

M

M

M

C

Task Queue

Timetable

Task Set

Clock

ClockProcess

Operator

Task

Insgesamt tut das System also folgendes (Be-schreibung der Prozesse):

121

• task process ist zyklischer Prozeß, der in taskqueue wartet bis Signal von timetable kommt

• task process fuhrt dann task aus und wartetwieder

• clock process ist zyklischer Prozeß, der 1 secwartet, clock aktualisiert und die timetableuberpruft.

• operator process ist zyklischer Prozeß, war-tet auf bel key Signal, liest Kommando vomTerminal ein und fuhrt dieses aus

• Kommandos setzen clock oder andern timeschedule eines tasks

Aus Demonstrationsgrunden wird task processnur seinen Namen und die derzeitige Zeit aufder Konsole ausgeben (jedes Mal, wenn taskprocess lauft). task benotigt also Zugrifsrechtauf clock und task set.

Wir erhalten das (nicht so genau zu nehmende)Bild:

122

123

9.2 Programmierung

Haben bisher nur das Ziel der Datenstrukturenaufgezeigt. Nun zeigen wir, welche Operationenauf diesen ausgefuhrt werden konnen und wiesie programmiert werden.

Definieren zunachst die Hauptdatentypen undzerlegen diese dann in Unterdatentypen. startenalso mit einem ausfuhrbaren Programm, mitsolchen Programmkomponenten, die nicht von-einander (und von anderen) abhangen.

Input/Output Typen

Datentypen, die in elementaren input/outputOperationen benutzt werden, definieren die iden-tifier der Peripheriegerate, input/output Opara-tionen und deren Ergebniss sowie transferierteDatentypen (Textzeilen):

124

Typewriter

Resourcen (Monitore, Klassen) und die entspre-chenden Prozesse, die darauf operieren sind imwesentlichen wie im Solo System.

Typewriter transferiert ein character-Zeichenvon oder zu einemtypewriter device. Gibt demaufrufenden Prozeß jedoch nicht das exklusiveZugriffsrecht auf das device.

125

writeschreibtcharacterauf type-writerread liestcharactervon type-writer

Terminal

Terminal kann character, text strings undunsigned ints auf typewriter schreiben undcharacter von typewriter lesen. Gibt demaufrufenden Prozeß jedoch nicht das exklusi-ve Zugriffsrecht auf das device.

126

writeund readwie obenwritetextschreibttextstring(beendetdurch #)auf type-writer

127

writeintschreibt unsi-gned int auftypewriter,macht wahrenddes Testens Aus-gabeboolscherWerte moglich(0=False,1=True)

Bel Key

ermoglicht einem Przeß zu warten, bs OperatorBEL character auf typewriter schreibt.

await verzogert aufrufenden Prozeß, bis BELcharacter grdruckt wird

128

Fifo Queue

Wie in Solo, achtet auf Langen eines arrays infifo queue.

Resource

gibt Prozeß exklusiven Zugriff auf eine Com-puterresource, fuhrt jedoch nicht die Operatio-nen selbst aus. Resource Komponente wurdevon Solo ubernommen.

Task Queue

ermoglicht task Prozessen sich selbst zuruckzu-stellen. Zunachst ist die task queue leer.

129

Prozesse werden mit den eindeutigen integers,de ihnen von der virtual machine zugeordnetwerden identifiziert. Die Funktion attribute(caller)definiert den Index des aufrufenden Prozesses

preempt vezogert aufrufenden Prozess, bis erwieder

resume setzt task process fort, wenn er in queuewartet.

130

Task Set

assoziiert die Namen der task processes mit de-ren Prozessindices.

task set wird als array wird identifiers darge-stellt, in welchem uber die entsprechenden pro-cess indices nachgeschlagen wird. Zunachst isttask set leer.

131

include fugt task mit geg. id und Prozessindexin task set ein.

member sagt, ob Menge task mit entsprechen-dem id enthalt.

task definiert Prozessindex eines tasks mit geg.

132

id.

me definiert identfiert des aufrufenden Prozes-ses.

Clock

achtet auf real-time.Initial ist die Zeit = 0 (Mitternacht).

value gibt derzeitige Zeit an (in Sekunden vonMitternacht entfernt).

correct setzt Zeit auf gegebenen Wert.

133

tick inkrementiert Zeit um eine Sekunde (mod24 Stunden)

Task Process

task process fuhrt task immer dann aus, wenndies von real-time scheduler verlangt.

134

Aus Demonstrationsgrunden werden nur 3 Pro-zesse genutzt, jeder task schreibt Zeit und sei-nen Namen in eine eigene Spalte auf der Opera-torkonsole, auf der er lauft. Diese task Prozes-se konnen durch andere Anwendungen ersetztwerden.

135

Timetable

beinhaltet Sartzeit und Periode aller tasks, sche-duling der Ausuhrung aller aktiven tasks. DiePeriode eines tasks darf 12 Stunden nicht uber-schreiten.

136

start markiert task als aktiv und definiert Start-zeit

period definiert Periode eines tasksstop macht task inaktivexamine alle derzeitigen tasks diese, falls der-zeitige Zeit gleich oder großer als ihre Startzeitist, danach wird Startzeit der tasks um Periode(mod 24 Stunden) heruasgesetzt

137

138

Clock Process

inkrementiert clock jede Sekunde und timetableder task processes, die in der Schlange warten.

wait verzogert aufrufenden Prozeß um eine Se-kunde.

139

Operator Process

fuhrt die Kommandos, die uber typewriter ein-gegeben werden, aus. Menschlicher Operator mussBEL key auf typewriter drucken bevor er Kom-mandos eingeben kann. Diese Kommandos sind:

• start: definiert Sartzeit eines tasks und machtdiesen aktiv

• period: definiert Periode des tasks

• stop: macht task inaktiv

• set: setzt derzeitige Zeit

140

141

142

143

144

Initial Process

initialisiert alle anderen Prozesse und Monitoreund definiert Zugriffsrechte. Aus Demogrundenwerden 3 task processes (scan, flow, log) ver-wendet.

145

146

9.3 Testen

Folgender Abschnitt beschreibt eine einfache Me-thode, Betriebssysteme zu testen, die aus ei-ner Hierarchie abstrakter Datentypen (Klassen,Monitore, Prozesse) bestehen. Der real-time sche-duler wird als Beispiel verwendet.

Getestet wird bottom-up durch sukzessives Hin-zufugen einer Komponente und Ersetzen desinitial process durch einen Testprozeß, der dieoberen Komponenten aufruft und deren Ergeb-nisse ausgibt.

Es folgt eine Liste aller Testfalle, die fur denreal-time scheduler genutzt wurden, sowie dieentsprechenden outputs.

Typewriter Test

wird durch initial process getestet, der characterlist und diese wieder ausgibt:

147

AUSGABE: aabbcc ...

Terminal Test

wird durch initial process getestet, der text stringausgibt, ein character-Zeichen kopiert und dengrsten und kleinsten unsigned int schreibt:

AUSGABE:type a character xx032767

148

Bel KeyTest

bel key wird durch zyklischen Prozeß getestet,der jedes Mal, wenn Operator Bel Key druckteine Nachricht druckt:

AUSGABE:

here i amhere i am...

Fifo QueueTest

Eine fifo queue mit hochstens zwei Elementenwird durch eine zyklischen Prozeß getestet, derqueue mit arrival fullt und diese dann wiedermit departures leert. Nach jeder Operation wer-den 2 integer ausgedruckt. Sie definieren queueindex von arrival oder departure und spezifizie-ren, ob queue leer oder voll ist. next ist vomTyp fifo, operator vom Typ terminal.

149

AUSGABE:

150

ResourceTest

initiall process fragt eine resource an, schreibteine Nachricht und gibt die resource dann wie-der frei. Dies testet den Fall, Resource bei An-frage frei, wird nch Verlassen wieder frei.

Nachfolgend wollen drei zyklische Prozesse a,b,cZugriff aus die Resource. Dies testet den Fall,wenn resource bei Anfrage belegt ist und diesbisVerlassen wieder wird (neuer Prozeß erhebtAnspruch).

151

AUSGABE:readya

152

bc...

(wiederholt)

Task QueueTest

getestet uber drei task processes a,b,c die inalphabetischer oder umgekehrt alphabetischerReihenfolge abgearbeitet werden, geordnet duchinitial process.

153

AUSGABE:readya

154

bccab...

Task Set Test

getestet durch initial process, der drei Prozessna-men in set eingibt. Gibt fur jeden Namen an, aber vor und nach der Eingabe in der Menge istund druckt task index aus. Am Ende pruft derinitial process, ob er seinen eigenen Namen ausdem set enfernen kann:

155

AUSGABE:

156

Clock Test

getestet durch initial process, der seinen initialvalue druckt, diesen auf eine Minute vor Mitter-nacht setzt und diesen 2 Minuten laufen laßt.

157

AUSGABE:

Task Process Test

getestet durch initial process, der task jede Su-kunde wieder ruft.

AUSGABE:

158

Timetable und Clock Process Test

getestet uber drei task processes a,b,c, die nach10, 15 und 20 Sekunden starten und jeweils alle5 , 9 und 13 Sekunden laufen. Prozeß a stopptnach 25, b nach 30 un c nach 35 Sekunden.

159

AUSGABE:a 0:0:10b 0:0:15a 0:0:15

160

c 0:0:20a 0:0:20b 0:0:24a 0:0:25c 0:0:30

Timetable und Clock Process Test

wird getestet, indem man Kommandos an dasganze System gibt. Diese Kommandos solltenalle moglichen syntaktischen und semantischenFehler beinhalten. Damit ist das System unternormaler Operation getestet.

161

9.4 Final Remarks

real-time scheduler und die Testfalle wurden in3 Tagen geschrieben, der originale real-time sche-duler des Dungermittelherstellers war in Assem-bler geschrieben nur halb so lang, benotigte je-doch ein halbes Jahr fur die Implementierung.Codezeilen:

Programm 400ZeilenTestf alle 200ZeilenHandbuch 600Zeilen

162