Lösung zur Praktikumsaufgabe 2

Ähnliche Dokumente
Beispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Timm M. Steinbeck und Arne Wiebalck Lehrstuhl für Technische Informatik Universität Heidelberg. Prozess-Monitoring auf CPU-Takt Ebene

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Kontextfreie Sprachen Kontextfreie Sprachen und Grammatiken. Satzformen sind die Wörter aus (N T ). Notation: Wir verwenden oft

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung)

Objektbasierte Entwicklung

Algorithmen und Datenstrukturen

Prüfung Betriebssysteme 1

Probeklausur zu Systemnahe Software II SS 2012 Dr. Andreas Borchert mit Markus Schnalke

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Grundlagen der Informatik 2. Typen

Lab 13: Multi Processor Systems II

USBCAN.DLL. Manual. Microcomputersysteme. Version 1.2

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Übungspaket 7 Angemessenes Formatieren von C-Programmen

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Probeklausur: BTI2 / Programmieren I Prof. Dr. H. Herold Erlaubte Hilfsmittel: Vorlesungsmitschrift; C-Bücher

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmieren in C. Strukturen und Zeiger. Prof. Dr. Nikolaus Wulff

Malware. Carlo U. Nicola 09. Dezember Die Struktur eines (harmlosen) aber echten Virus-Programmes analysieren;

Gliederung Hardware fuer die Zeitmessung Zeitmanagement auf Uniprozessorsystemen. Timing Measurements. Timo Schneider. 4.

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung)

Übersicht über die C/C++ Bibliotheksfunktionen

Übungspaket 9 Logische Ausdrücke

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Programmierung Wintersemester 2008/09

Einführung in die Programmierung

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Programmieren in C Signale, Bitfelder, Unionen Fehler, Debugging, Profiling

Einführung in die Programmierung

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Computergestütztes wissenschaftliches Rechnen SoSe 2004

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

C/C++-Programmierung

Programmieren in C++

Embedded SQL in PostgreSQL

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, , Ingo Josopait

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 K-Uebung9.fm

Advanced Programming in C

Einführung in die Programmierung

Nachname:... Vorname:... MatrNr.:... Klausur PR2. Erstellen Sie eine Struktur für eine Komplexe Zahl mit den Elementen real und imag vom Typ double.

U4-1 Aufgabe 3: einfache malloc-implementierung

Ein kleiner Blick auf die generische Programmierung

Dynamische Speicherverwaltung

Linux Prinzipien und Programmierung

Kommunikation in drahtlosen Sensornetzen

In diesen Canvas können Punkte an gültigen Koordinaten gezeichnet werden.

Vergleich verschiedener OO-Programmiersprachen

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Informatik I Programmieren in C

Was ist ein Prozess?

Einstieg in die Informatik mit Java

Lösung Übungszettel 6

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Bildverarbeitung mit C++

C-Kurs 2010 Pointer. 16. September v2.7.3

Dr. Monika Meiler. Inhalt

Einführung in C. EDV1-04C-Einführung 1

Nachname:... Vorname:... MatrNr.:... Klausur PR2. int main() { char Text[] = "Sehr geehrte Damen und Herren!"; char *tmp=text;

Netzwerksicherheit Musterlösung Übungsblatt 5: Firewalls

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Welche Informatik-Kenntnisse bringen Sie mit?

Kapitel 5 Deklaration und Sichtbarkeitsbereich

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Musterlösung zur 6. Übung

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

10 Die Programmiersprache C99: Zusammenfassung

Strukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors

C- Kurs 03 Ausdrücke und Operatoren

Eine Mini-Shell als Literate Program

Algorithmen zur Datenanalyse in C++

Klausurvorbereitung Lösung

Übung Liste mit Namen/Vornamen

Einführung in die Programmiersprache C

Tafelübung zu BS 1. Prozesse verwalten

Informatik II Übung, Woche 10

Programmieren in C Dynamische Listen / Bäume

Schreiben Sie ein Programm, welches folgende Bestandteile besitzt. Verwenden Sie diese Elemente geeignet, um eine Sortierung des Feldes zu erzielen!

0. Einführung & Motivation

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Musterlösung Stand: 5. Februar 2009

[Strukturen] Vereinbarung Verwendung Operationen mit struct Zeiger auf struct Strukturen auf dem Heap Datenstrukturen gebildet mit struct union

6 Speicherorganisation

Programmieren in C/C++ und MATLAB

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Grundlagen der Informatik 5. Kontrollstrukturen II

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung)

