Interprozesskommunikation in Unix. WS 08/09 Universität Innsbruck

Größe: px
Ab Seite anzeigen:

Download "Interprozesskommunikation in Unix. WS 08/09 Universität Innsbruck"

Transkript

1 Interprozesskommunikation in Unix Betriebssysteme WS 08/09 Universität Innsbruck

2 Unix-Standardisierung (kurzer Einschub) Erste Unix-Version 1969 (Ken Thompson) Im Laufe der Zeit bildete sich eine Vielzahl von unterschiedlichen Unix-Varianten heraus Standardisierung war notwendig Unix-Standardisierung POSIX (Portable Operating System Interface) Ganze Familie von Standards (System-Schnittstelle, Thread-Programmierung, Shells etc.) Die meisten heutigen Unix-Systeme genügen dem POSIX Standard POSIX-Standard basiert auf Unix-Systemen ist aber nicht darauf beschränkt (auch andere Betriebssysteme können diesen Standard erfüllen) X/Open XPG Industriestandard für offene Systeme Die meisten heutigen Unix-Implementierungen unterstützen die 4. Ausgabe (XPG 4) Unterschiedliche UNIX-Implementierungen 2

3 Unix-Implementierungen (kurzer Einschub) Standardisierungen werden von unabhängigen Organisationen durchgeführt Unix-Implementierungen (die diese Standards mehr oder weniger entsprechen) werden durch Firmen vorgenommen 3 wichtige Beispiele System V Release 4 (SVR 4) USL (Unix System Laboratories) von AT&T SVR 4 erfüllt POSIX und X/Open XPG 3 Heute üblicherweise Bezeichnung für eine ganze Klasse von Unix-Derivaten (Beispiel Solaris) BSD (Berkeley Software Distribution) UCB (University of California at Berkeley) Begriff BSD bezeichnet heute eine ganze Klasse von Unix-Derivaten, die ihre Wurzel in der eigentlichen BSD haben Linux Frei verfügbar und umfasst Teile der Funktionalität von SVR 4, der POSIX- Standards und der BSD-Linie 3

4 Prozesse und Kommunikation Mehrere Prozesse können gleichzeitig ablaufen Verwandt (z.b. Vaterprozess und Kindprozess) Nicht verwandt Prozesse, die nebeneinander herlaufen, wissen so gut wie nichts voneinander (z.b. welche Daten andere Prozesse enthalten etc.) Realisiert über Speicherschutz (siehe spätere Vorlesung) Es gibt aber Situationen, in denen man mit anderen Prozessen kommunizieren muss Mehrere Prozesse müssen spezielle Daten gemeinsam verwenden Die Prozesse sind untereinander abhängig und müssen aufeinander warten Daten müssen von einem Prozess zu einem anderen weitergereicht werden Die Verwendung von System-Ressourcen müssen koordiniert werden 4

5 Kommunikation über Dateien Würden keine spezielle Funktionen zur Verfügung stehen, dann müsste man über Dateien kommunizieren Umständlich Langsam Gemeinsame Benutzung muss koordiniert werden Probleme mit Dateien können teilweise gelöst werden Sperrdateien Record-Locking Ermöglicht das Sperren einer Datei oder eines Dateibereichs Memory-Mapped-I/O Herstellung einer Beziehung zwischen einer Datei und einem Puffer (im Hauptspeicher) Schnellere und einfachere Dateizugriffe Es gibt aber schnellere und elegantere Techniken für die Interprozesskommunikation (InterprocessCommunication oder kurz IPC) 5

6 Kommunikation zwischen Prozessen in UNIX Pipes Pipes (halbduplex) FIFOs (benannte Pipes) SVR 4 Interprozesskommunikation Message-Queues Semaphore Shared-Memory STREAMS STREAM Pipes Benannte STREAM Pipes Sockets Rechnernetze (4. Semester) 6

7 Überblick über die unterschiedlichen IPC-Arten IPC-Art POSIX XPG3 SVR4 BSD Pipes (halbduplex) X X X X FIFOs (benannte Pipes) X X X X STREAM Pipes X X Benannte STREAM Pipes X X Message-Queues X X Semaphore X X Shared-Memory X X Sockets X X STREAMS X Werden genau besprochen Werden ganz kurz besprochen 7

8 PIPES 8

9 Waren die erste Form der IPC Pipes Werden heute von allen Unix-Systemen angeboten Besitzen 2 Eigenschaften Sie können nur zwischen Prozessen eingerichtet werden, die einen gemeinsamen Vorfahren haben Pipes sind halbduplex, d.h. die Daten können immer nur in eine Richtung fließen Wiederholung aus der Übung Einrichten einer Pipe mit dem Befehl pipe Richtet eine Pipe im Kern ein Für den Prozess selbst zunächst nutzlos Daher wird forkaufgerufen um einen Kindprozessfür die Kommunikation zu erzeugen 9

10 Pipes (schematisch) nach pipe-aufruf Prozess A fd[0] fd[1] Vaterprozess A fd[0] fd[1] Kern fork Kern fd[0] fd[1] Kindprozess B 10

11 Beispiele Vaterprozess A close fd[0] fd[1] Vaterprozess A fd[0] close fd[1] Kern Kern fd[0] close fd[1] Kindprozess B close fd[0] fd[1] Kindprozess B 11

12 Typische Anwendung Weiterleiten über eine Pipe (Vaterprozess an Kindprozess) Pipe einrichten Kindprozess erzeugen Standardeingabe des Kindprozesses auf die Leseseite der Pipe einrichten Mit execden Kindprozessmit einem entsprechenden Programm überlagern Zusammenfassung typischer Abfolge in popen und pclose popen (Rückgabewert ist ein Dateizeiger) Einrichten einer Pipe mit pipe Kreieren eines Kindprozesses mit fork Schließen der nicht benutzten Seiten der Pipe im Vater- und Kindprozess Überlagern des Kindprozesses durch ein Shellprogramm mit exec Warten auf die Beendigung der exec-ausführung pclose Eine mit popen geöffnete Pipe wieder schließen 12

13 Benannte Pipes (FIFOs) Pipes können nur zwischen verwandten Prozessen verwendet werden FIFOs (namedpipes) können zwischen beliebigen Prozessen verwendet werden FIFO Ist eine Pipe die einen Namen hat Wird wie eine Datei behandelt Daten können aber nur einmal gelesen werden Nach dem Lesen sind die Daten nicht mehr vorhanden! Unterstützt mehrere Schreibprozesse 13

14 Beispiel (Kommandozeile) In der ersten Shell mkfifo /tmp/test cat </tmp/test liest Daten aus der FIFO und gibt sie in der Shell aus In einer zweiten Shell: cat >/tmp/test wartet auf Tastatureingaben und schreibt sie in die FIFO Text, der in der zweiten Shell eingegeben wird, erscheint nach einem Return in der ersten Shell Benutzerrechte Erzeuger kann Benutzungsrechte setzen p zeigt an, dass es sich um eine FIFO handelt (Beispiel:"prwxrwxrwx") 14

15 FIFOS in C #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); pathnamesteht für den FIFO-Dateinamen modelegt die Zugriffsrechte für die FIFO fest (symbolische Konstante, z.b. O_NONBLOCK) Tritt ein Fehler auf, gibt mkfifo-1 zurück, ansonsten 0 Wurde die FIFO erfolgreich angelegt, kann sie danach wie eine gewöhnliche Datei geöffnet und benutzt werden fopen, open, fprintf, write etc. 15

16 Regeln für FIFOs open auf eine FIFO Ohne O_NONBLOCK Leser/Schreiber blockiert bis ein anderer Prozess die FIFO zum Schreiben/Lesen öffnet Mit O_NONBLOCK Ein open für Nur-Lesen kehrt sofort zurück Ein open für Nur-Schreiben führt zu einem Fehler, wenn kein Leser vorhanden ist Schreiben in eine FIFO ohne Leseprozess SIGPIPE-Signal Schließen durch letzten Schreiber Für den Leseprozess wird ein EOF generiert Gleichzeitiges Schreiben durch mehrere Prozesse Wenn mit writenicht mehr als PIPE_BUFBytes geschrieben werden ist alles in Ordnung Ansonsten können Daten vermischt werden 16

17 Beispiel (1) #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { FILE *fp_fifo; int count; char buf[4096]; if ( mkfifo("fifo_test", 0777) == -1) { perror("mkfifo"); exit(exit_failure); } if ( (fp_fifo = fopen("fifo_test", "r")) == NULL){ perror("fopen"); exit(exit_failure); } printf("you told my child: "); while( (count = fscanf(fp_fifo, "%s", buf)) > 0) { printf("%s", buf); } printf("\n"); if ( fclose(fp_fifo) == EOF ) {perror("fclose");exit(exit_failure);} if ( unlink("fifo_test") == -1) {perror("unlink");exit(exit_failure);} exit(exit_success); } 17

