Übung Betriebssysteme, Uni Innsbruck 1 Projekt1: Prozesse unter Unix Teil II Prozesse / Systemaufrufe Fehlerbehandlung.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Ausführen.
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
Funktionen, Felder und Parameter-übergabe
Forschungszentrum caesar
Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
C Tutorium – Semaphoren –
der Universität Oldenburg
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Dynamischer Speicher und Struktur
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Programmieren mit JAVA
Programmierung 1 - Repetitorium
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
Arrays,Strings&Pointer in C/C++
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Einführung MySQL mit PHP
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Welche Funktion hat die php.ini? -Beinhaltet wichtige Einstellungen für PHP. Genannt seien hier u.a. der Speicherort von Cookies, Parameter der Kompilierung,
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Betriebssysteme: Unix
Dynamische Datentypen
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Betriebssysteme Übung Tutorium „System Calls & Multipgrogramming“
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
BMEVIEEA100 Grundlagen der Programmierung
1 Projekt1: Prozesse unter Unix Aufgabenstellung 3: Quicksort.
1 Projekt1: Prozesse unter Unix Aufgabenstellung 2: Interprozessnachrichtentausch.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Autor: Timo Pagel Nutzung: Diese Lernkarten sind für die Nutzung mit OpenCards gedacht Siehe dazu
Einführung in die Programmierung mit Java
Betriebssysteme Übung 2. Tutorium „System Calls & Multiprogramming“
Übung Betriebssystem, Uni Innsbruck 1 Projekt1: Prozesse unter Unix Teil I Grundlagen von Unix.
C Tutorium – Shared Memory – Knut Stolze. 2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher –
Beendigung von Prozessen Normale Beendigung –durch Ende von main –durch Aufruf von exit() Anormale Beendigung –Aufruf von abort() –interne oder externe.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
C++ FÜR cOMPUTERSPIELENTWICKLER
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Prozesse Alexander Sczyrba Jan Krüger.
Netzwerk - Programmierung
Nksainf.ch/oinf.
Implementieren von Klassen
 Präsentation transkript:

Übung Betriebssysteme, Uni Innsbruck 1 Projekt1: Prozesse unter Unix Teil II Prozesse / Systemaufrufe Fehlerbehandlung

Übung Betriebssysteme, Uni Innsbruck 2 Übersicht u 2.0 Prozesse / Systemaufrufe unter Unix F 2.1 Was sind Prozesse ? F 2.2 Was sind Systemaufrufe ? F 2.3 Systemaufruf fork() F 2.4 Systemaufruf wait() F 2.5 Systemaufruf exec() F 2.6 Systemaufruf gets() F 2.7 Systemaufruf strtok() F 2.8 Systemaufruf getpid() F 2.9 Systemaufruf ipcrm / ipcs F 2.10 Message Queues (msgget, msgsnd, msgrcv, msgctl)

Übung Betriebssysteme, Uni Innsbruck 3 Übersicht u 3.0 Fehlerbehandlung F 3.1 Was versteht man unter Fehlerbehandlung ? F 3.2 Fehlerbehandlung mit errno.h F 3.3 Fehlerbehandlung mit perror()

Übung Betriebssysteme, Uni Innsbruck 4 u 2.1 Was sind Prozesse ? u 2.2 Was sind Systemaufrufe ? u 2.3 Systemaufruf fork() u 2.4 Systemaufruf wait() u 2.5 Systemaufruf exec() u 2.6 Systemaufruf gets() u 2.7 Systemaufruf strtok() u 2.8 Systemaufruf getpid() u 2.9 Systemaufruf ipcrm / ipcs u 2.10 Message Queues (msgget, msgctl, msgsnd, msgrcv) Übersicht „ Prozesse und Systemaufrufe unter Unix“

