Systemnahe Programmierung in C/C++

Ähnliche Dokumente
Kernel. G.2 Rechenzeiterfassung (2) G.2 Rechenzeiterfassung. G.1 Überblick. 1 Kommunikation zwischen Prozessen. Prototyp. Besprechung 3.

Linux Prinzipien und Programmierung

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Kernel. Prototyp. Besprechung 3. Aufgabe (printdir) Rechenzeiterfassung von Prozessen. POSIX-Signale. tms Datenstruktur

Vorlesung Betriebssysteme I

2. Prozesssynchronisation

U9-1 Prozesse: Überblick. U9-1 UNIX-Prozesshierarchie. U9-2 POSIX Prozess-Systemfunktionen. Prozesse sind eine Ausführumgebung für Programme

Übungen zu Systemprogrammierung 2 (SP2)

Prozesse und Threads. Gliederung. Prozesse und Threads. Wozu Prozesse? Übersicht: 1. Einführung und Übersicht. 2. Prozesse und Threads. 3.

In diesem Teil wird das Prozesskonzept von Unix beschrieben und elementare Kommandos zum Auflisten und Unterbrechen von Prozessen.

Beispiel 3. Shared Memory und Explizite Synchronisation. Daniel Prokesch. 27. April Überblick. Shared Memory. Semaphore. Ressourcenverwaltung

Einige Gedanken. Vorlesung Betriebssysteme I. Kategorisierung von IPC-Mechanismen. Beispiele für IPC-Mechanismen (Auswahl)

bereit (oder Zombie genannt). Normales Ende (exit) und synchrone und asynchrone Signal-Ereignisse, z.b.

Systemnahe Programmierung in C/C++

Hardwarenahe Programmierung. Eine Einführung

(a) Wie unterscheiden sich synchrone und asynchrone Unterbrechungen? (b) In welchen drei Schritten wird auf Unterbrechungen reagiert?

Systemprogrammierung I - Aufgaben zur Erlangung der Klausurzulassung für Informatiker und Wirtschaftsinformatiker

Systemnahe Programmierung in C/C++

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Nebenläufigkeit. Fakultät für Informatik der Technischen Universität München. Echtzeitsysteme Lehrstuhl Informatik VI Robotics and Embedded Systems

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

Einführung in die Systemprogrammierung unter Linux

Was machen wir heute? Betriebssysteme Tutorium 2. Organisatorisches. Frage 2.1.a. Theorieblätter Abgabe. Antwort. Probleme mit OS/161?

Übung zu Grundlagen der Betriebssysteme. 13. Übung

Rapid I/O Toolkit. Alexander Bernauer

2 UNIX Interprozesskommunikation

unix process interfaces HOWTO.txt

Interprozess- Kommunikation

Vortrag zum Seminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Bruno Kleinert 20. Juni 2007

Grundlagen der Informatik 3 Wintersemester 09/ Übung. Abgabe:

ORA-600 und ORA-7445 in der Oracle- Datenbank. Referent: Volker Mach, Systemadministrator MT AG

Systemnahe Programmierung in C/C++

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

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

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Dr. Monika Meiler. Inhalt

Systemnahe Programmierung in C/C++

Robotersteuerung. VL Mikrorechentechnik 2. SS 2013 Professur für Prozessleittechnik

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Benutzerprogramme und Benutzer-Adressraum

System Monitoring mit strace. Systemcall tracing

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

2 UNIX Interprozeßkommunikation. 2.1 Prozesse erzeugen und beenden

Geräte Treiber unter Unix/Linux

Embedded-Linux-Seminare. Linux als Betriebssystem

Assembler - Einleitung

Architekturbeschreibung Koala Editor

Theoretische Aspekte

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner

A Kompilieren des Kernels B Lineare Listen in Linux C Glossar Interessante WWW-Adressen Literaturverzeichnis...

POSIX Echtzeit: Kernel 2.6 und Preempt-RT

Wie groß ist die Page Table?

Ausnahmebehandlung in C++, Windows und Linux

OpenMP - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009

Systemnahe Programmierung in C/C++

Dienstspezifikation nach RFC

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