18 Beispiel (2) #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv){ FILE *fp_fifo; char buf[4096]; if ( (fp_fifo = fopen("fifo_test", "w")) == NULL){ perror("fopen"); exit(exit_failure); } printf("i am child %d, tell me something: ", getpid()); scanf("%s", buf); fprintf(fp_fifo, "%s", buf); if ( fclose(fp_fifo) == EOF ) { perror("fclose"); exit(exit_failure); } exit(exit_success); } 18

19 Beispiel für eine Anwendung 19

20 SVR 4 - INTERPROZESSKOMMUNIKATION 20

21 SVR 4 -IPC Nachfolgend werden drei Methoden für die IPC vorgestellt Austausch von Nachrichten zwischen Prozessen (Message-Queues) Synchronisation über Semaphore Austausch von Daten über gemeinsame Speicherbereiche (Shared- Memory) Die Methoden nutzen unterschiedliche Objekte Nachrichtenwarteschlangen Semaphore gemeinsame Hauptspeicherbereiche Die Verwaltung dieser Objekte ist aber einheitlich Alle drei Methoden verwenden dieselben systemweiten Ressourcen, welche von mehreren Prozessen gemeinsam genutzt werden können Somit ist eine Kommunikation zwischen nicht verwandten Prozessen möglich Hier werden keine File-Deskriptoren etc. verwendet 21

22 Kennung und Schlüssel Kennung (Identifier) Jedem Objekt wird intern vom Kern eine eindeutige Kennung (nichtnegative Zahl) zugeteilt Diese Zuteilung erfolgt beim Einrichten des Objekts Kennungszahlen können sehr groß werden Kennungszahlen von gelöschten Objekten werden nicht unmittelbar wieder vergeben (Unterschied zu Filedeskriptoren!) Es wird immer weiter bis zu einem maximalen Wert hochgezählt und dann wieder bei 0 begonnen Schlüssel (Key) Ein Schlüssel muss angegeben werden, wenn ein neues Objekt eingerichtet wird Dieser Schlüssel hat der Typ key_t(meist in <sys/types.h> als long definiert) Der Schlüssel wird vom Kern mit der Kennung verbunden Dadurch können nicht verwandte Prozesse ein Objekt gemeinsam benutzen Die Prozesse müssen nur den Schlüssel kennen Schlüssel sollte eindeutig sein 22

23 Einrichten eines neuen Objekts Für das Einrichten existieren die drei Funktionen msgget, semget und shmget(siehe nachfolgende Abschnitte) Alle drei Funktionen haben neben dem Schlüssel noch ein weiteres Argument flag Eine neues Objekt kann auf zwei verschiedene Arten kreiert werden: Angabe von IPC_PRIVATE als Schlüssel Damit wird ein privates Objekt eingerichtet (kein Schlüssel zugeordnet) Angabe eines noch nicht existierenden Schlüssels wobei im aktuellen flag-argument IPC_CREAT gesetzt ist Um sicherzustellen, dass beim Einrichten eines Objekts wirklich ein neues Objekt angelegt wird, muss im aktuellen flag Argument sowohl IPC_CREAT als auch IPC_EXCL gesetzt sein (siehe spätere Beispiele) 23

24 Herstellen einer Verbindung Client-Prozesse können zu einem bereits existierenden Objekt eine Verbindung herstellen Aufruf der entsprechenden Funktionen (msgget, semgetund shmget) mit dem gleichen Schlüssel, der beim Kreieren verwendet wurde Im flag-argument darf dabei IPC-CREAT nicht gesetzt sein Existierende IPC-Objekte können auf der Kommandozeile angezeigt werden Kommando ipcs listet die aktuellen Objekte auf Bei allen Objekten werden standardmäßig Schlüssel, Kennung, Benutzer und Zugriffsrechte angegeben Weitere Informationen sind vom Objekt oder von den entsprechenden Argumenten abhängig (siehe man ipcs) 24

25 Ein Objekt existiert so lange, bis es explizit gelöscht wird Löschen von Objekten bis ein Shutdown für das System erfolgt Ein Objekt kann von jedem Benutzer mit den entsprechenden Zugriffsrechten oder immer vom Eigentümer gelöscht werden Für das Löschen werden die Funktionen msgctl, semctlund shmctl verwendet Dazu muss das Argument IPC_RMID angegeben werden Auf der Kommandozeile steht das Kommando ipcrmzur Verfügung Das zu löschende Objekt kann über den Schlüssel oder die Kennung identifiziert werden 25

26 Zugriffsrechte und Limits Zu jedem Objekt existiert die Struktur ipc_perm, die Zugriffsrechte für das Objekt und dessen Eigentumsverhältnisse festlegt Einige Komponenten dieser Struktur können mit den Befehlen msgctl, semctl und shmctl gesetzt werden (mit dem kdo- Argument IPC_SET) Die Zugriffsrechte sind ähnlich zu den Zugriffsrechten von Dateien Es existieren aber keine Ausführrechte Limits Für alle drei Objektarten sind Limits festgelegt Die meisten Limits können nur durch eine Neukonfiguration des Kernels geändert werden 26

27 Kommunikationsmöglichkeiten mit SVR 4 - IPC Mit IPC_PRIVATE Nicht verwandte Prozesse Ein Prozess A kreiert ein Objekt mit IPC_PRIVATEund speichert die Kennung in einer Datei Prozesse B, C.. etc. lesen aus dieser Datei die Kennung und greifen auf das Objekt zu Verwandte Prozesse Vaterprozess kreiert das Objekt mit IPC_PRIVATEund speichert die Kennung in einer Variable Bei fork wird diese Kennung an den Kindprozess weitervererbt Ohne IPC_PRIVATE Mehrere Prozesse können einen gemeinsamen Schlüssel vereinbaren Z.B. in einer Headerdatei Ein Prozess (Server) kreiert das Objekt mit diesem Schlüssel Mehrere Prozesse (Clients) greifen über diesen Schlüssel auf das Objekt zu Wenn der Schlüssel schon vergeben wurde, dann muss der Server-Prozess eine entsprechende Fehlerbehandlung durchführen 27

28 MESSAGE-QUEUES 28

29 Message-Queues Message-Queues (Nachrichtenwarteschlangen ) werden im Kern in Form einer verketteten Liste verwaltet standardmäßig nach dem FIFO-Prinzip Prioritäten möglich Befehle msgget: Eine Message-Queue einrichten oder eine bestehende öffnen msgsnd: Nachricht schicken (d.h. am Ende der betreffende Queue anhängen) msgrcv: Nachrichten aus einer Queue empfangen (die Nachrichten müssen nicht in der Reihenfolge aus der Queue gelesen werden, in der sie dort eingetragen wurden) Jede Nachricht setzt sich zusammen aus Message-Typ (Datentyp long, benutzerdefiniert) Länge der Message (Datentyp size_t) Message-String (Nachricht) 29

30 Funktionsweise, Status, Limits 2 oder mehrere Prozesse tauschen Informationen über solch eine Message-Queue aus Der Sender gibt mit Hilfe eines Systemaufrufs eine Nachricht in die Message-Queue Der Empfänger liest die Nachricht aus der Message-Queue Zu jeder Message-Queue existiert eine msqid_ds-struktur, die den aktuellen Status der Queue festlegt Limits MSGMAX Maximale Anzahl der Bytes einer Nachricht MSGMNB Maximale Anzahl von Bytes in einer Message-Queue MSGMNI Maximale Anzahl von Message-Queues im System MSGTQL Maximale Anzahl von Messages im System 30

31 Benutzung #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgget(key_t key, int msgflg) int msgctl(int ID, int cmd, struct msqid_ds *buf) int msgsnd(int ID, struct msgbuf *msgp, size_t msgsz,int msgflg) ssize_t msgrcv(int ID, struct msgbuf *msgp, size_t msgsz, long msg-typ, int msgflg) 31

32 Systemaufruf msgget Syntax int msgget ( key_t key, int msgflg ) Beschreibung key Eindeutiger Schlüssel (Name) der Message-Queue IPC_PRIVATE: Spezieller Wert für key ignoriert msgflgund gibt die ID der Message-Queue (bei Erzeugung) zurück msgflg IPC_CREAT: Erzeugt eine Message-Queue, wenn sie noch nicht existiert IPC_EXCL: In Kombination mit IPC_CREAT, Aufruf von msggetbricht ab, wenn die Message-Queue schon existiert Rückgabewert ID der Warteschlange (wenn angelegt) -1 (sonst) 32