Übung Betriebssysteme, Uni Innsbruck 5 u Definitionen F Ein Prozess ist eine zeitliche Abfolge einer Reihe von Aktionen - erzeugt durch Ausführung einer Folge von Instruktionen. F Ein Prozess ist ein in Ausführung befindliches Programm. u Prozesshierarchie F Ähnlich dem Dateisystem sind sämtliche Prozesse in einer baumartigen Hierarchie angeordnet. Alle Prozesse sind Nachfolger des Prozesses init (pid = 1), der während des Bootens als erster gestartet wird. F Durch die Kombination der Systemcalls „fork“ und „exec“ erzeugt init für jeden Terminaleingang einen Prozess getty (bzw. ttymon) der den interaktiven Zugang zum System ermöglicht. F Nach erfolgreichem Login wird die Shell gestartet. 2.1 Was sind Prozesse ?

Übung Betriebssysteme, Uni Innsbruck Was sind Prozesse ?

Übung Betriebssysteme, Uni Innsbruck 7 u Interface zwischen Prozess und Betriebssystem u Direkter Zugriff auf Funktionalität des Kernels u Unterschied zwischen Funktionsaufruf und SystemCall? F Funktion als Teil des Benutzerprogrammes F SystemCall exekutiert Kernel-Code u SystemCall schreibt die Parameter auf bestimmte Adresse und führt dann einen TRAP. BS übernimmt dann die Kontrolle. u Ein Systemaufruf erzeugt, zerstört oder benutzt verschiedene Ressourcen, die durch das Betriebssystem verwaltet werden. u Beispiele für Ressourcen: F Prozesse F Dateien F Speicher F Semaphore 2.2 Was sind Systemaufrufe ?

Übung Betriebssysteme, Uni Innsbruck 8 Systemaufruf

9 u fork() erzeugt einen neuen Prozess unter UNIX. u Nach der Ausführung des fork()-Aufrufs existieren zwei identische Prozesse, die vollständig unabhängig voneinander ablaufen. u verschiedene Prozess-IDs Syntax #include #include int fork(); u Rückgabewerte der Funktion fork(): F im Vater: die Prozeß-ID: (PID) des Sohn-Prozesses F im Sohn: der Wert 0 F im Fehlerfall: der Wert Systemaufruf fork()

Übung Betriebssysteme, Uni Innsbruck Systemaufruf fork()

Übung Betriebssysteme, Uni Innsbruck 11 u Mittels der Funktion wait() wartet ein Vater-Prozess auf das Ende eines Sohn-Prozesses. u Der Rückgabewert der Funktion ist die PID des Sohn-Prozesses, der gerade beendet wurde. u Ebenso wird in den Parameter „status“ durch das Betriebssystem der Exit-Code des Sohn-Prozesses, der durch den Befehl exit() gegeben ist, eingetragen. u Im Fehlerfall (wenn kein Sohn-Prozess vorhanden ist) gibt die Funktion den Rückgabewert -1 zurück und die Variable errno wird auf den entsprechenden Wert gesetzt. Syntax #include #include int wait(int *status); 2.4 Systemaufruf wait()

Übung Betriebssysteme, Uni Innsbruck 12 u Programmcode wird in den laufenden Prozess geladen. u Überladen eines Prozesses mit einem neuen Code u 5 verschiedene Routine mit kleinen Unterschieden: F execl, execle, execv, execlp und execvp. Syntax int execvp( const char *file, char *const argv[]) file Pointer auf die Datei, die ausgeführt werden soll argv Die Argumente, mit denen das Programm ausgeführt werden soll 2.5 Systemaufruf exec()

Übung Betriebssysteme, Uni Innsbruck 13 u einlesen einer Character-Sequenz von stin bis „\n“ oder EOF gelesen wurde u erzeugt einen String durch eliminieren von „\n“ und anhängen von „\0“ Beispiel#include<stdio.h> int main(int argc, char **argv) { char buf[255]; printf ("type something:"); if ( gets(buf) != NULL ) printf ("you typed:%s\n",buf); } u Alternative: scanf 2.6 Systemaufruf gets()

Übung Betriebssysteme, Uni Innsbruck 14 u Eine Zeichenkette wird anhand eines Trennzeichens in mehrere Teile (Token) zerlegt. u Die zu zerlegende Zeichenkette muss nur beim ersten Aufruf angegeben werden, alle folgenden Aufrufe benötigen nur das Trennzeichen (siehe Beispiel). u Retourniert wird der Teilstring bis zum nächsten Trennzeichen Syntax #include #include char *strtok( char *str1, const char *delimiter ); 2.7 Systemaufruf strtok()

