4. Interprozeßkommunikation in UNIX
|
|
- Helga Dresdner
- vor 5 Jahren
- Abrufe
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
Ü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 */
MehrJ.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
MehrLö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
MehrGanze 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:
MehrLab 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
Mehr7.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
MehrKommunikation 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
Mehr2. 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/
MehrSpeicherbasierte 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
MehrPROGRAMMIEREN 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
MehrEinfü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...
MehrTafelü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/
Mehrcritical 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
MehrSystemprogrammierung.: 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
MehrSystemsoftware 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
MehrAufgabenblatt 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
MehrPROGRAMMIEREN 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
MehrMichael 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)
MehrTafelü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/
MehrTafelü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/
Mehr3. 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/
MehrPROGRAMMIEREN 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
MehrEinfü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
MehrTafelü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/
MehrBetriebssysteme 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
MehrPROGRAMMIEREN 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.
MehrThreads. 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)
MehrSystemnahe 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
MehrInterprozesskommunikation
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
MehrSystemprogrammierung 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
MehrAufgabenblatt 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
MehrInterprozesskommunikation 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
MehrEine 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?...................
MehrSystemnahe 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
MehrEinfü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
MehrKlausur 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
MehrDie 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
MehrInterprozesskommunikation
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
Mehrfork () 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)
MehrBetriebssysteme (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
MehrTafelü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/
Mehr2 UNIX Interprozesskommunikation
Parallelverarbeitung Folie 2-1 2 UNIX Interprozesskommunikation Austausch von Informationen zwischen kooperierenden Prozessen Synchronisation kooperierender Prozesse Kommunikationsmechanismen gemeinsame
MehrPROGRAMMIEREN 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
MehrFortgeschrittene 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)
MehrTafelü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/
MehrVorlesung 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
MehrConcurrency 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
Mehr8.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
MehrDas 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
MehrTafelü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/
MehrOperating 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:
Mehr7 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
MehrZusammenfassung 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
MehrVorlesung 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
MehrThreads. 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) Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014 Inhalt Prozesse System-Schnittstelle Aufgabe 7 Einlesen von der Standard-Eingabe
MehrLö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
MehrProbeklausur 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
MehrSystemprogrammierung (37-023)
Systemprogrammierung (37-023) Assemblerprogrammierung Betriebssystemgrundlagen Maschinenmodelle Dozent: Prof. Thomas Stricker Unterrichtssprache: Deutsch Begleit-/Textbuch: R. P. Paul: SPARC Architecture,
MehrTafelü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/
MehrTafelü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/
MehrBeispiel 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,
MehrPROGRAMMIEREN 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
MehrLinux 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
MehrShared-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
MehrKommunikationsnetze. 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
MehrHomogene 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
MehrRechnerarchitektur 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
MehrLö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
MehrSystemprogrammierung 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
MehrTafelü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/
MehrKernel. 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
MehrParallele 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
MehrTI 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
MehrAllgemeines. 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
MehrJava 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/
MehrTafelü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/
MehrAngewandte 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
Mehrp^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
MehrLinux 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
MehrFallbeispiel 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
MehrVom 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
MehrTafelü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/
MehrBetriebssysteme. 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
Mehr2 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
MehrProgrammier-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
MehrLö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
MehrPThreads. 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
MehrTafelü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/
MehrInformatik 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
MehrHans-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
MehrArchitektur 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
MehrBetriebssysteme: 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
MehrSAMPLE 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
MehrProgrammier-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:
MehrBesprechung 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
MehrU7 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
MehrWas 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
MehrInformatik - Ü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
MehrBetriebssysteme. 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