33 Systemaufruf msgsnd Syntax int msgsnd ( int msqid, const void *msgp, size_t msgsz, int msgflg ) Beschreibung msqid: ID der Warteschlange msgp: Pointer auf einen Nachrichtenpuffer der Form struct msgbuf { long mtype; /* Typ */ char mtext[msgsz]; /* Daten */ }; MSGSZ: Größe von mtext in Bytes msgflg: 0 (blockieren, wenn Queue voll) IPC_NOWAIT(sofort zurückkehren, wenn Queue voll und Setzen von errno) Rückgabewert 0(wenn erfolgreich), -1(bei Fehler, errno wird gesetzt) 33

34 Syntax Systemaufruf msgrcv ssize_t msgrcv (int msqid, void *msgp, size_t msgsz, long msgtype, int msgflg ) Beschreibung msqid, msgp: siehe msgsnd msgsz: Maximale Länge von mtextin Bytes msgtype: 0 = erste Nachricht aus der Message-Queue (FIFO) >0 = Erste Nachricht mit Typ msgtyp(wenn FlagMSG_EXCEPTgesetzt ist, wird die erste Nachricht empfangen, die nicht von diesem Typ ist)) <0 = Erste Nachricht mit kleinstem Typ <= abs(msgtyp) msgflg: 0 (blockieren, wenn Queue leer) IPC_NOWAIT (sofort zurückkehren, wenn Queue leer und Setzen von errno) Rückgabewert 0(wenn erfolgreich), -1 (bei Fehler, errno wird gesetzt) 34

35 Systemaufruf msgctl Syntax int msgctl ( int msqid, int cmd, struct msqid_ds *buf ) Beschreibung msqid: ID der Message-Queue cmd: IPC_STAT Abfragen des Status der Message-Queue (msgctlschreibt die Statusinformationen an die Adresse buf) IPC_SET Setzen des Eigentümers, der Zugriffsrechte und der maximalen Größe (Werte aus bufin die entsprechende Datenstruktur der Message-Queue schreiben) msg_perm.uid msg_perm.gid msg_perm.mode /* only lowest 9-bits */ msg_qbytes IPC_RMID die Message-Queue entfernen Andere Prozesse erhalten bei einem nachfolgenden Zugriff auf die Queue einen Fehler (errno wird auf EIDRM gesetzt) buf: für IPC_SET oder IPC_STAT Operationen Rückgabewert zeigt an, ob die Operation erfolgreich war 35

36 Beispiel (1) #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define MSGSZ 128 /* message size */ #define KEY 1024 /* common key */ typedef struct msgbuf { long mtype; char mtext[msgsz]; } message_buf; /* Message structure */ 36

37 Beispiel (2, msg_send.c) #include "mymsg.h" int main(int argc, char* argv[]) { int msqid, msgflg = IPC_CREAT IPC_EXCL 0666; message_buf sbuf; size_t buf_length; fprintf(stderr, "\nmsgget: Calling msgget(%d,%o)\n\n ",KEY,msgflg); if ((msqid = msgget(key, msgflg )) < 0) { perror("can not create message queue"); exit(exit_failure); } sbuf.mtype = 1; /* message type 1 */ strcpy(sbuf.mtext, "Did you get this?"); /* this is the message */ buf_length = strlen(sbuf.mtext) + 1 ; } msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT); /* Send message */ printf ("%d, %d, %s, %d\n\n",msqid, (int) sbuf.mtype, sbuf.mtext, (int) buf_length); printf("message: \"%s\" Sent\n\n", sbuf.mtext); exit(exit_success); 37

38 Beispiel (3, msg_recv.c) #include "mymsg.h" int main(int argc, char *argv[]) { int msqid; message_buf rbuf; /* get the MQ with name KEY created by the server */ msqid = msgget(key, 0666); /* get message with type 1 */ msgrcv(msqid, &rbuf, MSGSZ, 1, 0); printf("%s\n", rbuf.mtext); /* print answer */ } exit(exit_success); 38

39 SEMAPHORE 39

40 Semaphor Eine klassische Methode um den Zugriff mehrerer Prozesse auf gemeinsame Ressourcen zu beschränken (synchronisieren) Eine geschützte Variable (oder ADT) die von eine Menge von Prozessen gelesen/geschrieben werden kann Ein Prozess, der auf einen gemeinsamen Datenbereich zugreifen möchte führt folgende Schritte durch Überprüfen des Semaphors Wert > 0: Ressource kann benutzt werden Prozess dekrementiert den Semaphor um 1 bevor er zugreift Wert = 0: Ressource wird benutzt Prozess wartet, bis der Bereich frei wird, d.h. der Semaphor positiv wird Inkrementieren des Semaphors um 1, wenn der Zugriff auf den gemeinsamen Bereich beendet wurde Überprüfen und Dekrementieren müssen atomare Operationen sein und sind daher normalerweise im Kern implementiert 40

41 Beispiele Beispiel für die Benutzung P(s) = Operation Reduziere Semaphor um 1 V(s) = Operation Erhöhe Semaphor um 1 Prozess 1 Anweisung;. P(s); /*kritische Region*/ V(s); end; Prozess 2 Anweisung; P(s); /*kritische Region */ V(s);. end; Prozess 1 und 2 rufen Funktion P() auf Nur 1 (!) Prozess kann den kritischen Bereich betreten Der zweite blockiert bei P() 41

42 Mehrere Semaphore Synchronisierung mit mehreren Semaphorvariablen Beispiel: Zugriff auf gemeinsamen Speicher mit 2 Semaphoren schützen Prozess 1 (Speicher schreiben) Anweisung. P(write); /*kritische Region*/ /* Schreiben in den Speicherbereich*/ V(read); end; Vorsicht bei Initialisierung Beispiele write=1,read=0 - Strikte Ordnung write=read=0 Deadlock Hinweis Prozess 2 (Speicher lesen) Anweisung; P(read); /*kritische Region */ /* Auslesen des Speicherbereichs */ V(write);. end; Binäre Semaphore nehmen nur die Werte 0 oder 1 an Allgemeine Semaphore können Werte von 0.. N annehmen, wobei der aktuelle Wert anzeigt, wie viele Prozesse den kritischen Bereich noch benutzen dürfen 42

43 Arten von Semaphorvariablen(1) Hängt vom Unix-System ab Namenlose Semaphore (analog zu Pipes) Einfache Semaphorvariablenfür die Synchronisierung von Threads oder Vater-/Kindprozessen #include <semaphore.h> sem_t sem; int sem_init(sem_t *sem, int pshared, unsigned value); int sem_post(sem_t *sem); int sem_wait(sem_t *sem); int sem_destroy(sem_t *sem); // V(sem) // P(sem) 43

44 Arten von Semaphorvariablen(2) Benannte Semaphore (analog zu FIFOs) Damit kann man auch Prozesse synchronisieren, die keinen gemeinsamen Speicherbereich haben Ähnlich zu FIFOs (Pseudo-Datei) mit Zugriffsrechten etc. sem_t sem_open(const char*name, int oflag,...); int sem_post(sem_t *sem); int sem_wait(sem_t *sem); int sem_close(sem_t sem); // V(sem) // P(sem) 44

45 Eigenschaften SVR 4 -Semaphore Ein Semaphor ist eine Menge von einem oder mehreren Semaphorwerten Beim Kreieren wird die Anzahl der Werte dieser Menge festgelegt Erlaubt eine detaillierte Aufteilung von kritischen Bereichen Das Kreieren ist unabhängig vom Initialisieren (2 Befehle) Eher ein Nachteil! Ein Semaphor muss immer explizit freigegeben (gelöscht) werden Systemaufrufe Einen Semaphorvektoranlegen bzw. Zugriff zu einem bestehenden Semaphorvektor besorgen: semget Statuskontrolle, Initialisierung, Löschen: semctl Operationen P() und V(): semop, semtimedop 45

46 Status und Limits Zu jedem Semaphore existiert eine semid_ds-struktur Limits SEMVMX Maximaler Wert eines Semaphors (typischer Wert: 32767) SEMMNI Maximale Anzahl von Semaphormengen(typischer Wert: 128) SEMMNS Maximale Anzahl von Semaphoren (typischer Wert: 3000) SEMMSL Maximale Anzahl von Semaphoren pro Semaphormenge (typischer Wert: 250) SEMOPN Maximale Anzahl von Operationen pro semop-aufruf (typischer Wert: 32) 46