Übung Betriebssysteme, Uni Innsbruck 15 Beispiel char str[] = ”now # is the time for all # good men to come to the # aid"; char delims[] = "#"; char *result = NULL; result = strtok( str, delims ); while( result != NULL ) { printf( "result is \"%s\"\n", result ); result = strtok( NULL, delims ); } Resultat result is "now " result is " is the time for all " result is " good men to come to the " result is " aid" 2.7 Systemaufruf strtok()

Übung Betriebssysteme, Uni Innsbruck 16 u Liefert die eindeutige Prozess-ID (auch PID genannt) eines Prozesses. u Elternprozesses: getppid() Beispiel#include<stdio.h> int main(int argc, char **argv) { char buf[255]; int pid=getpid(); printf ("my pid:%d\n",pid) } 2.8 Systemaufruf getpid()

Übung Betriebssysteme, Uni Innsbruck 17 u ipcs: zeigt Interprozesskommunikationsressourcen an (ipc status) F Kommando zum Auflisten der bereits vergebenen IPC-Ressourcen (Semaphoren, Message Queues und Shared Memory) F Enthält neben den Schlüsseln und der ID auch den Namen des Besitzers dieser Ressource u ipcrm: Ressourcen löschen (ipc remove) F falls ein Prozess seine eigenen Ressourcen nicht löscht gib die Ressourcen mit ipcrm freigib die Ressourcen mit ipcrm frei F Als Parameter dienen die ID der Ressource und der Typ. u ipcsfree löscht alle IPC-Ressourcen eines Benutzers F Pflicht: vor dem Ausloggen 2.9 Systemaufruf ipcrm / ipcs

Übung Betriebssysteme, Uni Innsbruck 18 ipcs IPC status from as of Tue Feb 4 20:39:43 CET 2003 T ID KEY MODE OWNER GROUP Message Queues: q 0 0x3c Rrw--w--w- root root q 1 0x3e rw-r--r-- root root Shared Memory: m xd29cf630 --rw-r----- oracle dba m x rw-rw-rw- daq cms Semaphores: s 1 0x41365ad3 --ra-ra-ra- root root s 2 0x ra-r--r-- root root s x89a5cac4 --ra-r----- oracle dba ipcrm -m 1300:löscht Shared Memory mit der ID 1300 ipcrm -M 0xd29cf630: löscht Shared Memory mit dem KEY 0xd29cf630 ipcrm -s : löscht Semaphor mit der ID ipcrm -S 0x89a5cac4:löscht Semaphor mit dem KEY 0x89a5cac4 ipcrm -q 0: löscht Message Queue mit der ID Systemaufruf ipcrm / ipcs

Übung Betriebssysteme, Uni Innsbruck 19 u Message Queues: Übertragung von Nachrichten zwischen Prozessen. u Nach Einrichten einer solchen Message Queue kann ein Prozess Nachrichten an eine bestimmte (oder mehrere) Message Queues schicken bzw. zu empfangen Message Queues (msgget, msgsnd, msgrcv, msgctl)

Übung Betriebssysteme, Uni Innsbruck Message Queues

Übung Betriebssysteme, Uni Innsbruck 21 u Neue Message Queues anlegen bzw. auf bestehende referenzieren mittels msgget() Syntax int msgget ( key_t key, int msgflg ) key Eindeutiger Schlüssel der Message Queue msgflg IPC_CREAT : falls noch keine Message Queue mit dem Schlüssel key existiert, wird eine neue angelegt, anderfalls auf die existierende MQ zugegriffen. IPC_EXCL : nur in Verbindung mit IPC_CREAT sinnvoll. Existiert bereits eine Message Queue mit dem Schlüssel key, wird -1 zurückgeliefert 2.10 Message Queues (msgget, msgsnd, msgrcv, msgctl)

