4. Interprozeßkommunikation in UNIX

Größe: px
Ab Seite anzeigen:

Download "4. Interprozeßkommunikation in UNIX"

Transkript

1 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 V IPC Werkzeuge Globale, persistente Ressourcen Eigene Datenstrukturen im Kernel Externer, eindeutiger IPC-ID Programmierer ist verantwortlich für die Identifizierung Hilfsbefehle ipcs(8) (provide information on ipc facilities) ipcrm(8) mit ipcrm <msg sem shm> <IPC ID> (will remove the resource speccified by id). Key-Erzeugung: manuell oder via ftok. Bsp. key_t mykey // key_t: Key type mykey = (ftok(".", 1 )) //Pfadname, Projektname Betriebssysteme Harald Kosch Seite 70

2 Semaphore in Linux Eine Semaphor-Datenstruktur speichert immer ein ganzes Semaphor-Array, Warteschlangen und Zeitstempel Ein Semaphor-Array ist definiert als: struct semid_ds struct ipc_perm sem_perm; time_t sem_otime; /*last semop time*/ time_t sem_ctime; /*change time*/ struct wait_queue *eventn; /*Proz. wartend auf V*/ struct wait_queue *eventz; /*Proz. w. auf semval=0*/ struct sem_undo *undo; /*undo entries */ ushort sem_nsems; /*#Semaphore im array */ 100% Ressourcenausnutzung: Wenn alle Wach-Semaphore auf 0 stehen. Entspricht Ereignis eventz im Semaphor Array. Ein Semaphor ist definiert als: struct sem { short sempid; /*pid der letzten Operation*/ ushort semval; /*Semaphorwert*/ ushort semncnt; /*#Proz. wartend auf V*/ ushort semzcnt; /*#Proz. wartend auf semval=0*/ Semaphoroperationen sind definiert als: Betriebssysteme Harald Kosch Seite 71

3 struct sembuf { ushort sem_num; /*Semaphorindex im Array*/ short sem_op ; /* #0: Wert addiert */ /* =0: warte auf semval=0 */ short sem_flg; /*op. Flaggen*/ Bsp.: struct sembuf P_in_mutex = {semid, -1, 0; struct sembuf V_in_mutex = {semid, 1, 0; Operationen (nicht alle) - int semop(int semid, struct sembuf *sops, unsigned nsops) /*Operation auf Sempahore*/ Bsp. if (semop(semid, &P_in_mutex, 1) == -1)... - int semget(key_t key, int nsems, int semflg); - int semctl (int semid, int semnum, int cmd, union semnum arg); Bsp. int createsemaphores(int *sid, int members, key_t k) { union semun sems; /*int val für Op. SETVAL*/ if( (*sid = semget(k, members, IPC_CREAT IPC_EXCL 0660))==-1){return -1; Betriebssysteme Harald Kosch Seite 72

4 sems.val = 1; /*initial value Mutex-Semaphore*/ semctl(*sid, Mutex1, SETVAL, sems); /*mutex*/ semctl(*sid, Mutex2, SETVAL, sems); /*mutex*/ sems.val = 0; /*Anfangswert für gefüllte slots*/ semctl(*sid, NUM_CARDS_SEMAPHORE, SETVAL, sems); semctl(*sid, NUM_LINES_SEMAPHORE, SETVAL, sems); sems.val = MAXELEMENTS; /*initial empty slots*/ semctl(*sid, FREE_CARDS_SEMAPHORE, SETVAL, sems); semctl(*sid, FREE_LINES_SEMAPHORE, SETVAL, sems); return 0; Betriebssysteme Harald Kosch Seite 73

5 #include <unistd.h> #include <sys/ipc.h> #include <sys/sem.h> int semaphore_id; Mutex Semaphore struct sembuf P_mutex = {0,-1,1; struct sembuf V_mutex = {0,1,1; union semun sems; /*= int val bei SETVAL*/ void process() { int i; for(;;) { semop(semaphore_id, &P_mutex, 1); /* Entry protocol */ /* Do something critical */ printf("process_id = %d\n", getpid()); semop(semaphore_id, &V_mutex, 1); /* Exit protocol */ /* Do any noncritical here */ i = sleep(1); void main() { key_t key = ftok(".", 1 ); int members = 1; int i; semaphore_id = semget(key, members, IPC_CREAT 0666); sems.val = 1; semctl(semaphore_id, 0, SETVAL, sems); /* Create 2 child processes */ for( i = 0; i < 2; i++) { if(fork() == 0) process(); Betriebssysteme Harald Kosch Seite 74

6 Endlicher Puffer mit Semaphoren und Shared Memory /* init: Initialize the semaphore-array and the two shared memory areas */ #include <stdio.h> #include "utils.h" void main() { int semid; /* ID of the semaphore-array, not used */ int smemid; /* ID of the shared memory, not used */ if(createsemaphores(&semid, NUMSEMAPHORES, KEY) == -1) exit(-1); if(createsharedmem(&smemid, SIZE, KEY) == -1) exit(-1); if(createsharedmem(&smemid, SIZE, KEY2) == -1) exit(-1); printf("init successful\n"); /* exit: Kill all connected processes and remove the semaphore-array and the shared memory */ #include <stdlib.h> #include "utils.h" void main() { int semid; int smemid; union semun sems; system("killall reader"); system("killall executer"); system("killall printer"); sems.val = 1; attachsemaphores(&semid, NUMSEMAPHORES, KEY); semctl(semid, 0, IPC_RMID, sems); smemid = shmget(key, 0, IPC_CREAT); shmctl(smemid, IPC_RMID, 0); smemid = shmget(key2, 0, IPC_CREAT); shmctl(smemid, IPC_RMID, 0); Betriebssysteme Harald Kosch Seite 75

7 /* reader-process: Read junk from stdin and place it in the shared buffer */ #include <stdio.h> #include "utils.h" int main() { int semaphore_id; /* ID of the semaphore-array */ char *memptr; /* The shared buffer: write */ char *ptr; int num_card; /* Position of a segment in the shared memory */ char string[segsize]; union semun sems; if(attachsemaphores(&semaphore_id, NUMSEMAPHORES, KEY) == -1) exit(-1); /*Verbindung zu Semaphor-Array*/ if( (memptr = attachsharedmem(key)) == NULL) exit(-1); /*Verbindung zu Read-Buffer*/ sems.val = 1; for(;;) { printf(": "); gets(string); /* Read keyboard */ semop(semaphore_id, &P_free_cards, 1); semop(semaphore_id, &P_in_mutex, 1); /* Write the string into the shared memory */ num_card = MAXELEMENTS \ semctl(semaphore_id, FREE_CARDS_SEMAPHORE, GETVAL, sems); ptr = memptr + num_card * SEGSIZE; strcpy(ptr, string); semop(semaphore_id, &V_in_mutex, 1); semop(semaphore_id, &V_num_cards, 1); /* executer-process: Read "strings" from the shared buffer, reverse them and place the result in the 2nd shared buffer */ #include <stdio.h> #include <string.h> #include "utils.h" int main() { int semaphore_id; /* ID of the semaphore-array */ char *memptr_in; /* The first shared buffer: read*/ Betriebssysteme Harald Kosch Seite 76

8 char *memptr_out; /* The second shared buffer: write */ char *ptr; char *rsptr; int num_card; /* Number of the segment for reading */ int num_line; /* Number of the segment for writing */ char string[segsize]; char reverse_string[segsize]; union semun sems; if(attachsemaphores(&semaphore_id, NUMSEMAPHORES, KEY) == -1) exit(-1); if( (memptr_in = attachsharedmem(key)) == NULL) exit(-1); if( (memptr_out = attachsharedmem(key2)) == NULL) exit(-1); sems.val = 1; for(;;) { semop(semaphore_id, &P_num_cards, 1); semop(semaphore_id, &P_in_mutex, 1); /* Read a segment from the first shared buffer */ num_card = semctl(semaphore_id, NUM_CARDS_SEMAPHORE, GETVAL, sems); ptr = memptr_in + num_card * SEGSIZE; strcpy(string, ptr); strcpy(ptr, "X"); semop(semaphore_id, &V_in_mutex, 1); semop(semaphore_id, &V_free_cards, 1); /* Reverse the string */ ptr = string + strlen(string) - 1; rsptr = reverse_string; while(ptr >= string) { *rsptr++ = *ptr--; *rsptr = \0 ; semop(semaphore_id, &P_free_lines, 1); semop(semaphore_id, &P_out_mutex, 1); /* Write the reversed string into a segment of the second shared memory */ num_line = MAXELEMENTS \ semctl(semaphore_id, FREE_LINES_SEMAPHORE, GETVAL, sems); ptr = memptr_out + num_line * SEGSIZE; strcpy(ptr, reverse_string); semop(semaphore_id, &V_out_mutex, 1); semop(semaphore_id, &V_num_lines, 1); Betriebssysteme Harald Kosch Seite 77

9 /* printer-process: Read a "string from the shared buffer an print it to stdout */ #include <stdio.h> #include "utils.h" int main() { int semaphore_id; /* ID of the semaphore-array */ char *memptr; /* The shared buffer: read */ char *ptr; int num_line; /* The number of a segment in the shared buffer */ char string[segsize]; union semun sems; if(attachsemaphores(&semaphore_id, NUMSEMAPHORES, KEY) == -1) exit(-1); if( (memptr = attachsharedmem(key2)) == NULL) exit(-1); sems.val = 1; for(;;) { semop(semaphore_id, &P_num_lines, 1); semop(semaphore_id, &P_out_mutex, 1); /* Read a segment from the shared memory */ num_line = semctl(semaphore_id, NUM_LINES_SEMAPHORE, GETVAL, sems); ptr = memptr + num_line * SEGSIZE; strcpy(string, ptr); strcpy(ptr, "X"); semop(semaphore_id, &V_out_mutex, 1); semop(semaphore_id, &V_free_lines, 1); /* Print */ printf("> %s\n", string); /* utils.h */ #include <sys/ipc.h> #include <sys/sem.h> #include <sys/shm.h> #define NUMSEMAPHORES 6 /* 6 semaphores, 2 for mutual exclusion, the rest as counters*/ #define SEGSIZE 80 Betriebssysteme Harald Kosch Seite 78

10 #define MAXELEMENTS 10 #define SIZE (MAXELEMENTS * SEGSIZE) #define KEY (ftok(".", 1 )) #define KEY2 (ftok(".", 2 )) #define Mutex1 0 #define Mutex2 3 #define FREE_CARDS_SEMAPHORE 1 #define NUM_CARDS_SEMAPHORE 2 #define NUM_LINES_SEMAPHORE 4 #define FREE_LINES_SEMAPHORE 5 extern struct sembuf P_in_mutex; extern struct sembuf V_in_mutex; extern struct sembuf P_out_mutex; extern struct sembuf V_out_mutex; extern struct sembuf P_free_cards; extern struct sembuf V_free_cards; extern struct sembuf P_num_cards; extern struct sembuf V_num_cards; extern struct sembuf P_num_lines; extern struct sembuf V_num_lines; extern struct sembuf P_free_lines; extern struct sembuf V_free_lines; int createsemaphores(int *sid, int members, key_t k); int attachsemaphores(int *sid, int members, key_t k); int createsharedmem(int *smemid, int size, key_t k); char *attachsharedmem(key_t k); /* utils.c */ #include "utils.h" #include <stdio.h> struct sembuf P_in_mutex = {Mutex1, -1, 0; struct sembuf V_in_mutex = {Mutex1, 1, 0; struct sembuf P_out_mutex = {Mutex2, -1, 0; struct sembuf V_out_mutex = {Mutex2, 1, 0; struct sembuf P_num_cards = {NUM_CARDS_SEMAPHORE, -1, 0; struct sembuf V_num_cards = {NUM_CARDS_SEMAPHORE, 1, 0; struct sembuf P_free_cards = {FREE_CARDS_SEMAPHORE, -1, 0; struct sembuf V_free_cards = {FREE_CARDS_SEMAPHORE, 1, 0; struct sembuf P_num_lines = {NUM_LINES_SEMAPHORE, -1, 0; struct sembuf V_num_lines = {NUM_LINES_SEMAPHORE, 1, 0; struct sembuf P_free_lines = {FREE_LINES_SEMAPHORE, -1, 0; Betriebssysteme Harald Kosch Seite 79

11 struct sembuf V_free_lines = {FREE_LINES_SEMAPHORE, 1, 0; int createsemaphores(int *sid, int members, key_t k) { union semun sems; if( (*sid = semget(k, members, IPC_CREAT IPC_EXCL 0666)) == -1) { return -1; sems.val = 1; semctl(*sid, Mutex1, SETVAL, sems); /* Used for mutual exclusion */ semctl(*sid, Mutex2, SETVAL, sems); sems.val = 0; semctl(*sid, NUM_CARDS_SEMAPHORE, SETVAL, sems); semctl(*sid, NUM_LINES_SEMAPHORE, SETVAL, sems); sems.val = MAXELEMENTS; semctl(*sid, FREE_CARDS_SEMAPHORE, SETVAL, sems); semctl(*sid, FREE_LINES_SEMAPHORE, SETVAL, sems); return 0; int attachsemaphores(int *sid, int members, key_t k) { if( (*sid = semget(k, members, 0)) == -1) { perror("semget failed\n"); return -1; return 0; int createsharedmem(int *smemid, int size, key_t k) { if( (*smemid = shmget(k, size, IPC_CREAT IPC_EXCL 0666)) == -1) { perror("shmget failed\n"); return -1; return 0; char *attachsharedmem(key_t k) { int sharedmem_id; if( (sharedmem_id = shmget(k, SIZE, 0)) == -1) { perror("shmget failed\n"); return NULL; return (shmat(sharedmem_id, 0,0)); /*map memory*/ Betriebssysteme Harald Kosch Seite 80

12 #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/sem.h> #define NUMBER_PHILOSOPHERS 5 int fork_id, room_id; struct sembuf P_ROOM = {0, -1, 1; struct sembuf V_ROOM = {0, 1, 1; union semun value; Speisende Philosophen void philosopher(int i) { struct sembuf P_FORK = {i, -1, 1; struct sembuf P_FORKLEFT = {(i+1) % NUMBER_PHILOSOPHERS, -1,1; struct sembuf V_FORK = {i, 1, 1; struct sembuf V_FORKLEFT = {(i+1) % NUMBER_PHILOSOPHERS, 1, 1; for(;;) { sleep(rand() / (RAND_MAX / 5)); /* Think :-) */ semop(room_id, &P_ROOM, 1); semop(fork_id, &P_FORK, 1); semop(fork_id, &P_FORKLEFT, 1); printf("philosopher %d is eating\n", i); semop(fork_id, &V_FORK, 1); semop(fork_id, &V_FORKLEFT, 1); semop(room_id, &V_ROOM, 1); printf("philosopher %d is thinking\n", i); void main() { int i; /* Create 5 binary semaphores for the forks */ fork_id = semget((ftok(".", 1 )), NUMBER_PHILOSOPHERS, IPC_CREAT 0666); /* Create a semaphore to count the number of philosophers in the room */ room_id = semget((ftok(".", 2 )), 1, IPC_CREAT 0666); value.val = NUMBER_PHILOSOPHERS - 1; semctl(room_id, 0, SETVAL, value); value.val = 1; for(i = 0; i < NUMBER_PHILOSOPHERS; i++) { semctl(fork_id, i, SETVAL, value); if( fork() == 0) philosopher(i); Betriebssysteme Harald Kosch Seite 81

13 Kooperation durch Message Passing Prozesse kommunizieren via Kanäle (kein gemeinsamer Speicher) Kanäle können Byteströme sequentiell übertragen Grundoperationen: send, receive send(destination, message) receive(source,message) Das Senden und Empfangen über Kanäle ist sehr ähnlich zum Schreiben und Lesen auf Dateien Synchronisierung: Send: blockierend, nicht blockierend. Receive: blockierend, nicht blockierend, Eingangstest. Rendez-vous heißt eine Ereignis wenn sowohl der Sende als auch Empfangsprozeß blockierend ist. Unix Pipes: Temporäre Spezialfiles, die Prozesse verbinden, nur in eine Richtung verwendbar. ls sort more ls : ls->sort->more Vater Prozess Kernel Kind Prozess Figure 13: Verbindung von Prozessen durch Pipes Betriebssysteme Harald Kosch Seite 82

14 Alternative Begriffe für Kanal: mailbox (n:m) (System V IPC) port (n:1) (BSD sockets) link (1:1) (UNIX Pipes) Figure 14: Aus: Stallings, Operating Systems Betriebssysteme Harald Kosch Seite 83

15 Message Passing in UNIX via Pipes #include <sys/types.h> #include <sys/wait.h> #include <syscall.h> #include <stdio.h> #include <unistd.h> #define MSGSIZE 16 char *msg1 = "Hello world #1"; char *msg2 = "Hello world #2"; char *msg3 = "hello world #3"; void main() { char inbuf[msgsize]; int p[2], j; pid_t pid; /*p wird als pipe eröffnet*/ if(-1 == pipe(p)) { perror("pipe call"); exit(-1); if(-1 == (pid = fork())) { perror("fork call"); exit(-1); if(0 == pid) { /*Kind liest vom Vater*/ for(j = 0; j < 3; j++) { read(p[0], inbuf, MSGSIZE); /*p[0]: Inputkanal*/ printf("%s\n", inbuf); else { /*Vater sendet dem Kind*/ write(p[1], msg1, MSGSIZE); /*p[1]: Outputkanal*/ write(p[1], msg2, MSGSIZE); write(p[1], msg3, MSGSIZE); wait( (int *) 0); exit(0); Betriebssysteme Harald Kosch Seite 84

16 Halfduplex Pipes #include <sys/types.h> #include <sys/wait.h> #include <syscall.h> #include <stdio.h> #include <unistd.h> #define MSGSIZE 16 char *msg1 = "Hello world #1"; char *msg2 = "Hello world #2"; char *msg3 = "hello world #3"; void main() { char inbuf[msgsize]; int p[2], j; pid_t pid; if(-1 == pipe(p)) { perror("pipe call"); exit(-1); if(-1 == (pid = fork())) { perror("fork call"); exit(-1); if(0 == pid) { /* child: close write descriptor and read from pipe */ close(p[1]); for(j = 0; j < 3; j++) { read(p[0], inbuf, MSGSIZE); printf("%s\n", inbuf); else { /* parent: close read descriptor and write down pipe */ close(p[0]); write(p[1], msg1, MSGSIZE); write(p[1], msg2, MSGSIZE); write(p[1], msg3, MSGSIZE); wait( (int *) 0); exit(0); Betriebssysteme Harald Kosch Seite 85

17 Signale Signalisieren Ereignisse für einen Prozeß Kein sicherer Mechanismus (in 4.2BSD und SVR4 besser) Signale können bei einem Ereignis (z.b. Division durch 0) generiert werden (kill) Ursprünglicher Zweck: Terminierung (wie der Name zeigt) Ziemlich Unix-Verisonsabhängig (trotz POSIX) Ähnlich zu exceptions Signale können durch signal handlers aufgefangen und behandelt werden Für Signale ohne Benutzer-Handler gibt es eine default Aktion in Bezug auf den betroffenen Prozeß abort terminiert + core dump exit terminiert ohne core dump ignore schluckt das Signal stop blockiert den Prozess (suspend) continue fährt blockierten Prozess fort Signal handlers (gewöhnliche Prozeduren) müssen als solche registriert werden (signal) Beim Auftreten des Signals wird die normale Ausführung der Befehlssequenz unterbrochen, und der Handler wird asynchron aufgerufen Betriebssysteme Harald Kosch Seite 86

18 Beispiel für Signale #include <signal.h> /* static void sig_handler(int); */ static void sig_handler(int signo) { switch(signo) { case SIGUSR1: /*Incoming SIGUSR1 signal*/ printf("parent: Received %d\n",sigusr1); break; case SIGUSR2: /*Incoming SIGUSR2 signal*/ printf("child: Received %d\n", SIGUSR2); break; default: break; /*Should never get this case*/ main(void) { int i, parent_pid, child_pid, status; if (signal(sigusr1, sig_handler)!= SIG_ERR) printf("parent: Handler created for %d\n", SIGUSR1); if (signal(sigusr2, sig_handler)!= SIG_ERR) printf("parent: Handler created for %d\n", SIGUSR2); parent_pid = getpid(); if ((child_pid = fork()) == 0) { kill(parent_pid, SIGUSR1); /*Child raising SIGUSR1*/ for (;;) pause(); /*Child busy waiting for a signal*/ else { kill(child_pid, SIGUSR2); /* Parent raising SIGUSR2 */ pause(2); /*Race condition: not to kill child too soon*/ printf("terminating child..."); kill(child_pid, SIGTERM); /*Parent raising SIGTERM*/ wait(&status); /*Parent waiting child fot termination*/ printf("done\n"); Betriebssysteme Harald Kosch Seite 87

19 Gebräuchliche Signale in UNIX Name Num Default Action Description SIGHUP 1 terminate process terminal line hangup SIGINT 2 terminate process interrupt program SIGQUIT 3 create core image quit program SIGKILL 9 terminate process kill process unconditionally and immed. SIGTERM 15 terminate process software termination signal asks program to quit gracefully if poss. SIGSTOP 17 stop process stop process unconditionally and immed. this signal cannot be ignored - CONT SIGTSTP 18 stop process stop keyboard signal can be continued with CONT SIGCONT 19 discard signal continue after stop Use the kill command with the -l option to see a list of all signals supported on your system. For example, $ kill -l HUP INT QUIT... Users generally send signals via the keyboard or the kill command. For example: CTRL-c SIGINT 2 CTRL-\ SIGQUIT 3 CTRL-z SIGTSP 18 The kill command sends a signal to a process. kill -SIG ID SIG can be a signal name or signal number. ID is a process ID (PID). On some systems, ID can also be a job ID. Betriebssysteme Harald Kosch Seite 88

20 Probleme mit Signalen Schlafende Prozesse Es ist nicht gleich, ob ein Prozess auf einen disk I/O (endet bald) oder auf die Tastatur (endet vielleicht nie) wartet Uninterruptable sleep: Das Signal wird erst später vermittelt (z.b. disk I/O) Interruptable sleep: Der Prozess wird erweckt durchs Signal (z.b. beim Warten auf Tastatur (oder Godot)) Unreliable Signals (SVR2 und noch früher) Signal-Information in u-area: Prozess muß auch dann erweckt werden, wenn er das Signal ignoriert Vor dem Aufruf des Handlers wird die default-aktion zurückgesetzt um eine unendliche Reihe von Signalen zu hindern. Signale können verloren gehen (race condition) Handler müssen wiederholt registriert werden Reliable Signals (4.2BSD, SVR4, POSIX) Persistente Handlers bleiben immer installiert Masking Signal wird temporär zurückgehalten Wichtigste Signal-Information in proc-area sigpause Explizites Warten auf Signale Implementierungen oft unterschiedlich: Vorsicht! Betriebssysteme Harald Kosch Seite 89

21 SYSTEM V Message Queues #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h> #include <stdio.h> #include <unistd.h> #define MSGSIZE 80 int msqid; /* Message queue identifier */ struct my_msgbuf { /* Our messages have that look */ long mtype; char message[80]; /* The real message-text */ ; /* Remove the message queue from the kernel */ void killmsgbuf() { msgctl(msqid, IPC_RMID, 0); /* Read junk from stdin and place it in the message queue */ void producer() { struct my_msgbuf pmbuf; pmbuf.mtype = 1; for(;;) { printf(": "); gets(pmbuf.message); if(0 == strcmp("end", pmbuf.message)) { /* Tell consumer that we wish to end the show now */ msgsnd(msqid, &pmbuf, MSGSIZE, 0); break; /* Messages may be lost if the message queue is full! */ if( -1 == (msgsnd(msqid, &pmbuf, MSGSIZE, IPC_NOWAIT))) perror("\nmessage NOT delivered!\n"); Betriebssysteme Harald Kosch Seite 90

22 /* Read messages from the queue and write them into a file */ void consumer() { struct my_msgbuf cmbuf; FILE *fd; fd = fopen("consumer.out", "w"); for(;;) { msgrcv(msqid, &cmbuf, MSGSIZE, 0, 0); if( 0 == (strcmp("end", cmbuf.message ))) { /* consumer has to kill the message buffer because he is the last who will access it */ killmsgbuf(); fclose(fd); break; fprintf(fd, "%s\n", cmbuf.message); /* Start the ball rolling */ void main() { if (-1 == (msqid = msgget( (ftok(".", 1 )), IPC_CREAT 0666))) { perror("msgget"); exit(-1); if( 0 == (fork()) ) { consumer(); else { producer(); exit(0); Im Prinzip ähnlich zu Pipes Konzept ist durchgängig Viel mehr Dienstleistungen Betriebssysteme Harald Kosch Seite 91

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Aufgabenblatt 5 Musterlösung

Aufgabenblatt 5 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 5 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist

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

Michael Golm, Universität Erlangen-Nürnberg, IMMD 4, 1999/ / Tafelübung 5. Prozeß2 Prozeß3. Kernel

Michael Golm, Universität Erlangen-Nürnberg, IMMD 4, 1999/ / Tafelübung 5. Prozeß2 Prozeß3. Kernel 5. Tafelübung Lösung der ldir-aufgabe Erläuterung der jsh-aufgabe POSIX-Signale 46 IPC mit Signalen - Beispiele Ereignis ist eingetreten (SIGUSR1) Prozeß1 Prozeß2 Prozeß3 Prozeß4 kill-signal (SIGKILL)

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

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

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

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

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

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

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

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

Systemnahe Programmierung in C/C++

Systemnahe Programmierung in C/C++ 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

Mehr

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

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

Aufgabenblatt 6 Musterlösung

Aufgabenblatt 6 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 6 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2018/19 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist

Mehr

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

Interprozesskommunikation in Unix. WS 08/09 Universität Innsbruck Interprozesskommunikation in Unix Betriebssysteme WS 08/09 Universität Innsbruck Unix-Standardisierung (kurzer Einschub) Erste Unix-Version 1969 (Ken Thompson) Im Laufe der Zeit bildete sich eine Vielzahl

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

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

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

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

Die Zustellung von Signalen 100

Die Zustellung von Signalen 100 Die Zustellung von Signalen 100 Die vorangegangenen Beispiele werfen die Frage auf, wie UNIX bei der Zustellung von Signalen vorgeht, wenn der Prozess zur Zeit nicht aktiv ist, gerade ein Systemaufruf

Mehr

Interprozesskommunikation

Interprozesskommunikation Interprozesskommunikation Inhalt 1. Überblick... 2 2. Pipes... 5 3. Fifo...22 3.1. Übung IPC-2...39 Unix für Entwickler: Interprozesskommunikation Prof Dr. Alois Schütte 1/40 1. Überblick Hier werden die

Mehr

fork () Hans-Georg Eßer, Hochschule München Betriebssysteme I, SS 2008 2. Prozesse (2/2) Folie 4

fork () Hans-Georg Eßer, Hochschule München Betriebssysteme I, SS 2008 2. Prozesse (2/2) Folie 4 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]: SAS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

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

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

2 UNIX Interprozesskommunikation

2 UNIX Interprozesskommunikation Parallelverarbeitung Folie 2-1 2 UNIX Interprozesskommunikation Austausch von Informationen zwischen kooperierenden Prozessen Synchronisation kooperierender Prozesse Kommunikationsmechanismen gemeinsame

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

Fortgeschrittene I/O

Fortgeschrittene I/O 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

Tafelübung zu BS 1. Prozesse verwalten

Tafelübung zu BS 1. Prozesse verwalten Tafelübung zu BS 1. Prozesse verwalten 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

Vorlesung Betriebssysteme I

Vorlesung Betriebssysteme I 1 / 38 Vorlesung Betriebssysteme I Thema 6: Kommunikation Robert Baumgartl 14. Dezember 2015 2 / 38 Einige Gedanken Kommunikation = Übertragung von Informationen zwischen Aktivitäten meist mit Synchronisation

Mehr

Concurrency and Processes of Pthreads

Concurrency and Processes of Pthreads Concurrency and Processes of Pthreads Pthreads Pthreads is a POSIX standard for describing a thread model, it specifies the API and the semantics of the calls. POSIX: Portable Operating System Interface

Mehr

8.3 Sonstiges/Signalbehandlung

8.3 Sonstiges/Signalbehandlung 8. Sonstiges/Signalbehandlung 8..1 Was sind Signale? Signale bilden in der Sprache C die Funktionalität ab, die in Maschinensprache (bzw. Assembler) von Interrupts bekannt ist: Ein Prozess kann zu beliebiger

Mehr

Das Signalkonzept (T) Signale und Signalbehandlung (P)

Das Signalkonzept (T) Signale und Signalbehandlung (P) Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom 10.12. Foliensatz 6 Das Signalkonzept (T) (P) Thomas Schaaf, Nils gentschen Felde Lehr- und Forschungseinheit für Kommunikationssysteme

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

Operating Systems Principles. Event Queue

Operating Systems Principles. Event Queue Humboldt University Computer Science Department Operating Systems Principles Event Queue 1. Aufgabe 3 Wochen Zeit zum Lösen der Aufgaben Aufgabenstellung auf der SAR Website Abgabe über GOYA Abgabefrist:

Mehr

7 Beispiel: TS Scheduling in Solaris (2)

7 Beispiel: TS Scheduling in Solaris (2) 7 Beispiel: Time Sharing Scheduling in Solaris 60 Warteschlangen, Tabellensteuerung Level ts_quantum ts_tqexp ts_maxwait ts_lwait ts_slpret 0 200 0 0 50 50 1 200 0 0 50 50 2 200 0 0 50 50 3 200 0 0 50

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

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. 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

Ü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

Lösung zur Praktikumsaufgabe 9

Lösung zur Praktikumsaufgabe 9 Lösung zur Praktikumsaufgabe 9 Thema: Pipes 2. Zur Beendigung des Programmes sind verschiedene Ansätze denkbar. Wenn explizit auf eine bestimmtes Symbol (z. B. quit, Leerzeile) getestet wird, dann darf

Mehr

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

Probeklausur zu Systemnahe Software II SS 2012 Dr. Andreas Borchert mit Markus Schnalke Probeklausur zu Systemnahe Software II SS 2012 Dr. Andreas Borchert mit Markus Schnalke 1 Aufgabe 1 (15 Punkte) Prozesse, Signale und Interprozesskommunikation (a) 3 Punkte Was wird von dem folgenden Programm

Mehr

Systemprogrammierung (37-023)

Systemprogrammierung (37-023) Systemprogrammierung (37-023) Assemblerprogrammierung Betriebssystemgrundlagen Maschinenmodelle Dozent: Prof. Thomas Stricker Unterrichtssprache: Deutsch Begleit-/Textbuch: R. P. Paul: SPARC Architecture,

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

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

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

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

Linux Prinzipien und Programmierung

Linux Prinzipien und Programmierung Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 28 2 / 28 Motivation für Betrachten Sie folgendes Programm: #include #include

Mehr

Shared-Memory Programmiermodelle

Shared-Memory Programmiermodelle Shared-Memory Programmiermodelle mehrere, unabhängige Programmsegmente greifen direkt auf gemeinsame Variablen ( shared variables ) zu Prozeßmodell gemäß fork/join Prinzip, z.b. in Unix: fork: Erzeugung

Mehr

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen Kommunikationsnetze Gliederung 1. Socket-Programmierung unter C 2. Socket-Programmierung unter Java Gliederung Berkeley Sockets (Erste freie TCP/IP-Implementierung in Berkeley UNIX): SOCKET: Erzeugen eines

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

Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus

Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus 2. November 2012 Prof. Dr. Christian Tschudin Departement Mathematik und Informatik, Universität

Mehr

Lösung zur Praktikumsaufgabe 3

Lösung zur Praktikumsaufgabe 3 Lösung zur Praktikumsaufgabe 3 Thema: Analyse des Leser-Schreiber-Problems 1. Der Code nutzt die ncurses-bibliothek, um eine saubere Darstellung der Uhrzeit zu ermöglichen. Der Server legt einen Handler

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

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

Kernel. Prototyp. Besprechung 3. Aufgabe. POSIX-Signale. tms Datenstruktur. Betriebssystem erfasst die Rechenzeit der Prozesse. Prozess3 (SIGUSR1)

Kernel. Prototyp. Besprechung 3. Aufgabe. POSIX-Signale. tms Datenstruktur. Betriebssystem erfasst die Rechenzeit der Prozesse. Prozess3 (SIGUSR1) 29 Überblick über die 6. Übung Überblick über die 6. Übung 30 Rechenzeiterfassung (2) Rechenzeiterfassung Besprechung 3. Aufgabe Rechenzeiterfassung #include POSIX- clock_t times(struct tms

Mehr

Parallele Sitzungen 225

Parallele Sitzungen 225 Parallele Sitzungen 225 Es gibt vier Ansätze, um parallele Sitzungen zu ermöglichen: Für jede neue Sitzung wird mit Hilfe von fork() ein neuer Prozess erzeugt, der sich um die Verbindung zu genau einem

Mehr

TI III: Operating and Communication. WS 2008/09 Übungsblatt Nr. 1

TI III: Operating and Communication. WS 2008/09 Übungsblatt Nr. 1 TI III: Operating and Communication Systems WS 2008/09 Übungsblatt Nr. 1 Georg Wittenburg, M.Sc., AG Technische Informatik, Freie Universität Berlin 1. Aufgabe: Begriffe (8 Punkte) Beschreiben Sie jeden

Mehr

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer Allgemeines Shell Programmierung Unix Shell Scripts Unix Ein shell script ist eine Textdatei, welche eine Liste von Befehlen (Standard Unix Befehle) beinhaltet. Diese Datei kann durch Aufrufen ausgeführt

Mehr

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Java Tools JDK. IDEs.  Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/

Mehr

Tafelübung zu BS 2. Threadsynchronisation

Tafelübung zu BS 2. Threadsynchronisation Tafelübung zu BS 2. Threadsynchronisation 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

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

p^db=`oj===pìééçêíáåñçêã~íáçå=

p^db=`oj===pìééçêíáåñçêã~íáçå= p^db=`oj===pìééçêíáåñçêã~íáçå= Error: "Could not connect to the SQL Server Instance" or "Failed to open a connection to the database." When you attempt to launch ACT! by Sage or ACT by Sage Premium for

Mehr

Linux Prinzipien und Programmierung

Linux Prinzipien und Programmierung Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2010/2011 1 / 18 2 / 18 fork und Daten Nach dem fork teilen sich Eltern- und Kindprozess zwar den Programmbereich

Mehr

Fallbeispiel Unix. Betriebssysteme. Hermann Härtig TU Dresden

Fallbeispiel Unix. Betriebssysteme. Hermann Härtig TU Dresden Fallbeispiel Unix Betriebssysteme Hermann Härtig TU Dresden Wegweiser Unix-Grundkonzepte Adressraum Systemaufrufe Prozesserzeugung Prozess-Kommunikation Signale Pipes Sockets Betriebssysteme WS 2018, UNIX!2

Mehr

Vom Client zum Server

Vom Client zum Server Vom Client zum Server Der Verbindungsaufbau im Detail MARTIN BERGER DOAG 2013 Martin Berger ORACLE DBA seit 2000 (ORACLE Support & Kunden) http://berxblog.blogspot.com @martinberx martin.a.berger@gmail.com

Mehr

Tafelübung zu BS 1. Prozesse verwalten

Tafelübung zu BS 1. Prozesse verwalten Tafelübung zu BS 1. Prozesse verwalten 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/ss2015/bs/

Mehr

Betriebssysteme. Tafelübung 2. Thread-Synchronisation. Olaf Spinczyk.

Betriebssysteme. Tafelübung 2. Thread-Synchronisation. Olaf Spinczyk. Betriebssysteme Tafelübung 2. Thread-Synchronisation http://ess.cs.tu-dortmund.de/de/teaching/ss2016/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

Mehr

2 UNIX Interprozeßkommunikation. 2.1 Prozesse erzeugen und beenden

2 UNIX Interprozeßkommunikation. 2.1 Prozesse erzeugen und beenden Parallelverarbeitung Folie 2-1 2 UNIX Interprozeßkommunikation 2.1 Prozesse erzeugen und beenden Programm: Sammlung von Anweisungen und Daten befindet sich i.a. auf der Festplatte ist im i-node als ausführbar

Mehr

Programmier-Befehle - Woche 10

Programmier-Befehle - Woche 10 Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten

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

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

Tafelübung zu BS 2. Threadsynchronisation

Tafelübung zu BS 2. Threadsynchronisation Tafelübung zu BS 2. Threadsynchronisation 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

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Informatik für Mathematiker und Physiker Woche 7. David Sommer Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen

Mehr

Hans-Georg Eßer, FH München Betriebssysteme I, WS 2006/07, 2007/01/24 Zusammenfassung (2/2) Folie 2

Hans-Georg Eßer, FH München Betriebssysteme I, WS 2006/07, 2007/01/24 Zusammenfassung (2/2) Folie 2 /home/esser/daten/dozent/folien/bs-esser-24.odp 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

Mehr

Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation

Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation 09.05.15 1 Literatur [6-1] http://php.net/manual/de/book.sockets.php [6-2] http://de.wikipedia.org/wiki/socket_(software) [6-3] http://php.net/manual/de/book.network.php

Mehr

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

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung) BERGISCHE UNIVERSITÄT WUPPERTAL GAUSS-STRASSE 20 42119 WUPPERTAL TELEFAX (0202) 439-2901 TELEFON (0202) 439-0 WWW www.uni-wuppertal.de Fachbereich C MATHEMATIK UND NATURWISSENSCHAFTEN Fachgruppe Mathematik

Mehr

SAMPLE EXAMINATION BOOKLET

SAMPLE EXAMINATION BOOKLET S SAMPLE EXAMINATION BOOKLET New Zealand Scholarship German Time allowed: Three hours Total marks: 24 EXAMINATION BOOKLET Question ONE TWO Mark There are three questions. You should answer Question One

Mehr

Programmier-Befehle - Woche 08

Programmier-Befehle - Woche 08 Datentypen Vektoren (mehrdim.) eines bestimmten Typs Erfordert: #include Wichtige Befehle: Definition: std::vector my vec (n rows, std::vector(n cols, init value)) Zugriff:

Mehr

Besprechung Aufgabe 1: Prozesse verwalten Fortsetzung Grundlagen C-Programmierung Aufgabe 2: Threadsynchronisation

Besprechung Aufgabe 1: Prozesse verwalten Fortsetzung Grundlagen C-Programmierung Aufgabe 2: Threadsynchronisation Betriebssysteme Tafelübung 2. Thread-Synchronisation http://ess.cs.tu-dortmund.de/de/teaching/ss2016/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

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

Was ist ein Prozess?

Was ist ein Prozess? Prozesse unter UNIX Definition Was ist ein Prozess? Zeitliche Abfolge von Aktionen Ein Programm, das ausgeführt wird Prozesshierachie Baumstruktur INIT-Prozess ist die Wurzel (pid=1) und wird beim Booten

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

Betriebssysteme. Agenda. Tafelübung 3. Deadlock. Olaf Spinczyk.

Betriebssysteme. Agenda. Tafelübung 3. Deadlock. Olaf Spinczyk. Betriebssysteme Tafelübung 3. Deadlock http://ess.cs.tu-dortmund.de/de/teaching/ss2016/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik

Mehr