47 Systemaufruf semget Syntax int semget( key_t key, int nsems, int semflag ); Beschreibung key, semflag: wie bisher nsems: Anzahl der Semaphore in der Menge Bei der Erzeugung muss das Argument angegeben werden Wird eine existierende Semaphormenge geöffnet, dann kann 0 übergeben werden Rückgabewert ID des Semaphors (für spätere Benutzung) -1 (sonst) Beispiel #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> if(( semid =semget( 5L, 1, IPC_CREAT 0666 )) < 0 ) { perror("semget failed"); exit(exit_failure); } 47

48 Syntax Systemaufruf semctl int semctl(int semid, int semnum, int cmd, union semun arg ); Beschreibung semnum: Bestimmter Wert aus der Semaphormenge(0.. nsems-1) cmd: IPC_STAT Abfragen der Struktur semid_ds IPC_SET Eigentümer/Zugriffsrechte setzen IPC_RMID Löschen der Semaphormenge GETVAL, SETVAL Abfragen/Setzen eines Wertes der Semaphormenge GETALL, SETALL Abfragen/Setzen aller Werte der Semaphormenge semun union semun { }; int val; /* value of SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT,IPC_SET */ ushort *array; /* array for GETALL, SETALL */ - Rückgabewert hängt von der Operation ab (siehe man semctl) 48

49 Beispiel (Systemaufruf semctl) #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> /* initialize */ union semun arg; arg.val = 1; if( semctl( semid, 0, SETVAL, arg ) < 0 ) { perror("semctl SETVAL failed"); exit(exit_failure); } /* remove semaphore 0 */ if( semctl( semid, 0, IPC_RMID, arg ) < 0 ) { perror("semctl IPC_RMID failed"); exit(exit_failure); } 49

50 Systemaufruf semop Syntax int semop( int semid, struct sembuf *sops, size_t nsops ); Beschreibung sembuf struct sembuf { ushort sem_num; /* no of semaphore 0..n-1*/ short sem_op; /* operation */ short sem_flg; /* flags (IPC_NOWAIT, SEM_UNDO) */ }; sosp: Ist die Adresse eines Arrays von Semaphoroperationen(Elemente des Arrays haben den Datentyp struct sembuf) sem_op: > 0 : Ressourcen freigeben, Semaphore um Wert erhöhen < 0 : Ressourcen anfordern, Semaphore um Wert erniedrigen (Funktioniert nur, wenn der Wert des Semaphors größer oder gleich dem absoluten wert von sem_op ist) == 0: Warten, bis Semaphore gleich 0 ist nsops: Die Anzahl der Operationen (Elemente) im Array Rückgabewert zeigt an, ob die Operation erfolgreich war 50

51 semop (2) P() und V()-Operationen ausführen P()-Operation: sem_op = -1 V()-Operation: sem_op = +1 In sem-numwird die Nummer der angesprochenen Semaphorvariable gesetzt (0 n-1) sem_flg in sops IPC_NOWAIT 0 Abbruch wenn der Semaphorwert kleiner als der absolute Wert von sem_opist (bei sem_op< 0) nicht gleich 0 ist (bei ==0) Wartet wenn der Semaphorwertkleiner als der absolute Wert von sem_opist (bei sem_op< 0) bis er größer oder gleich dem absolute Wert wird, oder der Semaphor gelöscht wird oder ein Signal eintrifft Wartet wenn der Semaphorwertnicht gleich 0 ist (bei ==0) bis er gleich 0 ist, oder der Semaphor gelöscht wird oder ein Signal eintrifft 51

52 semop(3) Wenn man bei Prozessen, die sich freiwillig oder unfreiwillig vorzeitig beenden, sicherstellen will, dass die gesetzten Semaphore wieder zurückgesetzt werden Setzen von SEM_UNDO in der sem_flg-komponente Wird SEM_UNDO gesetzt, dann merkt sich der Kern in einem sogenannten undo-zähler, wie viele Ressourcen durch diese spezielle Semaphorvariable belegt werden Beim Beenden des Prozesses setzt der Kern den entsprechenden Semaphor wieder zurück 52

53 Beispiel (Systemaufruf semop) #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> /* reset a semaphore: V-operation */ struct sembuf ops[1]; ops[0].sem_num = 0; ops[0].sem_flg = 0; ops[0].sem_op = +1; if( semop( semid, ops, 1 ) < 0 ) { perror("semop V() failed); exit(exit_failure); } 53

54 SHARED-MEMORY 54

55 Shared-Memory Abschnitt im Speicher, auf den beliebige Prozesse zugreifen können Vorteil: Schnellster IPC-Mechanismus Nachteil: Der Zugriff muss extern synchronisiert werden (z.b. durch Semaphore) Adressraum Prozess 1 Adressraum Prozess 2 Textsegment Datensegment Virtueller Adressbereich Shared- Memory- Segment Textsegment Datensegment Virtueller Adressbereich Stack Stack 55

56 Status, Limits und Benutzung Zu jedem Shared-Memory-Segment existiert eine shmid_ds- Struktur im Kern Limits SHMMAX Maximale Größe (in Bytes) eines Shared-Memory-Segments (typischer Wert: 0x ) SHMMIN Minimale Größe (in Bytes) eines Shared-Memory-Segments (typischer Wert: 1) SHMMNI Maximale Anzahl von Shared-Memory-Segmenten (typischer Wert: 4096) SHMSEG Maximale Anzahl von Shared-Memory-Segmenten (typischer Wert: 4096) 56

57 Benutzung Shared-Memory-Segment anfordern: shmget Ein Shared-Memory-Segment in den Adressraum eines Prozesses einbinden: shmat Schreiben in ein Shared-Memory-Segment: memcpy Abkoppeln eines angebundenen Shared-Memory-Segments: shmdt Optionen setzen, Informationen abfragen: shmctl 57

58 Systemaufruf shmget Syntax int shmget(key_t key, int size, int shmflag); Beschreibung key, shmflag: wie bisher size: minimale Größe Bei Erzeugung angeben Beim Öffnen eines existierenden Segments kann 0 angegeben werden Rückgabewert ID des Segments -1 (sonst) Beispiel #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> if(( shmid = shmget( 5L, 200, IPC_CREAT 0666 )) < 0 ) { perror("shmget failed"); exit(exit_failure); } 58

59 Systemaufruf shmat Syntax void *shmat(int shmid, const void *shmaddr, int shmflag ); Beschreibung shmid: ID des Segments shmaddr: Adresse an die das Segment angebunden wird NULL (empfehlenswert): Segment wird an die erste verfügbare Adresse angebunden shmflag: SHM_RDONLY: Segment wird nur zum Lesen angebunden, ansonsten Lesen und Schreiben erlaubt Rückgabewert ist ein Zeiger auf das Segment oder -1 Beispiel #include <sys/types.h> #include <sys/shm.h> if (( shm_p = shmat( shmid, (char *)0, 0 )) < (char *)0 ) { perror("shmat failed"); exit(exit_failure); } 59

60 Schreiben mit memcpy Syntax void * memcpy( void *dest, void *src, size_t n ); Funktionen Kopiert von einer Quelle (src) in eine Senke (dest) Liefert einen Zeiger auf den Anfang von dest Beispiel (Kopieren in ein Shared-Memory-Segment) #include <string.h> memcpy( shm_p, p_str, strlen(p_str) ); 60

61 Systemaufruf shmdt Syntax int shmdt( const void *shmaddr ); Beschreibung shmaddr: Adresse an die das Segment angebunden ist Rückgabewert zeigt an, ob die Operation erfolgreich war Beispiel #include <sys/shm.h> if (shmdt( shm_p ) < 0 ) { perror("shmdt failed"); } exit(exit_failure); 61

62 Systemaufruf shmctl Syntax int shmctl( int shmid, int cmd, struct shmid_ds *buf ); Beschreibung shmid: ID des Segments cmd: Festlegen der Aktion IPC_STAT: Status abfragen IPC_SET: Setzen des Eigentümers bzw. der Zugriffsrechte (Benutzung von buf) IPC_RMID: Löschen des Segments buf: Struktur mit entsprechenden Werte Rückgabewert zeigt an, ob die Operation erfolgreich war Beispiel #include <sys/ipc.h> #include <sys/shm.h> if( shmctl( shmid, IPC_RMID, 0) < 0 ) { perror("shmctl failed"); exit(exit_failure); } 62

63 Code-Fragmente (1) #define SHMSZ 27 char c; int shmid; key_t key; char *shm, *s; key = 5678; if ((shmid = shmget(key, SHMSZ, IPC_CREAT 0666)) < 0) { perror("shmget"); exit(exit_failure); } if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) { perror("shmat"); exit(exit_failure); } s = shm; for (c = 'a'; c <= 'z'; c++) *s++ = c; while (*shm!= '*') sleep(1); 63