UNIX - LINUX. Prozesse. Überblick. Prozesse: Start. Prozesszustände. Prozesskontrollblock (Prozesssteuerblock) Prozesszustände

x86 Open Source Virtualisierungstechniken Thomas Glanzmann

Parallele Sitzungen 225

Speicherverwaltung. Foliensatz 7: Speicherverwaltung Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2013

Operating System Kernels

Rechnernutzung in der Physik. Betriebssysteme

Linux Paging, Caching und Swapping

CORBA. Systemprogrammierung WS

Java Fehlerbehandlung

Betriebssysteme. 4y Springer. Eine kompakte Einführung mit Linux. Albrecht Achilles. Mit 31 Abbildungen

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Programmierung mit C Zeiger

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

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

LeJOS: Mindstorms in Java programmieren

Was machen wir heute? Betriebssysteme Tutorium 12. Organisatorisches. Frage 12.1.a. Programmieraufgaben Vorstellung. Antwort

Systemprogrammierung.: unter Linux :.

I/O-Hardware Grundlagen. Ein- und Ausgabe. Memory-Mapped I/O. Device Controller

Tafelübung zu BS 4. Interprozesskommunikation

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

Übungen zu Systemprogrammierung 1 (SP1)

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

CA Übung Christian kann heute nicht kommen => ich bin heute da, Christian das nächste Mal wieder

Lösung Übungszettel 6

Prüfung VO Betriebssysteme SS2008 / 7. Juli 2008

Systemprogrammierung unter UNIX System V / Linux

Betriebssysteme KU - Bewertung A2 - WS 15/16

2. Hintergrundverarbeitung in Android: Services und Notifications

Grundlagen der Rechnerarchitektur

Systemprogrammierung unter Linux eine Einführung S. 1

Übung 4 - Betriebssysteme I

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

Betriebssysteme. Kapitel Arbeitsspeicherverwaltung in LINUX Allgemeines Virtueller Arbeitsspeicher eines Prozesses

Objektbasierte Entwicklung

Verbessertes Konzept: Monitore

Logging, Threaded Server

Delegatesund Ereignisse

Effizientes Memory Debugging in C/C++

Systeme 1. Kapitel 9.2. Interaktion von Hardware und Betriebssystem Linux-Kernel und x86 Systeme

Parallelverarbeitung mit Ruby

Klausur zum Kurs Betriebssysteme (1802) am 19. September 2009

Transkript:

Systemnahe Programmierung in C/C++ Signalbehandlung & MMap Knut Stolze stolze@informatik.uni-jena.de Lehrstuhl für Datenbanken und Informationssysteme Fakultät für Mathematik und Informatik 2006 11 29 Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 1 / 27

Agenda 1 Signale 2 Memory Mapped I/O 3 Aufgaben Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 2 / 27

Outline 1 Signale 2 Memory Mapped I/O 3 Aufgaben Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 3 / 27

Signale Asynchrone Benachrichtigung von Prozessen über Ereignisse Software Interrupt Ursachen (Beispiele) Tastendruck <ctrl>+<c> SIGINT Hardware-Exceptions Division durch 0 Zugriff auf invaliden Speicher (SIGSEGV) Prozesse senden Signale direkt Betriebssystem sendet Signale Z. B. zum Aufwecken eines Prozesses SIGPIPE beim Schreiben auf eine Pipe, die vom Leser bereits geschlossen wurde Keine weiteren Informationen (außer Signal selbst) übermittelt Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 4 / 27

Signale Asynchrone Benachrichtigung von Prozessen über Ereignisse Software Interrupt Ursachen (Beispiele) Tastendruck <ctrl>+<c> SIGINT Hardware-Exceptions Division durch 0 Zugriff auf invaliden Speicher (SIGSEGV) Prozesse senden Signale direkt Betriebssystem sendet Signale Z. B. zum Aufwecken eines Prozesses SIGPIPE beim Schreiben auf eine Pipe, die vom Leser bereits geschlossen wurde Keine weiteren Informationen (außer Signal selbst) übermittelt Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 4 / 27