Übung Betriebssysteme, Uni Innsbruck 22 u msgsnd wird benutzt, um Nachrichten an andere Prozesse zu schicken Syntax int msgsnd ( int msqid, struct msgbuf *msgp, int msgsz, int msgflg ) msqid Ist die Message Queue-ID msgp Ist ein Zeiger auf den Nachrichtenpuffer msgsz Gibt die Länge der Nachricht an (ohne die Länge des Nachrichtentyps) msgflg Kann entweder 0 oder IPC_NOWAIT sein (im Fall von IPC_NOWAIT wird nicht gewartet, falls es nicht möglich sein sollte, in den Puffer des Empfängerprozesses zu schreiben) 2.10 Message Queues (msgget, msgsnd, msgrcv, msgctl)

Übung Betriebssysteme, Uni Innsbruck 23 u msgrcv wird benutzt, um Nachrichten von anderen Prozessen zu empfangen Syntax int msgrcv (int msqid, struct msgbuf *msgp, int msgsz, int msgtype, int msgflg ) msqid Ist die Message Queue-ID msgp Ist ein Zeiger auf den Nachrichtenpuffer msgsz Gibt die Länge der Nachricht an (ohne die Länge des Nachrichtentyps) msgtype Gibt an, welche Nachrichten gelesen werden sollen msgflg Kann entweder 0 oder IPC_NOWAIT sein (im Fall von IPC_NOWAIT wird nicht gewartet, falls sich keine Nachricht im Empfangspuffer befindet) 2.10 Message Queues (msgget, msgsnd, msgrcv, msgctl)

Übung Betriebssysteme, Uni Innsbruck 24 u msgctl wird benutzt, um Message Queues zu verwalten Syntax int msgctl ( int msgqid, int cmd, struct msqid_ds *buf ) msqid Ist die Message Queue-ID cmd Gibt das Kommando an ( IPC_RMID, um die Queue zu löschen ) buf Wird als Kommando IPC_STAT angegeben (d.h. die Struktur einer Nachricht wird angefordert), wird die Struktur im Speicherbereich abgelebt, auf den buf zeigt 2.10 Message Queues (msgget, msgsnd, msgrcv, msgctl)

Übung Betriebssysteme, Uni Innsbruck 25 Übersicht „ 3.0 Fehlerbehandlung“ u 3.1 Was versteht man unter Fehlerbehandlung ? u 3.2 Fehlerbehandlung mit errno.h u 3.3 Fehlerbehandlung mit perror()

Übung Betriebssysteme, Uni Innsbruck Was ist Fehlerbehandlung ? u Systemaufrufe unter Unix haben eine einheitliche Konvention zur Rückgabe von Werten: F Rückgabewerte jedes Systemaufrufs sind vom Typ int F Im Fehlerfall wird -1 geliefert F Wird ein Systemcall nicht wie gewünscht ausgeführt, wird die externe Systemvariable errno zusätzlich gesetzt (die verschiedenen Möglichkeiten von errno können in errno.h nachgelesen werden) F Die Funktion strerror wandelt den Fehlercode von errno in einen String um, der die Fehlerursache beschreibt (dieser sollte in jeder Fehlermeldung verwendet werden)

Übung Betriebssysteme, Uni Innsbruck Fehlerbehandlung mit errno.h u Deklariert die globale Variable errno, die von verschiedenen Funktionen im Fehlerfall gesetzt wird u Sowie alle Werte, die diese annehmen kann, als Konstante.

Übung Betriebssysteme, Uni Innsbruck Fehlerbehandlung mit perror() u perror() gibt eine Fehlermeldung auf stderror aus, die den letzten Fehler beschreibt, der von einem Systemcall oder einer Library- Routine erzeugt wurde. u Die Fehler-Nachricht bezieht sich auf die Variable errno des Systems, die von diesen Funktionen im Fehlerfall gesetzt wird. Syntax void perror( char *s ) F Wenn der Parameter s ein beliebiger String ist, wird dieser String gefolgt von einem Doppelpunkt und einem Blank und anschließend die Fehler-Nachricht ausgegeben. F Ist der Parameter s gleich NULL, wird nur die Fehler-Nachricht ausgegeben.