64 Code-Fragmente (2) #define SHMSZ 27 int shmid; key_t key; char *shm, *s; key = 5678; if ((shmid = shmget(key, SHMSZ, 0666)) < 0) { perror("shmget"); exit(exit_failure); } if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) { perror("shmat"); exit(exit_failure); } for (s = shm; *s!= NULL; s++) putchar(*s); putchar('\n'); *shm = '*'; 64

65 Gängige Praxis Weiteres Beispiel Shared-Memory-Zugriffe mit Semaphorvariablen synchronisieren Umfangreicheres Beispiel (mit Semaphoren) 65

66 Shared Memory und fork/exec/exit Bei einem fork erbt der Kindprozess alle angebundenen Shared- Memory-Segmente Bei execwerden alle angebundenen Shared-Memory-Segmente getrennt (nicht zerstört!) Bei einem exit werden alle angebundenen Shared-Memory- Segmente getrennt (nicht zerstört!) Ein Shared-Memory-Segment wird erst dann gelöscht, wenn der letzte Prozess, der es benutzt, sich beendet oder die Anbindung aufhebt Nach einem Aufruf von shmdt führt ein Zugriff zu einem Fehler 66

67 ZUSAMMENFASSUNG UND AUSBLICK 67

68 Zusammenfassung In dieser Vorlesungseinheit wurden die klassischen Formen der Interprozesskommunikation besprochen Pipes FIFOs Message-Queues Semaphore Shared-Memory Daneben gibt es neuere Formen Stream Pipes und benannte Stream Pipes Erlauben zum Beispiel den Austausch von Filedeskriptoren 68

69 Pipes Client-Server-Eigenschaften klassischer IPC (1) Client-Prozess richtet 2 Pipes ein Mit fork und exec wird ein eigener Server-Prozess gestartet Kommunikation über Pipes FIFOS Server und Clients sind unabhängige Prozesse Für die Anforderungen der Clients reicht eine FIFO aus Diese ist allen Clients bekannt Jeder Client schickt bei seiner Anforderung seine Prozess-ID mit Für die Server-Antworten je Client muss eine eigene FIFO eingerichtet werden Eindeutiger Name durch Verwendung der Prozess-ID im FIFO-Namen Nur der entsprechende Client sollte aus der FIFO lesen Entsprechende Fehlerbehandlung notwendig 69

70 Client-Server-Eigenschaften klassischer IPC (2) Message-Queue Message-Typ wird verwendet, um den Empfänger der Nachricht festzulegen Alle Client-Anfragen haben den Typ 1 (Prozess-ID wird in der Anfrage mitgeschickt) und benutzen eine Message-Queue (Schlüssel bekannt) Bei den Server-Antworten wird dann die Prozess-ID als Message-Typ verwendet Client-spezifische Message-Queue Es existiert eine Message-Queue für alle Client-Anforderungen (über vereinbarten Schlüssel allen Clients bekannt) Jeder Client richtet seine private Message-Queue (IPC_PRIVATE) ein und schickt die Kennung bei seiner ersten Anfrage mit Shared-Memory und Semaphore Ähnlich wie Message-Queue Zusätzlich Semaphore oder auch Signale benutzen 70

71 Nachteile klassischer IPC Korrekte Identifizierung der Clients durch den Server ist nicht möglich Wenn der Client einen privilegierten Zugriff durch den Server verlangt, muss der Server unbedingt wissen, wer der Client ist Dazu benötigt man andere Methoden Z. B. Stream Pipes Stream Pipe arbeitet vollduplex Filedeskriptoren sind gleichzeitig zum Lesen und zum Schreiben geöffnet 71

72 Stream Pipes in SVR4 Unter SVR4 ist eine einfache Pipe eine Vollduplex-Pipe Unter SVR4 ist eine Pipe eine Verbindung zwischen STREAM- Köpfen Ein STREAM stellt eine Vollduplex-Verbindung zwischen einem Benutzerprozess und einem Gerätetreiber zur Verfügung Ein einfacher STREAM im Kern besteht aus einem STREAM-Kopf (Systemaufrufschnittstelle) und einem Gerätetreiber (oder Pseudogerätetreiber) Kommunikation in beide Richtungen Zwischen Kopf und Gerätetreiber können beliebig viele Steuermodule eingetragen werden Bei der Pipe werden einfach 2 STREAM-Köpfe verbunden 72

73 Stream Pipe in BSD/Linux Hier wird nicht das STREAM-Konzept benutzt Eine Stream Pipe kann mit Hilfe zweier UNIX Domain Sockets realisiert werden Sockets werden mit Hilfe des Dateisystems implementiert und sind vergleichbar mit Filedeskriptoren Über int-wert ansprechen Sind aber unterschiedlich (kann Adresse zugewiesen werden etc.) Sockets werden meist für die Kommunikation zwischen Rechnern in einem Netzwerk verwendet Sockets können aber auch für die IPC auf einem lokalen Rechner benutzt werden UNIX Domain Sockets: Sind spezielle Sockets für die Kommunikation auf einem lokalen Rechner Mehr dazu in der LV Rechnernetze (4. Semester) 73

Interprozesskommunikation

Interprozesskommunikation Interprozesskommunikation Radu Prodan Institut für Informatik, Universität Innsbruck Verteilte und Parallele Systeme http://dps.uibk.ac.at 19.04.2012 R. Prodan, Betriebssysteme, Sommersemester 2012 1 Prozesse

Mehr

Besprechung 6. Aufgabe (timed) Semaphore. Prozess 1 Prozess 2 0x Schlüssel=IPC_PRIVATE: Segment ist prozesslokal

Besprechung 6. Aufgabe (timed) Semaphore. Prozess 1 Prozess 2 0x Schlüssel=IPC_PRIVATE: Segment ist prozesslokal Überblick über die 9. Übung Überblick über die 9. Übung. Anlegen des Segments: shmget Besprechung 6. Aufgabe (timed)... /* Schlüssel */ int shmflg; /* Flags */ int shmid; /* ID des Speichersegments */

Mehr

J.1 Überblick. Prototyp. Besprechung 6. Aufgabe (timed) (die 5. Aufgabe wird erst in der nächsten Woche besprochen) select. Shared Memory.

J.1 Überblick. Prototyp. Besprechung 6. Aufgabe (timed) (die 5. Aufgabe wird erst in der nächsten Woche besprochen) select. Shared Memory. J 8. Übung J 8. Übung J. Überblick Besprechung 6. Aufgabe (timed) (die 5. Aufgabe wird erst in der nächsten Woche besprochen) Prototyp #include #include select Shared Memory Semaphore

Mehr

Ganze Arrays von Semaphoren können auf einmal angelegt werden. In einer Operation können mehrere Semaphore auf einmal modifiziert werden.

Ganze Arrays von Semaphoren können auf einmal angelegt werden. In einer Operation können mehrere Semaphore auf einmal modifiziert werden. Übungen zur Vorlesung Betriebssysteme I Studiengang Informatik SS 05 AG Betriebssysteme FB3 Kirsten Berkenkötter Allerlei Nützliches 1 Semaphore 1.1 Allgemein Semaphore sind unter System V IPC erweitert:

Mehr

Einführung in die Systemprogrammierung unter Linux

Einführung in die Systemprogrammierung unter Linux Einführung in die Systemprogrammierung unter Linux - 1 - Einführung in die Systemprogrammierung unter Linux Einführung in die Systemprogrammierung unter Linux - 2 - Inhalt 1. Übersicht über benötigte Systemfunktionen...

Mehr

2. Prozesssynchronisation

2. Prozesssynchronisation Tafelübung zu BSRvS1 2. Prozesssynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/

Mehr

Tafelübung zu BSRvS 1 2. Prozesssynchronisation

Tafelübung zu BSRvS 1 2. Prozesssynchronisation Tafelübung zu BSRvS 1 2. Prozesssynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN UNIX/Linux-Interprozesskommunikation 6. UNIX/Linux Shared Memory ( gemeinsame Speicherbereiche ) Wintersemester 2016/17 UNIX/Linux-IPC-Mechanismen Nachrichtenbasierter

Mehr

Systemnahe Programmierung in C/C++

Systemnahe Programmierung in C/C++ Systemnahe Programmierung in C/C++ Interprozesskommunikation (IPC) Knut Stolze stolze@informatik.uni-jena.de Lehrstuhl für Datenbanken und Informationssysteme Fakultät für Mathematik und Informatik 2006

Mehr

Speicherbasierte Kommunikation (T) Realisierung von Semaphoren (T) Shared Memory (P) Synchronisation mittels Semaphoren (P)