Signale Asynchrone Benachrichtigung von Prozessen über Ereignisse Software Interrupt Ursachen (Beispiele) Tastendruck <ctrl>+<c> SIGINT Hardware-Exceptions Division durch 0 Zugriff auf invaliden Speicher (SIGSEGV) Prozesse senden Signale direkt Betriebssystem sendet Signale Z. B. zum Aufwecken eines Prozesses SIGPIPE beim Schreiben auf eine Pipe, die vom Leser bereits geschlossen wurde Keine weiteren Informationen (außer Signal selbst) übermittelt Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 4 / 27

Typen von Signalen 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGIO... man kill bzw. info kill Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 6 / 27

Typen von Signalen 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGIO... man kill bzw. info kill Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 6 / 27

Signal Handler Funktion, die Signal verarbeitet Aktueller Programmfluss wird unterbrochen Signal Handler wird aufgerufen Sollte nur kurze Zeit dauern Signal Handler kann potentiell wieder unterbrochen werden Programm muss transparente (reentrant) Abarbeitung der Signale gewährleisten Signal Handler muss registriert werden Mittels Funktionszeiger Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 7 / 27

Signal Handler Funktion, die Signal verarbeitet Aktueller Programmfluss wird unterbrochen Signal Handler wird aufgerufen Sollte nur kurze Zeit dauern Signal Handler kann potentiell wieder unterbrochen werden Programm muss transparente (reentrant) Abarbeitung der Signale gewährleisten Signal Handler muss registriert werden Mittels Funktionszeiger Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 7 / 27

Signal Handler Funktion, die Signal verarbeitet Aktueller Programmfluss wird unterbrochen Signal Handler wird aufgerufen Sollte nur kurze Zeit dauern Signal Handler kann potentiell wieder unterbrochen werden Programm muss transparente (reentrant) Abarbeitung der Signale gewährleisten Signal Handler muss registriert werden Mittels Funktionszeiger Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 7 / 27

Signal Handler Funktion, die Signal verarbeitet Aktueller Programmfluss wird unterbrochen Signal Handler wird aufgerufen Sollte nur kurze Zeit dauern Signal Handler kann potentiell wieder unterbrochen werden Programm muss transparente (reentrant) Abarbeitung der Signale gewährleisten Signal Handler muss registriert werden Mittels Funktionszeiger Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 7 / 27

Veraltete Schnittstelle #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); Vordefinierte Signal Handler SIG_DFL Standardfunktion (Abbruch, Coredump,... ) SIG_IGN Ignoriere Signal Probleme mit signal 1 Wie oft wird Signal Handler ausgeführt? (1x vs. immer) 2 Was passiert, wenn während der Bearbeitung eines Signals ein anderes Signal auftritt? 3 Was passiert, wenn während der Bearbeitung eines Signals dasselbe Signal nochmal auftritt? Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 9 / 27

Veraltete Schnittstelle #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); Vordefinierte Signal Handler SIG_DFL Standardfunktion (Abbruch, Coredump,... ) SIG_IGN Ignoriere Signal Probleme mit signal 1 Wie oft wird Signal Handler ausgeführt? (1x vs. immer) 2 Was passiert, wenn während der Bearbeitung eines Signals ein anderes Signal auftritt? 3 Was passiert, wenn während der Bearbeitung eines Signals dasselbe Signal nochmal auftritt? Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 9 / 27

Signal Handler Installieren #include <signal.h> int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) struct sigaction { void (*sa_handler)(int); sigset_t sa_mask; int sa_flags;... }; signum Zu bearbeitendes Signal (z. B. SIGINT) act Spezifikation des Handlers oldact Derzeit installierter Handler (wird zurückgegeben) Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 11 / 27

Signal Action sa_handler Zeiger auf Funktion, die Signal bearbeitet sa_mask Menge der Signal, die beim Abarbeiten des Handlers geblockt werden sollen sa_flags Flags SA_RESTART Starte unterbrochene Operation nach erfolgreicher Signalbearbeitung neu (z. B. Datei lesen, schreiben,... ) SA_ONESHOT Signal Handler nur einmal ausführen SA_NOMASK Signal Handler ist durch andere Signale unterbrechbar Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 12 / 27

Auslösen von Signalen Sende Signal an eigenen Prozess #include <signal.h> int raise(int sig); Sende Signal an anderen oder auch eigenen Prozess #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); Rechte beachten! Betriebssystem soll SIGALRM-Signal nach angegebener Zeit an eigenen Prozess senden #include <unistd.h> unsigned int alarm(unsigned int seconds); Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 14 / 27