Praktikum 4: Delegation

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Transkript:

1. Es gilt Echtzeitsysteme Lösung zur Praktikumsaufgabe 2 Thema: Zeit t = 2ρ t sync. Mit ρ a = 5.7 10 6 und ρ b = 1 10 4 (der Ausdruck parts per million steht für 1 10 6 ) sowie der Zeitspanne 1 a = 31.536.000 s ergibt sich t a = 360 s 6 min t b = 6307 s 107 min. Gründe für große Gangabweichung sind die Umgebungstemperaturen: stark schwankend im Rechner, je nach Einschaltzustand und Gehäusekühlung, ziemlich konstant am Handgelenk (Körpertemperatur, ca. 37 ± 2 C). 2. Die Uhr muss um einen Faktor b beschleunigt werden. b errechnet sich aus dem Verhältnis der Zielzeit (= auszugleichenden Zeitdifferenz + Zeitintervall für die Korrektur) zum Zeitintervall für die Korrektur. b = 120 s + 30 s 30 s Die Uhr muss für 150 Sekunden ihrer Zeit um den Faktor 5 beschleunigt werden. Der Sekundenzähler wird also anstatt alle 100 Ticks alle 100 = 20 Ticks inkrementiert. Nach 5 150 dieser beschleunigten Sekunden sind real 150 20/100 = 30 Sekunden vergangen. Allgemein kann formuliert werden: Es seien t loc ein bestimmter Zeitpunkt der lokalen (zu stellenden) Uhr, z(t loc ) die zugehörige Referenzzeit und t das Intervall, währenddessen die lokale Uhr zu korrigieren ist. Der Korrekturfaktor b errechnet sich mittels = 5 b = z(t loc) t loc + t t mit t > t loc z(t loc ) Wenn die zu stellende Uhr alle n Ticks um 1 Sekunde inkrementiert wird, so muss sie zur Gangkorrektur alle n Ticks inkrementiert werden, und zwar, bis t b loc + t erreicht ist. 3. a) Beide Uhren gehen zu schnell. Tabelle 1 zeigt die Gangabweichungsraten (näherungsweise) von u 1 und u 2 zu den entsprechenden Zeitpunkten unter der Annahme, dass beide Uhren zu t = 0 perfekt synchronisiert waren. Da zu allen Zeitpunkten ρ u2 < ρ u1 gilt, kann geschlussfolgert werden, dass u 2 die höhere Genauigkeit hat. Abbildung 1 verdeutlicht den Sachverhalt. b) Aus Tabelle 1 ist ersichtlich, dass die Gangabweichungsrate von u 1 nur sehr gering schwankt, während ρ u2 beträchtlichen Schwankungen unterworfen ist. c Robert Baumgartl, 2009-15 1 6. April 2017

e 1 e 2 e 3 e 4 ρ u1 0.227 0.231 0.230 0.230 ρ u2 0.086 0.167 0.046 0.092 Tabelle 1: Gangabweichungsraten der Uhren aus Aufgabe 3 140 120 "u1.gpl" "u2.gpl" x 100 r(u) 80 60 40 20 0 0 20 40 60 80 100 120 140 u Abbildung 1: Werteverlauf für u 1, u 2 und die ideale Uhr c Robert Baumgartl, 2009-15 2 6. April 2017