Speicherbasierte Kommunikation (T) Realisierung von Semaphoren (T) Shared Memory (P) Synchronisation mittels Semaphoren (P) Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom 26.11. Foliensatz 5 Speicherbasierte Kommunikation (T) Realisierung von Semaphoren (T) Shared Memory (P) Synchronisation mittels Semaphoren

Mehr

Lösung zur Praktikumsaufgabe 1

Lösung zur Praktikumsaufgabe 1 Lösung zur Praktikumsaufgabe 1 Thema: Semaphore 1. Das Programm in Listing 1 zeigt eine beispielhafte Implementierung. Listing 1: Lösung der Aufgabe 1 (5children-unsync.c) #include #include

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN UNIX/Linux-Interprozesskommunikation 7. UNIX/Linux Pipes Wintersemester 2016/17 UNIX/Linux-IPC-Mechanismen Nachrichtenbasierter Informationsaustausch: 5. 1.

Mehr

Einführung in die Systemprogrammierung unter Linux

Einführung in die Systemprogrammierung unter Linux Einführung in die Systemprogrammierung unter Linux Systemsoftware Praktikum Inhalt Übersicht über benötigte Systemfunktionen Programmieren unter Linux Grundlegendes Message-Queue Shared Memory Semaphore

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN UNIX/Linux-Interprozesskommunikation ( Nachrichtenwarteschlangen ) Wintersemester 201/17 Message Queues: Systemaufrufe msgget(...) legt neue Message Queue an

Mehr

Systemprogrammierung.: unter Linux :.

Systemprogrammierung.: unter Linux :. Systemprogrammierung.: unter Linux :. Einführung in Linux 1. Das Filesystem 2. Prozesse 3. Unix Tools 4. Die Shell 1. Das Filesystem 1.1 Dateien 1.2 Ordner 1.3 Links 1.1 Dateien Alles im Filesystem sind

Mehr

critical sections und Semaphore

critical sections und Semaphore Kapitel 4 critical sections und Semaphore Programme, die sich Resourcen teilen, müssen Codeabschnitte allein (exklusiv) ausführen, diese codeteile nennt man critical section. Um dies zu erreichen werden

Mehr

PROGRAMMIEREN MIT UNIX/Linux-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/Linux-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/Linux-SYSTEMAUFRUFEN UNIX/Linux-Interprozesskommunikation, zugehörige Systemaufrufe und Kommandos 7. UNIX/Linux-Shared Memory 8. (Benannte) Pipes UNIX/Linux-IPC-Mechanismen Nachrichtenbasierter

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 11. UNIX/Linux-Semaphore Wintersemester 2016/17 Semaphore * wurden 1965 von E.W. DIJKSTRA (NL) als BS-gestützter Mechanismus zur Realisierung von Koordinationsaufgaben

Mehr

Tafelübung zu BSRvS1. 3. Philosophen. Fortsetzung Grundlagen C-Programmierung

Tafelübung zu BSRvS1. 3. Philosophen.  Fortsetzung Grundlagen C-Programmierung Tafelübung zu BSRvS1 3. Philosophen Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/

Mehr

3. Philosophen. Tafelübung zu BSRvS1. Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

3. Philosophen. Tafelübung zu BSRvS1. Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund Tafelübung zu BSRvS1 3. Philosophen Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/

Mehr

U7 POSIX-Prozesse U7 POSIX-Prozesse

U7 POSIX-Prozesse U7 POSIX-Prozesse U7 POSIX-Prozesse U7 POSIX-Prozesse Prozesse POSIX-Prozess-Systemfunktionen Aufgabe 6 U7.1 U7-1 Prozesse: Überblick U7-1 Prozesse: Überblick Prozesse sind eine Ausführumgebung für Programme haben eine

Mehr

7.1 Gegenseitiger Ausschluss. 7.1 Gegenseitiger Ausschluss (3) 7.1 Gegenseitiger Ausschluss (3) 7.1 Gegenseitiger Ausschluss (2) Semaphor

7.1 Gegenseitiger Ausschluss. 7.1 Gegenseitiger Ausschluss (3) 7.1 Gegenseitiger Ausschluss (3) 7.1 Gegenseitiger Ausschluss (2) Semaphor 7.1 Gegenseitiger Ausschluss 7.1 Gegenseitiger Ausschluss (3) Semaphor eigentlich reicht ein Semaphor mit zwei Zuständen: binärer Semaphor void P( int *s ) { while( *s == 0 ); *s= 0; atomare Funktion Problem

Mehr

Systemnahe Programmierung in C Übungen Jürgen Kleinöder, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2011 U7.fm

Systemnahe Programmierung in C Übungen Jürgen Kleinöder, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2011 U7.fm U7 POSIX-Prozesse U7 POSIX-Prozesse Prozesse POSIX-Prozess-Systemfunktionen Aufgabe 7 U7.1 U7-1 Prozesse: Überblick U7-1 Prozesse: Überblick Prozesse sind eine Ausführumgebung für Programme haben eine

Mehr

Tafelübung zu BSRvS 1 3. Kreuzung

Tafelübung zu BSRvS 1 3. Kreuzung Tafelübung zu BSRvS 1 3. Kreuzung Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2009/bsrvs1/

Mehr

Systemsoftware Praktikum Hochschule Ravensburg-Weingarten

Systemsoftware Praktikum Hochschule Ravensburg-Weingarten Systemsoftware Praktikum Hochschule Ravensburg-Weingarten Erste Schritte Systemkontrolle Bibliotheken Quelltext und Doku Erste Schritte - Übersicht ssh-zugang Anjuta CVS make / gcc Erste Schritte ssh-zugang

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 9 I/O (2) Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät UNIX I/O UNIX I/O: ähnlich wie Standard-I/O, jedoch File-Deskriptoren

Mehr

Interprozesskommunikation IPC

Interprozesskommunikation IPC Interprozesskommunikation IPC Seminar Konzepte von Betriebsystem-Komponenten Denis Koslowski koslowski.d@web.de 04.07.2005-1 - Interprozesskommunikation Gliederung 1. Was ist IPC? 2. IPC: Datentransfer

Mehr

Betriebssysteme (BTS)

Betriebssysteme (BTS) 13.Vorlesung Betriebssysteme (BTS) Christian Baun cray@unix-ag.uni-kl.de Hochschule Mannheim Fakultät für Informatik Institut für Betriebssysteme 31.5.2007 Wiederholung vom letzten Mal Deadlocks und Verhungern

Mehr

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

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Eine Mini-Shell als Literate Program

Eine Mini-Shell als Literate Program Eine Mini-Shell als Literate Program Hans-Georg Eßer 16.10.2013 Inhaltsverzeichnis 1 Eine Mini-Shell 1 1.1 Einen Befehl parsen......................... 2 1.2 Was tun mit dem Kommando?...................

Mehr

Klausur Betriebssysteme I

Klausur Betriebssysteme I Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme I 18.3.2011 Bitte bearbeiten Sie die Aufgaben auf den Aufgabenblättern. Die Benutzung von Unterlagen oder Hilfsmitteln ist nicht erlaubt. Die Bearbeitungszeit

Mehr

Tafelübung zu BS 3. Die Bibliothek

Tafelübung zu BS 3. Die Bibliothek Tafelübung zu BS 3. Die Bibliothek Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2010/bs/

Mehr

Lab 13: Multi Processor Systems II

Lab 13: Multi Processor Systems II Lab 13: Multi Processor Systems II 1. Können Sie sich erklären warum die Summe nicht 200% ergibt? Warum entspricht die Auslastung nicht 100% pro Prozessor? 100% ist die gesamte Auslastung vom System alle

Mehr

Systemprogrammierung unter Linux eine Einführung S. 1

Systemprogrammierung unter Linux eine Einführung S. 1 Systemprogrammierung unter Linux eine Einführung S. 1 Inhaltsverzeichnis 1 Übersicht der Systemfunktionen ( system calls )...2 1.1 Grundliegende Systemcalls...2 Erfragen der PID des laufenden Prozesses...2

Mehr

Systemprogrammierung unter UNIX System V / Linux

Systemprogrammierung unter UNIX System V / Linux Studiengang Angewandte Informatik Systemprogrammierung unter UNIX System V / Linux Systemsoftware Praktikum Prof. Dr. S. Keller Ausgabe: 19.03.2004 Anzahl der Seiten: 27 Angewandte Informatik Praktikum

Mehr

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks Zusammenfassung für CS-Prüfung 3 Seite 1 CS-Zusammenfassung für Prüfung 3 vom 24. 6. 2002 Deadlock Im Beispiel gibt es 3 Deadlocks Unterschied zwischen Blockieren, Verklemmen und Verhungenrn= -> Band 1

Mehr

Übungen zu Systemprogrammierung 1 (SP1)

Übungen zu Systemprogrammierung 1 (SP1) Übungen zu Systemprogrammierung 1 (SP1) Ü7 Threads und Koordinierung Jens Schedel, Christoph Erhardt, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität

Mehr

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C für Elektrotechniker Kapitel 9: Dateisystem, Dateisystem E/A-Konzept in UNIX und C UNIX (und damit auch C) verwendet Datenströme (streams) als Konzept zur Verbindung von Programmen mit E/A-Geräten und

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

Mehr

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

Beispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden Dokument: gns_ipc_server.c, 1 - Seite 1 - - 1: 1 von 1 - Beispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden int main(int argc,

Mehr

Tafelübung zu BS 4. Dateioperationen

Tafelübung zu BS 4. Dateioperationen Tafelübung zu BS 4. Dateioperationen Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2013/bs/

Mehr

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014 Übungen zu Systemnahe Programmierung in C (SPiC) Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014 Inhalt Prozesse System-Schnittstelle Aufgabe 7 Einlesen von der Standard-Eingabe

Mehr

Vorlesung Betriebssysteme II

Vorlesung Betriebssysteme II 1 / 15 Vorlesung Betriebssysteme II Thema 3: IPC Robert Baumgartl 20. April 2015 2 / 15 Message Passing (Nachrichtenaustausch) Prinzip 2 grundlegende Operationen: send(), receive() notwendig, wenn kein

Mehr

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015 Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr

Lösung Übungszettel 6

Lösung Übungszettel 6 Lösungen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik SS 03 AG Betriebssysteme FB3 Kirsten Berkenkötter Lösung Übungszettel 6 1 Aufgabe 1: Parallel-Server 1.1 Client #include

Mehr

Lösung von Übungsblatt 10. (Kommunikation von Prozessen)

Lösung von Übungsblatt 10. (Kommunikation von Prozessen) Lösung von Übungsblatt 10 Aufgabe 1 (Kommunikation von Prozessen) 1. Was ist bei Interprozesskommunikation über gemeinsame Speichersegmente (Shared Memory) zu beachten? Die Prozesse müssen die Zugriffe

Mehr

d) Welche Aussage zum Thema Adressräume ist richtig?

d) Welche Aussage zum Thema Adressräume ist richtig? Aufgabe 1.1: Einfachauswahl-Fragen (18 Punkte) Bei den Multiple-Choice-Fragen in dieser Aufgabe ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene

Mehr

Klausur Betriebssysteme I

Klausur Betriebssysteme I Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme I 14.3.2008 Bitte bearbeiten Sie die Aufgaben auf den Aufgabenblättern. Die Benutzung von Unterlagen oder Hilfsmitteln ist nicht erlaubt. Die Bearbeitungszeit

Mehr

Übungen zu Systemprogrammierung 1 (SP1)

Übungen zu Systemprogrammierung 1 (SP1) Übungen zu Systemprogrammierung 1 (SP1) Ü5 Threads und Koordinierung Andreas Ziegler, Stefan Reif, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität

Mehr

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

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes PThreads Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message queues, pipes, shared memory

Mehr

G 5. Übung. G-1 Überblick. Besprechung 3. Aufgabe. Infos zur Aufgabe 5: fork, exec. Rechenzeiterfassung. Ü SoS I G.1

G 5. Übung. G-1 Überblick. Besprechung 3. Aufgabe. Infos zur Aufgabe 5: fork, exec. Rechenzeiterfassung. Ü SoS I G.1 G 5. Übung G 5. Übung G-1 Überblick Besprechung 3. Aufgabe Infos zur Aufgabe 5: fork, exec Rechenzeiterfassung G.1 G-2 Hinweise zur 5. Aufgabe G-2 Hinweise zur 5. Aufgabe Prozesse fork, exec exit wait

Mehr

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe U3 3. Übung U3 3. Übung U3-1 Fehlerbehandlung U3-1 Fehlerbehandlung Besprechung der 1. Aufgabe Fehlerbehandlung Infos zur Aufgabe 3: malloc-implementierung U3.1 Fehler können aus unterschiedlichsten Gründen

Mehr

8. Arbeiten mit Dateien

8. Arbeiten mit Dateien 8. Arbeiten mit Dateien www.c-programme.de Stefan Thiemert Kapitel 8 - Seite 1 von 6 8. 1. Allgemeines Bisher haben wir Daten, die wir in unseren Programmen erzeugt und verarbeitet haben, nur über den

Mehr

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard Systeme I: Betriebssysteme Kapitel 4 Prozesse Wolfram Burgard Version 18.11.2015 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung, unterschiedliche Arten von Betriebssystemen

Mehr

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

U23 - Shellcode. Twix Chaos Computer Club Cologne.  Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides Twix e.v. http://koeln.ccc.de 2016-11-28 Überblick 1 Motivation Was ist Shellcode? Beispiel 2 Einstieg Erzeugen, Testen von Shellcode 3 Der erste Shellcode Strings in Shellcode 4 Nullbytes, NOP Slides

Mehr

4. Interprozeßkommunikation in UNIX

4. Interprozeßkommunikation in UNIX 4. Interprozeßkommunikation in UNIX Kommunikation zwischen Unix-Prozessen (System V IPC) Pipes System V IPC Werkzeuge 1. Semaphore 2. Shared Memory 3. Message-Queues Gemeinsame Eigenschaften der System

Mehr

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

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

4.5 Prozess-Kommunikation/Synchronisation

4.5 Prozess-Kommunikation/Synchronisation ÜBERBLICK Lock-Files Pipes FIFOS File- und Record-Locking Message-Queues Semaphore Shared Memory Memory-Mapping Unix-Domain-Sockets Internet-Domain-Sockets TLIs RPCs H. Weber, HS RM SS 2010 Systemprogrammierung

Mehr

6. Nebenläufigkeit: wechselseitiger Ausschluss und Synchronisation

6. Nebenläufigkeit: wechselseitiger Ausschluss und Synchronisation 6. Nebenläufigkeit: wechselseitiger Ausschluss und Synchronisation 6.1 Problemdarstellung Relative Ausführungsgeschwindigkeit von Prozessen nicht vorhersagbar Sie ist abhängig von o Aktivitäten anderer

Mehr

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

Beispiel 3. Shared Memory und Explizite Synchronisation. Daniel Prokesch. 27. April 2015. Überblick. Shared Memory. Semaphore. Ressourcenverwaltung 3 e 3 und Explizite Synchronisation Daniel Prokesch Institut für Technische Informatik Technische Universität Wien 27. April 2015 1 2 3 e Bisher betrachtet... Implizite Synchronisation Blockierende Lese-

Mehr

7.4 Kommunikation. großzügige Pufferung, sowohl Auftragsbeziehungen als auch Nachrichten- oder Byte-Ströme, sowohl lokal als auch übers Netz

7.4 Kommunikation. großzügige Pufferung, sowohl Auftragsbeziehungen als auch Nachrichten- oder Byte-Ströme, sowohl lokal als auch übers Netz 7.4 Kommunikation Kommunikation zwischen Benutzerprozessen (IPK) stellt andere Anforderungen als auftragsorientierte Kommunikation in mikrokernbasierten Betriebssystemen, vor allem großzügige Pufferung,

Mehr

U5 Verzeichnisse und Sortieren

U5 Verzeichnisse und Sortieren U5 Verzeichnisse und Sortieren U5 Verzeichnisse und Sortieren Linux-Benutzerumgebung Fehlerbehandlung POSIX-Verzeichnis-Systemschnittstelle Datei-Attribute in Inodes U5.1 Verzeichnisse öffnen: opendir(3)

Mehr

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung. Dateioperationen Seite 1 von 12 Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung. z.b.: c:\testdateien\text.dat //Datendatei

Mehr

Kommunikationsmuster (T) Interprozesskommunikation (T) Kommunikation über Pipes (P) Parserspezifikation und -generierung (P)

Kommunikationsmuster (T) Interprozesskommunikation (T) Kommunikation über Pipes (P) Parserspezifikation und -generierung (P) Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom 19.11. Foliensatz 4 Kommunikationsmuster (T) Interprozesskommunikation (T) Kommunikation über Pipes (P) Parserspezifikation und -generierung

Mehr

Betriebssysteme Teil 11: Interprozess-Kommunikation

Betriebssysteme Teil 11: Interprozess-Kommunikation Betriebssysteme Teil 11: Interprozess-Kommunikation 19.12.15 1 Übersicht Grundbegriffe Shared Memory Pipelines Messages Ports Sockets 2 Grundbegriffe Interprocess-Kommunikation = Austausch von Daten über

