0 Punkte - Institut für Pervasive Computing
Transcription
0 Punkte - Institut für Pervasive Computing
Übung Embedded and Pervasive Systems SS 2009, Übung 2 Institut für Pervasive Computing Univ.-Prof. Dr. Alois Ferscha Elektr. Abgabe: Bis Di, 31. März 2009, 12.00 Uhr Dipl.-Ing. Dr. Andreas Riener Zuname: Tutor: Vorname: Übungsgruppe: Matr. Nr.: SKZ: Punkte (max. 24) 0) Einführung in Octave (0 Punkte) Machen sie sich mit dem numerischen System „Octave“ und dessen Funktionen vertraut. Sehr gute Tutorials zum Durcharbeiten bieten der Lehrstuhl für Angewandte Mechanik, TU München bzw. das Department for Engineering, University of Cambridge an. Sie finden beide direkt im Internet bei den jeweiligen Instituten unter http://www.amm.mw.tum.de/fileadmin/Image_Archive/Lehre/Prakt_MKS/Tutorial.pdf http://www-mdp.eng.cam.ac.uk/web/CD/engapps/octave/octavetut.pdf Anmerkung: Sämtliche Beispiele in diesem Übungsblatt gehen von einer konstanten Fehlerrate λ und einer exponentialverteilten Zuverlässigkeit R(t) aus. 1) Scripts, Funktionen, Matrizen (3+4+5=12 Punkte) a) Schreiben Sie ein Octave-Skript mit dem Namen rtDependability das aus den zwei Grössen Fehlerrate lambda und mean time to repair mttr die restlichen Bestimmungsparameter mttf, mtbf, availability errechnet. lambda und mttr müssen vor dem Aufruf des Skripts im Workspace definiert und befüllt werden. Hinweise: Das Skript selbst soll keine Ausgaben liefern (dh. keine disp- oder fprintf-Befehle; Ausgaben aller Zwischenschritte sind zu unterdrücken; Fehlerbehandlung durch Octave, dh. keine Abfragen notwendig). Sie brauchen in ihrer Skript-Implementierung nicht auf ungültige Werte von lambda und mttr prüfen. Bei Eingabe von help rtDependability soll ein sprechender Hilfetext mit Funktionsbeschreibung des Skripts ausgegeben werden. Testen Sie ihr Skript mindestens mit folgenden Settings, schliessen Sie die Ergebnisse für mttf, mtbf und availability Ihrem Protokoll an: (i) lambda = 1.33e-6, mttr = 2 (ii) lambda = 5e-20, mttr = 72 (iii) lambda = 0, mttr = 0 (iv) lambda = unendlich, mttr = 0 (v) help rtDependability b) Erweitern Sie das Skript zu einer Funktion mit Ein- und Ausgabeparametern laut folgender Schnittstellenbeschreibung (3+1 Punkte): [mtbf, mttf, availability] = rtDependabilityFkt (lambda, mttr) Testen Sie auch diese Funktion mindestens mit den oben angegebenen Testfällen. Welche Unterschiede fallen Ihnen beim Aufruf bzw. bei der Implementierung zwischen dem Skript und der Funktion auf? c) Gesucht ist eine Octave-Funktion namens reliability(...) die die Zuverlässigkeit eines Systems aus seriell und parallel angeordneten Komponenten nach einer gewissen Zeitspanne t, ausgehend von einer Startzeit t0, bestimmt. Die Funktion soll 3 Parameter entgegennehmen und verarbeiten: 1) mttf: Wird als Matrix mit den MTTF-Werten (mean time to failure) jeder Einzelkomponente übergeben. Parallel geschaltete Komponenten sind jeweils in einer Spalte angegeben, die einzelnen Spalten hingegen sind seriell angeordnet. Folgendes Beispiel soll den Aufbau der Matrix demonstrieren (parallel geschaltete Komponenten können unterschiedliche MTTF’s aufweisen): MTTFB1 MTTFD1 MTTFA MTTFB2 MTTFC MTTFE MTTFD2 MTTFB3 Dieses System aus Komponenten wird durch die folgende Matrix repräsentiert: ⎛ MTTFA ⎜ mttf = ⎜ 0 ⎜ 0 ⎝ MTTFB1 MTTFC MTTFD1 MTTFB2 MTTFB3 0 0 MTTFD2 0 MTTFE ⎞ ⎟ ⎟ ⎟ ⎠ 2) time t: Dieser Parameter gibt an, nach welcher Zeit die Zuverlässigkeit des Systems bestimmt werden soll. 3) Initialtime t0 : Startzeit von der bekannt ist daß das System noch funktioniert hat. Anmerkung: Diese Zeit (t0) ist in der Praxis häufig 0. Hinweise: Die Funktion reliability(...) selbst soll keine Ausgaben liefern (dh. keine disp- oder fprintfBefehle; Ausgaben der Zwischenschritte unterdrücken; Fehlerbehandlung durch Octave, dh. keine Abfragen notwendig). Verwenden Sie für die Lösung der Funktion keine Kontrollkonstrukte (for, while, switch, etc.) Für die Lösung dieser Aufgabe sind ausschließlich Standardrechen- bzw. Matrioxoperationen erforderlich. Sehen sie sich dazu die Hilfe zu exp und prod an. Die Meldung "warning: division by zero" kann durch den Octave-Befehl warning ("off", "Octave:divide-by-zero"); deaktiviert bzw. mit "on" reaktiviert werden. Überprüfen sie die Korrektheit ihrer Funktionsimplementierung zumindest mit den folgenden Aufrufen (ihre Ausgabe sollte ident sein...): octave-3.0.3.exe:30> mttf = [250 125 700 150 ; 0 0 100 225 ; 100 0 0 0 ; 0 200 200 0; 0 0 0 250 ] mttf = 250 125 700 150 0 0 100 225 100 0 0 0 0 200 200 0 0 0 0 octave-3.0.3.exe:31> rel = 0.56504 octave-3.0.3.exe:32> rel = 0.97092 octave-3.0.3.exe:33> rel = 0.97092 octave-3.0.3.exe:34> rel = 0.56504 octave-3.0.3.exe:35> rel = NaN octave-3.0.3.exe:36> rel = Inf octave-3.0.3.exe:37> ... 250 rel = reliability(mttf, 100, 0) rel = reliability(mttf, 20, 0) rel = reliability(mttf, 100, 80) rel = reliability(mttf, 0 , -100) rel = reliability(mttf, 0 , 0) rel = reliability(mttf, 0 , 100) help reliability 2) Plots in Octave (4+8=12 Punkte) In den folgenden beiden Aufgaben soll der Verlauf der Zuverlässigkeit (Reliability) eines Realtime-Systems über die Zeit grafisch dargestellt werden. a) Erstellen sie in Octave/GNUplot ein Diagramm das die Zuverlässigkeit R(t) des Echtzeitsystems aus Beispiel 1c) über die Zeit darstellt (Zeit t in x-Achse [0...?], Zuverlässigkeit R(t) in y-Achse [0...1]). Verwenden Sie zum Visualisieren die Funktion plot(...) und experimentieren Sie mit einigen Settings für MTTF und t (t0 können Sie fix auf 0 setzen). Die abzugebende Lösung soll mit der MTTF-Belegung aus 1c) erstellt werden (mttf = [250 125 700 150 ; 0 0 100 225 ; 100 0 0 0 ; 0 200 200 0; 0 0 0 250 ]). Beschriften Sie ihr Diagramm vollständig (Titel, x-Achse, y-Achse, Kurven) und formatieren/skalieren Sie es passend. Hinweise: Zur Darstellung des zeitlichen Verlaufes können Sie Schleifen verwenden. Es könnte sich auch als günstig erweisen alle abzuarbeitenden Befehle in einem Script zu sammeln. Ihr Protokoll sollte auf jeden Fall eine Liste der notwendigen Octave-Befehle (bzw. Scripts) sowie einen Screenshot des Diagrammes enthalten. b) Schreiben Sie eine Funktion reliabilityHDDSys(...) die die Zuverlässigkeit des unten angegebenen RAID-Systemes mit den gegebenen technischen Daten berechnet und grafisch darstellt. Die Struktur ist fix, die MTTF der Komponenten A bis D soll als Parameter gemeinsam mit dem gewünschten Beobachtungszeitraum (t) an die Funktion übergeben werden. Für die Komponente E sind 3 Parameter vorzusehen -- die Funktion soll die MTTF dreier unterschiedlicher Festplattentypen miteinander vergleichen. Die Funktion reliabilityHDDSys(...) soll zur Berechnung die Funktion reliability(...) aus Aufgabe 1) verwenden, R1(t) bis R3(t) für die übergebenen Festplattentypen zurückliefern und ein gemeinsames Diagramm inkl. Beschriftungen für R1(t), R2(t) und R3(t) für den Zeitraum t = 2 Jahre zeichnen. Funktionsschnittstelle und Parameter: (Zeitparameter sind jeweils in Stunden anzugeben) [rel1, rel2, rel3] = reliabilityHDDSys (io, power, scsi, cable, hdd1, hdd2, hdd3, time) A B C D E Zuleitung inkl. Ein/Ausschalter MTTF: 400.000 Stunden Stromversorgung (redundant) MTTF: 150.000 Stunden SCSI-Controller MTTF: 500.000 Stunden SCSI-Kabel MTTF: 800.000 Stunden SCSI-Festplatten, 5fach-gespiegelt zur Erhöhung der Datensicherheit HDD1: Seagate Barracuda 7200.11, 1TB MTTF: 750.000 Stunden (24x7) HDD2: Maxtor MaxLine II, 5A320J0, 320GB, ATA-133 MTTF: 1.000.000 Stunden (24x7) HDD3: Western Digital Raptor, 74 GB, 10000rpm, 4.6 ms, SATA MTTF: 1.200.000 Stunden (24x7) Hinweise: Die Funktion reliabilityHDDSys(...) selbst soll keine Ausgaben liefern (dh. keine disp- oder fprintf-Befehle; Ausgaben der Zwischenschritte unterdrücken; Fehlerbehandlung durch Octave). Bei Eingabe von help reliabilityHDDSys soll ein sprechender Hilfetext zur Funktion ausgegeben werden. Bei der Berechnung der Werte für den Plot brauchen Sie keinen Datenpunkt für jede Stunde berechnen; es genügt beispielsweise einen Wert pro Tag oder Monat zu berechnen. Beispielausgabe: Geben Sie ein „Protokoll“ mit ihrer Lösung, dh. a) Sourcecodes (.m-Dateien,), b) Testfälle bzw. Testausgaben und c) eine verbale Interpretation der Ergebnisse (wo gefordert) ab. Schliessen Sie ihrem Protokoll die Octave Quelldateien (Dateiendung *.m) bei.