Warten auf Signal Prozess hält so lange an (schläft), bis ein Signal eintrifft #include <unistd.h> int pause(void); Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 16 / 27

Signale in Threads Threads laufen in einem Prozess ab Signale operieren auf Prozessebene Laut POSIX reagieren alle Threads auf Signal Wenn durch Signalmaske nicht geblockt int pthread_kill(pthread_t thread, int sig) Führe Signal im Kontext des angegebenen Threads aus Signal Action (termination / stop) bezieht sich jedoch auf gesamten Prozess! Prozess (z. B. main thread muss Signal an entsprechenden Thread leiten Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 17 / 27

Outline 1 Signale 2 Memory Mapped I/O 3 Aufgaben Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 18 / 27

Memory Mapped I/O Bilde Datei auf Hauptspeicherbereich ab Arbeit auf Datei ist identisch mit regulären Speicheroperationen Betriebssystem sorgt transparent für das Schreiben der Änderungen auf Platte Effizienter als einzelne read/write-operationen Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 19 / 27

mmap void *mmap(void *addr, size_t len, int prot, int flg, int fd, off_t off); addr Vorschlag für Zieladresse Kann vom Betriebssystem angepasst werden Meist ist NULL geeignet len Größe des abzubildenden Bereichs prot Gibt an, ob Lese- (PROT_READ) und/oder Schreib- (PROT_WRITE)-Operationen erlaubt sind Zusätzlich PROT_NONE und PROT_EXEC flg Wie sollen Änderungen interpretiert werden? MAP_SHARED Schreibe Änderungen in Datei zurück MAP_PRIVATE Schreibe Änderungen nicht in Datei MAP_FIXED Interpretiere addr als exakte, nicht-änderbare Zieladresse fd Numerischer File-Deskriptor der abzubildenden Datei off Offset in die Datei Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 21 / 27

munmap & msync Entfernt Memory-Mapping einer Datei aus dem Adressraum des Prozesses int munmap(void *addr, size_t len) Zugriff auf Speicherbereich anschließend nicht mehr möglich msync wird aufgerufen Synchronisiere Hauptspeicherinhalt mit Datei int msync(void *addr, size_t len, int flags) flags MS_ASYNC Schreibe Änderungen asynchron MS_SYNC Schreibe Änderungen synchron MS_INVALIDATE Invalidiere Daten im Hauptspeicher Lies erneut von Datei Privater mmap-bereich wird nicht in Datei geschrieben Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 22 / 27

Outline 1 Signale 2 Memory Mapped I/O 3 Aufgaben Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 23 / 27

Aufgabe 1 Signale Schreiben Sie ein Programm, welches eine auf der Kommandozeile angegebene Datei öffnet, 3 Zeilen liest und auf die Standardausgabe schreibt, und anschließend auf ein SIGINT Signal wartet, bevor es den Rest der Zeilen der Datei liest und ausgibt. Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 24 / 27

Aufgabe 2 Signale Schreiben Sie ein Programm, welches einen Speicherzugriffsfehler erzeugt. Installieren Sie programmatisch einen Handler, der auf dieses Signal reagiert und auf die Standardausgabe ausgibt, welche Speicherblöcke aktuell auf dem Heap allokiert wurden. Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 25 / 27

Aufgabe 3 Memory Mapped I/O Schreiben Sie ein Programm, das eine angegebene Datei (A) öffnet und mittels memory mapped i/o den Inhalt einer zweiten Datei (B) über die Daten der ersten schreibt. Sie können die Größe des ge map ten Bereichs der Datei A selbst bestimmen, z. B. in Abhängigkeit von Datei B. Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 26 / 27

Aufgabe 4 Memory Mapped I/O + IPC Implementieren Sie die gleiche Funktionalität wie in Aufgabe 3. Jedoch soll diesmal ein Programm der Inhalt der Datei B in ein Shared Memory Segment schreiben, und das andere Programm liest von diesem Segment und schreibt die Daten (über mmap) in die Zieldatei. Knut Stolze (DBIS) C/C++ Programmierung 2006 11 29 27 / 27