Die Idee zur Genauigkeitsverbesserung besteht darin, einen Korrekturfaktor zu ermitteln, um den die Uhr zu schnell geht (z. B. das arithmetische Mittel von ρ), und den Ablesewert damit zu verlangsamen. Die arithmetischen Mittel beider Gangabweichungsraten betragen etwa: ρ u1 0.229 ρ u2 0.097 Die Korrektur erfolgt folgendermaßen: ũ x (e i ) = u x (e i ) ρ ux u x (e i ) mit 1 x 2, 1 i 4 Tabelle 2 zeigt die korrigierten Ablesewerte beider Uhren. Die ziemlich konstante e 1 e 2 e 3 e 4 r(e i ) 15 37 63 98 ũ 1 (e i ) 14.95 37.07 62.03 98.10 ũ 2 (e i ) 14.80 40.07 58.66 97.38 Tabelle 2: Korrigierte Ablesewerte der Uhren aus Aufgabe 3 Gangabweichungsrate führt zu einer starken Verbesserung bei u 1. Auch für u 2 ist eine Verbesserung sichtbar mit Ausnahme des Ereignisses e 3. Da u 2 (e 3 ) zufällig sehr genau war, führt die Varianz von ρ 2 zu einer Verschlechterung. 4. a) Das höchste Bit wird gesetzt nach 2 31 verstrichenen Sekunden. Legt man einheitlich Jahre von 365 Tagen zugrunde, so wurde das Bit irgendwann im Jahre 1968 auf 1 gesetzt. 2 31 s 68.09 a. 60 60 24 365 b) Nocheinmal die gleiche Zeit (-1s) kann verstreichen, bis ein Überlaufen des Feldes auftritt, d.h., dies wird im Jahre 2036 erfolgen. c) Die Stellenwertigkeit des niederwertigsten Bits eines NTP-Timestamps ist 2 32. Also vergehen zwischen 2 Zeitstempeln mindestens 5. /* 2 32 s 233 ps. Interessant ist in diesem Zusammenhang, dass der Zeitstempel, der ausschliesslich den Wert 0 enthält, als Fehlercode benutzt wird. Alle 136 Jahre gibt es daher eine Zeitspanne von knapp 233 Picosekunden, während der es keine gültige NTP-Zeit gibt. Listing 1: Lösung für Aufgabe 5 c Robert Baumgartl, 2009-15 3 6. April 2017

foo.c */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <ncurses.h> #include <unistd.h> #include <signal.h> #include <math.h> #include <sys/time.h> typedef void (*sighandler_t)(int); void setuptimer(unsigned long num_of_invocation) struct itimerval itv; int ret; itv.it_value.tv_sec=pow(2, num_of_invocation); itv.it_value.tv_usec=0; itv.it_interval.tv_sec=0; itv.it_interval.tv_usec=0; mvprintw(2,0, "Next wait intervall: %d s\n", (int) itv.it_value. tv_sec); ret = setitimer(itimer_real, &itv, NULL); if (ret == -1) perror("setitimer"); void alarmhandler(int nr) static int invocation=1; mvprintw("sigalrm invoked %i times.\n", invocation); flash(); invocation++; if (invocation == 5) printf("end.\n"); endwin(); exit(exit_success); else setuptimer(invocation); int main(int argc, char *argv[]) time_t currtime; char *msg; c Robert Baumgartl, 2009-15 4 6. April 2017

int key; sighandler_t ret; WINDOW *mainwnd; /* some terminal using ncurses */ mainwnd = initscr(); cbreak(); /* no input buffering */ nodelay(mainwnd, TRUE); /* don t wait for key */ curs_set(0); /* hide the cursor */ ret = signal(sigalrm, &alarmhandler); if (ret == SIG_ERR) perror("signal"); setuptimer(0); while((key=getch())!= q ) currtime = time(null); if (currtime == (time_t) -1) perror("time"); msg = ctime(&currtime); if (msg == NULL) perror("ctime"); mvprintw(0,0, "%s", msg); refresh(); sleep(1); endwin(); exit(exit_success); c Robert Baumgartl, 2009-15 5 6. April 2017