Mehr

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012 Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)

Mehr

5.4 Segmentierung. Einfachstes Beispiel: 1 Code-Segment + 1 Datensegment. 0 codelength 0 datalength. bs-5.4 1

5.4 Segmentierung. Einfachstes Beispiel: 1 Code-Segment + 1 Datensegment. 0 codelength 0 datalength. bs-5.4 1 5.4 Segmentierung Adressraum besteht aus mehreren Segmenten (segments), die unabhängig voneinander manipulierbar sind. Segmentierungsstruktur ist festgelegt durch die Hardware den Adressumsetzer. Einfachstes

Mehr

Tafelübung zu BS 1. Prozesse, Shell

Tafelübung zu BS 1. Prozesse, Shell Tafelübung zu BS 1. Prozesse, Shell Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2012/bs/

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Kommunikation von Prozessen: Signale und Pipes

Kommunikation von Prozessen: Signale und Pipes Netzwerk-Programmierung Kommunikation von Prozessen: Signale und Pipes Alexander Sczyrba Michael Beckstette {asczyrba,mbeckste}@techfak.uni-bielefeld.de Kommunikation von Prozessen Parent- und Child-Prozess

Mehr

Tafelübung zu BS 5. Dateioperationen

Tafelübung zu BS 5. Dateioperationen Tafelübung zu BS 5. Dateioperationen Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2014/bs/

Mehr

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester Seminar: Multicore Programmierung Sommersemester 2009 16.07.2009 Inhaltsverzeichnis 1 Speichermodell 2 3 Implementierungsvielfalt Prioritätsinversion 4 Threads Speichermodell Was sind Threads innerhalb

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 2. UNIX/Linux-Prozessverwaltung und zugehörige Systemaufrufe Wintersemester 2016/17 2. Die UNIX/LINUX-Prozessverwaltung Aufgaben: 1. Erzeugen neuer Prozesse

Mehr

Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien

Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien Informatik I SS 2003 Dateioperationen 1 Textdateien, Öffnen Abspeichern und Einlesen von Texten (Strings) in Dateien 1. Das Öffnen einer Datei a) Deklaration eines Zeigers auf eine Datei FILE *pfile; b)

Mehr

Institut für Informatik der Ludwig-Maximilians-Universität München Systempraktikum Wintersemester 2009/2010 Prof. Dr. Dieter Kranzlmüller Dr. Thomas S

Institut für Informatik der Ludwig-Maximilians-Universität München Systempraktikum Wintersemester 2009/2010 Prof. Dr. Dieter Kranzlmüller Dr. Thomas S Institut für Informatik der Ludwig-Maximilians-Universität München Systempraktikum Wintersemester 2009/2010 Prof. Dr. Dieter Kranzlmüller Dr. Thomas Schaaf, Dr. Nils gentschen Felde Blatt 3 Grundlagen

Mehr

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN Teil 13: UNIX/LINUX: ZUM ABSCHLUSS Bemerkungen zum Abschluss Wir haben in unserer Veranstaltung absolut bei weitem nicht alle Themen im Zusammenhang mit Unix

Mehr

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger Netzwerk - Programmierung Threads Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Jan Krüger jkrueger@cebitec.uni-bielefeld.de Übersicht Probleme mit fork Threads Perl threads API Shared Data Mutexes

Mehr

Übungsbesprechung Blatt 3 Vorlesung Betriebssysteme I (WS 2018/19) Operating Systems And Middleware Group

Übungsbesprechung Blatt 3 Vorlesung Betriebssysteme I (WS 2018/19) Operating Systems And Middleware Group Übungsbesprechung Blatt 3 Vorlesung Betriebssysteme I (WS 2018/19) Operating Systems And Middleware Group 0. Zur Aufgabe 4 Was macht eine Shell? date wc Chart 2 Prozesserzeugung Chart 3 1. Prozesserzeugung

Mehr

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen

Mehr

Übungen zu Systemprogrammierung 1

Übungen zu Systemprogrammierung 1 Übungen zu Systemprogrammierung 1 Ü5 Threads und Koordinierung Sommersemester 2018 Christian Eichler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl

Mehr

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Organisatorisches. Übungsleiter: Karsten Otto Homepage:  Aufgaben Organisatorisches Übungsleiter: Karsten Otto (otto@inf.fu-berlin.de) Homepage: http://www.inf.fu-berlin.de/lehre/ss04/sysi/ Aufgaben Montags im Netz Vorbesprechung Dienstag/Mittwoch in den Übungen Abgabe

Mehr

Beispiel / Übung: Prof. Dr. A. Christidis WS 2012/13

Beispiel / Übung: Prof. Dr. A. Christidis WS 2012/13 Beispiel / Übung: Erstellen Sie ein kurzes, plattform-unabhängiges C-Programm ( Konsolenanwendung ), das sich in die Reihe bereits gestarteter Kopien einordnet, sich nach 20 sec (Rechenzeit) abmeldet und

Mehr

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

C-Kurs 2010 Pointer. 16. September v2.7.3 C-Kurs 2010 Pointer Sebastian@Pipping.org 16. September 2010 v2.7.3 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. C-Kurs Mi Konzepte, Syntax,... printf, scanf Next

Mehr

Tafelübung zu BS 1. Prozesse, ToothBrush

Tafelübung zu BS 1. Prozesse, ToothBrush Tafelübung zu BS 1. Prozesse, ToothBrush Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/

Mehr

10. Foliensatz Betriebssysteme

10. Foliensatz Betriebssysteme Prof. Dr. Christian Baun 10. Foliensatz Betriebssysteme Frankfurt University of Applied Sciences SS2016 1/62 10. Foliensatz Betriebssysteme Prof. Dr. Christian Baun Frankfurt University of Applied Sciences

Mehr

Threads Einführung. Zustände von Threads

Threads Einführung. Zustände von Threads Threads Einführung Parallelität : Zerlegung von Problemstellungen in Teilaufgaben, die parallelel ausgeführt werden können (einfachere Strukturen, eventuell schneller, Voraussetzung für Mehrprozessorarchitekturen)

Mehr

Klausur Systemprogrammierung I Februar Klausur Systemprogrammierung I Februar 2001

Klausur Systemprogrammierung I Februar Klausur Systemprogrammierung I Februar 2001 Aufgabe 1: (20 Punkte) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort anzukreuzen. Falsche Beantwortung führt bei der einzelnen Frage zu Null Punkten. Lesen Sie die Frage genau, bevor

Mehr

Betriebssysteme. Kommunikation von Prozessen und Threads. Sommersemester Prof. Dr. Peter Mandl. Seite 1. Prof. Dr. Peter Mandl.

Betriebssysteme. Kommunikation von Prozessen und Threads. Sommersemester Prof. Dr. Peter Mandl. Seite 1. Prof. Dr. Peter Mandl. Kommunikation von Prozessen und Threads Sommersemester 2014 Seite 1 Gesamtüberblick 1. Einführung in 2. Betriebssystemarchitekturen und Betriebsarten 3. Interruptverarbeitung in n 4. Prozesse und Threads

Mehr

Tafelübung zu BSRvS 1 1. Prozesse, at

Tafelübung zu BSRvS 1 1. Prozesse, at Tafelübung zu BSRvS 1 1. Prozesse, at Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os http://ess.cs.tu-dortmund.de/de/teaching/ss2009/bsrvs1/

Mehr

Kommunikation von Prozessen und Threads

Kommunikation von Prozessen und Threads Kommunikation von Prozessen und Threads Sommersemester 2015 Prof. Dr. Peter Mandl Prof. Dr. Peter Mandl Seite 1 Gesamtüberblick 1. Einführung in Computersysteme 2. Entwicklung von Betriebssystemen 3. Architekturansätze

Mehr

E-/A-Funktionalität nicht Teil der Programmiersprache

E-/A-Funktionalität nicht Teil der Programmiersprache C Ein-/Ausgabe C Ein-/Ausgabe C.1 Überblick E-/A-Funktionalität nicht Teil der Programmiersprache Realisisierung durch "normale" Funktionen Bestandteil der Standard-Funktionsbibliothek einfache Programmierschnittstelle

Mehr

Homogene Multi-Core-Prozessor-Architekturen

Homogene Multi-Core-Prozessor-Architekturen Homogene Multi-Core-Prozessor-Architekturen Praktikum Parallele Rechnerarchitekturen Stefan Potyra Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2009

Mehr

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

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i

Mehr

Tafelübung zu BS 1. Prozesse, Shell

Tafelübung zu BS 1. Prozesse, Shell Tafelübung zu BS 1. Prozesse, Shell Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2012/bs/

Mehr