PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN
|
|
|
- Kristin Schäfer
- vor 8 Jahren
- Abrufe
Transkript
1 PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 11. UNIX/Linux-Semaphore Wintersemester 2016/17
2 Semaphore * wurden 1965 von E.W. DIJKSTRA (NL) als BS-gestützter Mechanismus zur Realisierung von Koordinationsaufgaben eingeführt zum Begriff: Semaphor... Signalmast bei der Eisenbahn bzw. in der Schifffahrt Vervollständigung des Konzepts: (normalerweise)wird eine Warteschlange von Prozessen, die momentan den Semaphor nicht passieren können, als Teil des Semaphorkonzepts gesehen weiterhin: WARTEN(BV) wird ersetzt durch: P(Semaphor_x) P-Operation (von Passeren (holländisch) = (dt.) Passieren) SIGNALISIEREN(BV) durch: V(Semaphor_x) V-Operation (von Vriegeven (holländisch) = (dt.) Freigeben) ws2016/17 H.-A. Schindler Folie: 11-2
3 Diese sind dem BS zugängliche (binäre) Variable, die nurdie Werte 0 oder 1 annehmen können. P- und V-Operation sind als Systemaufrufe implementiert Binäre Semaphore Damit ist ein einfaches Koordinationsproblem folgendermaßen darstellbar (einschließlich Anfangswert): Binäre Variable P1 P2 Zeiger auf Prozesse Sem... Warteschlange von Prozessen P(Sem) B A V(Sem) Semaphor Sem Anfangszustand: Sem := 0 Struktur eines binären Semaphors (nach /Nehmer+98/ S. 164) ws2016/17 H.-A. Schindler Folie: 11-3
4 Allgemeine Semaphore ( Zählsemaphore )... sind eine Verallgemeinerung binärer Semaphore: 1. Die binäre Variable wird durch eine ganzzahlige Zählvariableersetzt. Deren Anfangswertgibt die Anzahl von Prozessen an, die sich gleichzeitig in einem durch den Semaphor geschützten Bereich aufhalten dürfen. 2. jede P-Operationen( Warten ) überprüft, ob noch Eintreten in den geschützten Bereich möglich ist (Zählvariable > 0). In diesem Fall kann der Prozess passieren, und die Zählvariable wird dekrementiert. Anderenfalls befindet sich bereits zulässige Menge von Prozessen im geschützten Bereich und tatsächliches Warten des aufrufenden Prozesses ist erforderlich: Es erfolgt ein Einketten in die zugehörige Prozesswarteschlange. (Bei Verlassen der Warteschlange muss Zählvariable natürlich ebenfalls dekrementiert werden.) ws2016/17 H.-A. Schindler Folie: 11-4
5 3. jede V-Operationen( Signalisieren ) inkrementiert Zählvariable... Ist der Wert 0 überschritten, kann der erste wartende Prozess die von ihm aufgerufene P-Operation passieren (falls ein solcher existiert). Es erfolgt ein Ausketten aus der zugehörigen Prozesswarteschlange, und der Wert der Zählvariablen muss wieder dekrementiert werden. Zählvariable Zeiger auf Prozesse... Warteschlange von Prozessen Struktur eines Zählsemaphors (nach /Nehmer+98/ S. 164) ws2016/17 H.-A. Schindler Folie: 11-5
6 UNIX/Linux-Semaphor-Konzept... geht (weit) über allgemeines Semaphorkonzept hinaus Charakteristika: 1. Ein Aufruf kann ganze Gruppe von Semaphoren anlegen. 2. Semaphore können um größere Werte als um 1 erhöht oder erniedrigt werden. 3. Für eine Gruppe von Semaphoren kann eine Folge von jeweils atomaren Operationen definiert werden. 4. Semaphore besitzen Eigentümer- und Zeiteinträge sowie Zugangsmodi. Diese Erweiterungen übersteigen im Normalfall das, was Programmierer wirklich braucht! ws2016/17 H.-A. Schindler Folie: 11-6
7 Systemaufrufe semget(...) legt neue Semaphorgruppe an oder greift auf bereits bestehende zu semop(...) semctl(...) ändert die Werte der Semaphore einer Gruppe, indem eine oder mehrere P- oder V-Operationen ausgeführt werden; alle Operationen werden atomar in einem Block ausgeführt führt verschiedene Steuerungsfunktionen auf Semaphore aus, wie Setzen (Initialisieren) und Auslesen der Werte, Löschen von Semaphoren u.a. ws2016/17 H.-A. Schindler Folie: 11-7
8 Strukturen semid_ds und sem Verwaltungsstruktur für jede Semaphorengruppe struct semid_ds { struct ipc_perm sem_perm; /* Zugriffsberechtigungen, Eigentümer, Gruppe etc. */ struct sem *sem_base; /* Zeiger auf 1.Semaphor einer Gruppe */ unsigned short sem_nsems; /* Anzahl der Semaphoren in Gruppe */ }; time_t sem_otime; /* Zeitpunkt des letzten semop(..) */ time_t sem_ctime; /* Zeitpunkt, zu dem diese Struktur zuletzt geändert */ Verwaltungsstruktur für jeden Semaphor einer Gruppe struct sem { unsigned short semval; /* aktueller Wert des Semaphors */ }; pid_t sempid; /* Nummer des Prozesses, der letzte Operation ausgeführt hat */ unsigned short semncnt; /* Anzahl der Prozesse, die auf semval > currval warten */ unsigned short semzcnt; /* Anzahl der Prozesse, die auf semval = 0 warten */ ws2016/17 H.-A. Schindler Folie: 11-8
9 Struktur ipc_perm ( ipc permissions ) spezifiziert Zugriffsrechte struct ipc_perm { uid_t uid; /* effektive Benutzernummer des Eigentümers */ gid_t gid; /* effektive Gruppennummer des Eigentümers */ uid_t cuid; /* effektive Benutzernummer des Erzeugers */ gid_t cgid; /* effektive Gruppennummer des Erzeugers */ }; mode_t mode; /* Zugriffsmodus */ unsigned long seq; /* Zähler der Verwendung der IPC-Struktur */ key_t key; /* Schlüssel */ ws2016/17 H.-A. Schindler Folie: 11-9
10 Systemaufruf semget(..) legt neue Semaphor-Gruppe an oder greift auf bereits bestehende zu Verwendung im Programm (Prinzip): int <id_sem>; * <id_sem> = semget(<key>, <nsems>, <flag>); Konkretes Beispiel: int id; * id = semget(15, 10, IPC_CREATE 0700); Parameter Symbol Typ Bedeutung Wert <id_sem> int Rückkehrwert Interpretation 0 O.K. auf <id_sem>: Identifikator d -1 Feh- Systemaufruf fehlgeschlagen ler <key> long numerischer Schlüssel mögliche Einträge: Zahl, Variable, symbolische Konstante; IPC_PRIVATE bei Angabe IPC_PRIVATE: UNIX/Linux erzeugt selbst einen Schlüssel <nsems> int Anzahl der Semaphore in der Gruppe ws2016/17 H.-A. Schindler Folie: 11-10
11 Systemaufruf semget(..) <id_sem> = semget(<key>, <nsems>, <flag>); Parameter Symbol Typ Bedeutung Wert Interpretation <flag> int Wirkung Beispieleintrag: IPC_CREATE 0644 des Aufrufs Anlegen neuer Semaphor-Gruppe mit Zugriffsrechten: rw r - - r - - wichtig: Zugriffsrechte unbedingt spezifizieren Beispieleintrag: 0 (Null) Zugriff auf vorhandene Semaphor-Gruppe ws2016/17 H.-A. Schindler Folie: 11-11
12 Beispielprogramm sema1.c #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> main() { int id_sem; } id_sem = semget(ipc_private, 5, IPC_CREAT 0732); printf("\nid_sem = %d\n\n", id_sem); ws2016/17 H.-A. Schindler Folie: 11-12
13 Erforderliche #include-dateien Zur Arbeit mit Semaphoren werden benötigt: #include <stdio.h> // zur Ausführung von E/A-Operationen #include <sys/types.h> // wegen der Definition spezieller Datentypen // siehe z.b. in den Datenstrukturen semid_ds // und sem #include <sys/ipc.h> // allgemeine Definitionen für UNIX-IPC #include <sys/sem.h> // spezielle Definitionen zu Semaphoren ws2016/17 H.-A. Schindler Folie: 11-13
14 Systemaufruf semop(...) ( semaphore operation ) ändert die Werte der Semaphore einer Gruppe, indem eine oder mehrere P- oder V-Operationen ausgeführt werden. Alle Operationen werden atomar in einem Block ausgeführt. Verwendung im Programm (Prinzip): int <result>; * <result> = semop(<id_sem>, <sops>, <nsops>); Konkretes Beispiel: (siehe sema2.c) int res; * res = semop(id, &DOWN, 1); Parameter Symbol Typ Bedeutung Wert Interpretation <result> int Rückkehrwert 0 O.K. fehlerfreie Ausführung -1 Feh- Systemaufruf fehlgeschlagen ler <id_sem> int Identifikator der Semaphor- Gruppe [siehe semget(..)] ws2016/17 H.-A. Schindler Folie: 11-14
15 Systemaufruf semop(...) <id_sem> = semget(<key>, <nsems>, <flag>); Parameter Symbol Typ Bedeutung Wert <sops> struct sembuf* <nsops> int Folge der auszuführenden Semaphor- Operationen Anzahl der Operationen in der Folge Interpretation Beschreibung der Operationen durch Datenstruktur sembuf{} (siehe folgende Folie) ws2016/17 H.-A. Schindler Folie: 11-15
16 Datenstruktur sembuf{..} [zu Systemaufruf semop(...)] Definition der Datenstruktur: struct sembuf { short sem_num; /* Nummer des Semaphors in der Gruppe */ short sem_op; /* spezifiziert auszuführende Operation, siehe unten */ short sem_flg; /* steuert genaue Ausführung der Operation, siehe unten */ }; sem_op auszuführende Operation: sem_op > 0 atomare V-Operation;Semaphor wird um angegebenen Wert erhöht sem_op < 0 atomare P-Operation;Semaphor wird um angegebenen Wert vermindert sem_flg zur Steuerung der Operation: IPC_NOWAIT Funktion kehrt ohne Warten (meist mit Fehlerangabe) zurück SEM_UNDO Korrektur des Semaphorwerts unter bestimmten Bedingungen ws2016/17 H.-A. Schindler Folie: 11-16
17 Beispiele zur Anwendung von semop(...) Anlegen und füllen einer Datenstruktur sembuf : // Datenstruktur anlegen zur Ausführung einer [up-]operation struct sembuf sem_up;... // Definition der [up-]operation durch Füllen der Datenstruktur sem_up.sem_num = 0; // Nummer des Semaphors in der Gruppe, hier 1. Semaphor sem_up.sem_op = 1; // auszuführende Operation, hier up (= V-Operation) sem_up.sem_flg = 0; // Flag zur Beeinflussung der Operation... // Ausführen der definierten Operation auf Semaphor semop(<id>, &sem_up, 1); // Ausführen der definierten Operation auf Semaphor struct sembuf sem_xyz[n]; // zur Ausführung von insgesamt n Operationen sem_up.sem_num[0] = * * sem_up.sem_num[1]= * K semop(<id>, &sem_xyz, n); // Ausführen der Operationen auf Semaphor ws2016/17 H.-A. Schindler Folie: 11-17
18 Systemaufruf semctl(...) ( semaphore control ) führt verschiedene Steuerungs-Operationen auf Semaphoren aus Verwendung im Programm (Prinzip): int <result>; * <result> = semctl(<id_sem>, <nsem>, <cmd>, <arg>); Konkretes Beispiel: (sema2.c: löschen Sema) int res; * res = semctl(id, 1, IPC_RMID, 0); Parameter Symbol Typ Bedeutung Wert <result> int Rückkehrwert Interpretation 0 O.K. fehlerfreie Ausführung <id_sem> int Identifikator der Semaphor- Gruppe [siehe semget(..)] <nsem> int Index eines Semaphors innerhalb der Gruppe -1 Feh- Systemaufruf fehlgeschlagen ler ws2016/17 H.-A. Schindler Folie: 11-18
19 Systemaufruf semctl(...) <result> = semctl(<id_sem>, <nsem>, <cmd>, <arg>); Parameter Symbol Typ Bedeutung Wert <cmd> int auszuführendes Kommando (siehe folg. Folien) Interpretation <arg> union semun Parameterpuffer Ist Puffer, in den die Parameter zur Ausführung des Kommandos übertragen werden. <arg> ist kein Zeiger sondern die union selbst!! Konkrete Form von semun vom Kommando abhängig (siehe folgende Folie) ws2016/17 H.-A. Schindler Folie: 11-19
20 Union semun{..} [zu Systemaufruf semctl(...)] Definition union semun { int val; /* für SETVAL */ struct semid_ds *buf; /* für IPC_STAT und IPC_SET */ unsigned short *array; /* für GETALL und SETALL */ }; Parameter cmd : gibt an, welcher von 10 möglichen Befehlen auf Semaphorengruppe mit dem Identifikator id_sem [Systemaufruf semget(..)] ausgeführt wird 5 Befehle davon greifen jeweils nur auf einen Semaphor einer Gruppe zu. Diese spezifizieren in nsem einen Semaphor einer Semaphorengruppe. nsem kann Werte zwischen 0 und (nsems 1) [Systemaufruf semget(..)] annehmen. ws2016/17 H.-A. Schindler Folie: 11-20
21 Zum Parameter <cmd> [zu Systemaufruf semctl(...)] Beispiele: IPC_STAT IPC_SET Werte insemid_ds setzen IPC_RMID Semaphor-Gruppe löschen GETVAL SETVAL GETPID Wert von semid_ds für diese Gruppe ermitteln und in Struktur speichern, auf die arg.buf zeigt liefert Wert von semval für Element semnum setzt Wert von semval liefert Wert von von semnum GETNCNT liefert Wert von semnct für semnum GETZCNT liefert Wert von semznct für semnum GETALL SETALL ermittelt alle Semaphorwerte der Gruppe setzt alle Semaphorwerte der Gruppe ws2016/17 H.-A. Schindler Folie: 11-21
22 Beispielprogramm sema2.c /* Dieses Programm zeigt notwendige Definitionen zur Arbeit mit */ /* UNIX/Linux-Semaphoren, sowie die Definition von DOWN- und UP- */ /* Operation (identisch mit P- bzw. V-Operation) */ /* */ /* UP- und DOWN-Operation werden anschließend einer einfachen */ /* Funktionskontrolle unterzogen * */ #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> intmain() { int xyz = 96; // Identifikator (Bezeichnung) des benutzten Semaphors int id; // zur Definition von UP- bzw. DOWN-Funktion struct sembuf UP, DOWN; ws2016/17 H.-A. Schindler Folie: 11-22
23 Beispielprogramm sema2.c //Rückkehrwerte von Semaphor-Operationen int result_up; int result_down; int result_init; int result_read; printf( * SEMAPHOR-TESTPROGRAMM *"); // Definition der Semaphor-Operationen // UP-Operation (= V- bzw. signal-operation) UP.sem_num= 0; UP.sem_op = 1; // UP-Operation UP.sem_flg= IPC_NOWAIT; // DOWN-Operation (= P- bzw. wait-operation) DOWN.sem_num= 0; DOWN.sem_op = (-1); // DOWN-Operation DOWN.sem_flg= IPC_NOWAIT; ws2016/17 H.-A. Schindler Folie: 11-23
24 Beispielprogramm sema2.c // Semaphor-Anfangswert einstellen unsigned short initial; //fuer Semaphor-Anfangswert unsigned short ausgabe; //fuer Kontrolle des Anfangswerts initial = 1; //Semaphor-Anfangswert // Erzeugen eines Semaphors * id = semget(xyz, 10, IPC_CREAT); printf("\nsemaphor erzeugt, Identifikator = %d\n", id); // Einstellen eines Anfangswertes result_init = semctl(id, 1, SETALL, &initial); printf("\nanfangswerteingestellt, vorgegebener Wert = %d\n", initial); // Erfolgskontrolle: semctl erfolgreich ausgefuehrt? printf("\nerfolgskontrolle: Rueckkehrwert von *semctl*: %d\n", result_init); ws2016/17 H.-A. Schindler Folie: 11-24
25 Beispielprogramm sema2.c // Erfolgskontrolle: gewuenschter Anfangswert korrekt eingestellt? printf("erfolgskontrolle: eingestellter Wert->dazu: Lesen des Sem.wertes\n"); // Lesen des Semaphorwertes result_read = semctl(id, 1, GETALL, &ausgabe); printf( RUECKKEHRWERT LESE-Op.= %d\n gesetzter Anfangswert des Semaphors: %d \ \n, result_read, ausgabe); // TEST: DOWN-OPERATION printf("\n\ntest: DOWN-OPeration\n********************\n"); result_down = semop(id, &DOWN, 1); //ATOMARE DOWN-OPERATION // Erfolgskontrolle: semop erfolgreich ausgefuehrt? printf("\nerfolgskontrolle: Rueckkehrwert von *DOWN*: %d\n", result_down); // Erfolgskontrolle: DOWN korrekt ausgefuehrt? printf("\nerfolgskontrolle: eingest. Wert -> dazu: Lesen Semaphorwert\n"); ws2016/17 H.-A. Schindler Folie: 11-25
26 Beispielprogramm sema2.c // Lesen des Semaphorwertes result_read = semctl(id, 1, GETALL, &ausgabe); printf( RUECKKEHRWERT LESE-Operation = %d\n Wert des Sem. jetzt: %d \n"\, result_read, ausgabe); // TEST: DOWN-OPERATION printf("\ntest: UP-OPeration\n******************\n"); result_up = semop(id, &UP, 1); //ATOMARE UP-OPERATION // Erfolgskontrolle: semop erfolgreich ausgefuehrt? printf("\nerfolgskontrolle: Rueckkehrwert von *UP*: %d\n,result_up); // Erfolgskontrolle: UP korrekt ausgefuehrt? printf("erfolgskontrolle: eingest. Wert -> dazu: Lesen des Semaphorwertes\n"); // Lesen des Semaphorwertes result_read = semctl(id, 1, GETALL, &ausgabe); printf( RUECKKEHRWERT LESE-Operation = %d\n Wert des Semaphors jetzt: %d \n"\, result_read, ausgabe); ws2016/17 H.-A. Schindler Folie: 11-26
27 Beispielprogramm sema2.c // Am Ende: Semaphor loeschen semctl(id, 1, IPC_RMID, 0); printf("\n\nsemaphor geloescht\n"); printf("\n\n**********************************************\n\semaphor-testprog. vollst. durchlaufen\n**********************************************\n\n\n"); } return 0; ws2016/17 H.-A. Schindler Folie: 11-27
28 Informationen über Semaphore: Kommando ipcs Formen : ipcs -s semaphorearrays (allgemeine Angaben) ipcs -st t: time (alle Zeitangaben) ipcs -sc c: creator(erzeuger und Eigentümer der Strukturen) ipcs -su u: summary(zusammenfassende Informationen) ipcs -sl l: limits (Maximalwerte für diese UNIX-Implementation) ipcs -s -i <id> Ausg. nur für durch Identifizierer <id> spez. Ressource ipcs -h -h help(infos über Kommandobenutzung) ws2016/17 H.-A. Schindler Folie: 11-28
29 Löschen von Semaphoren: Kommando ipcrm Formen : ipcrm s <id> ipcrm S <key> durch Angabe des Identifizierers(Rückkehrwert) durch Angabe des Schlüssels (key) ws2016/17 H.-A. Schindler Folie: 11-29
30 Auf den folgenden Folien: Anwendungsbeispiele für Semaphore ws2016/17 H.-A. Schindler Folie: 11-30
31 Kritische Abschnitte Ein Prozess kann seine Arbeit im kritischen Abschnitt zeitweise unterbrechen, weil er z.b. vom Prozessor verdrängt wird oder auf ein Ereignis warten muss. Jedoch muss unbedingt verhindert werden, dass weitere Prozesse in ihren kritischen Abschnitt bezüglich des gleichen Problems eintreten, bevorder vorhergehende Prozess ihn wieder verlassen hat. Erst danach darf ein weiterer Prozess in seinen kritischen Abschnitt bezüglich des gleichen Problems (!) - eintreten. Diese Reihenfolge muss durch Koordinationsoperationen erzwungen werden! Vorliegende Problematik ist als gegenseitiger Ausschluss (engl. mutual exclusion) oder Sperrsynchronisation bekannt. Unter den Aufgaben von Betriebssystemen gibt es Reihe von Situationen mit äquivalenter Problemstellung. ws2016/17 H.-A. Schindler Folie: 11-31
32 Kritische Abschnitte Benutzung eines Gerätes... stellt ein gleichartiges Problem dar, wenn es sich um exklusivnutzbare, nicht entziehbare Gerätehandelt (d.h. solche, die jeweils nur von einem Prozess [sinnvoll] genutzt werden können... Beispiel: Drucker) Hier entspricht Benutzung der Geräteregister Arbeit mit Variablen im vorigen Beispiel... Allgemeinen gilt: Die Benutzung jedes exklusiv nutzbaren, nicht entziehbaren Betriebsmittels stellt einen kritischen Abschnitt dar, der entsprechend durch Sperrsynchronisation geschützt werden muss. In diesem Sinne auch Auftragstabelle des Printer-Spoolers ein solches exklusivnutzbares, nichtentziehbares (Software-)-Betriebsmittel... Anmerkung: Auch mit entziehbaren, exklusiv nutzbaren Betriebsmitteln wie z.b. dem Prozessor kann nicht sorglos umgegangen werden. Hier wurden die Geräteregister (hier: Prozessorregister) gerettet bevor anderer Prozess zugeordnet werden konnte... ws2016/17 H.-A. Schindler Folie: 11-32
33 Sperrsynchronisation Realisierung Sperrsynchronisation kann ebenfalls mittels des beschriebenen binären Elements BE bzw. einem Semaphor realisiert werden: Jeder Prozess muss vor Eintritt in seinen kritischen Abschnitt eine Operation WARTEN(BE) bzw. P(Semaphor) platzieren, sowie nach Verlassen desselben eine Operation SIGNALISIEREN(BE) bzw. V(Semaphor), die sich alle auf das gleiche BE bzw. den gleichen Semaphor beziehen. Prozess P1 WARTEN(BE) Kritischer Abschnitt SIGNALIS.(BE) Prozess P2 WARTEN(BE) Kritischer Abschnitt SIGNALIS.(BE)... Binäres Element BE (Semaphor) Anfangszustand: BE := gesetzt bzw. Semaphor:= 0 Prozess P n WARTEN(BE) Kritischer Abschnitt SIGNALIS.(BE) ws2016/17 H.-A. Schindler Folie: 11-33
34 Sperrsynchronisation Realisierung Funktionsprüfung: 1. Da binäres Element zunächst gesetzt (Anfangszustand!), darf der erste Prozess eintreten und löscht BE. 2. Alle weiteren Prozesse finden BE gelöscht und können somit vorläufig nicht in ihren kritischen Abschnitt eintreten Nach Verlassen des kritischen Abschnittes setzt der erste Prozess wiederum BE(Signalisierungs-Operation!) 4. Jetzt kann ein weiterer Prozess in seinen kritischen Abschnitt eintreten usw. Wirkung: Die Sperrsynchronisation erzwingt durch die Koordinationsoperationen Serialisierung des Durchlaufsdurch die kritischen Abschnitte der verschiedenen Prozesse... ws2016/17 H.-A. Schindler Folie: 11-34
35 Sperrsynchronisation Prozess P1 WARTEN(BE) Kritischer Abschnitt Prozess P2 WARTEN(BE) Kritischer Abschnitt... Prozess P n WARTEN(BE) Kritischer Abschnitt SIGNALIS.(BE) SIGNALIS.(BE) SIGNALIS.(BE) a) Serialisierung des Durchlaufs durch kritische Abschnitte Warteschlange von Lokomotiven Ampel ( binäres Element ) Kritischer Abschnitt Bahnhof binäres Element c) Exklusiv nutzbares, nicht entziehbares Betriebsmittel b) Benutzung eines gemeinsamen Schienenstrangs durch mehrere Loks ws2016/17 H.-A. Schindler Folie: 11-35
36 Reader-Writer-Problem (Produzenten-Konsumenten-Schema) Genauer lauten die Koordinationsbedingungenfür die Verwaltung des gemeinsamen Speicherbereichs: 1. Der Bereich sei zu Beginn leer. 2. Der Produzent darf schreiben, solange der Bereich nicht voll ist. 3. Der Konsument darf lesen, solange der Bereich nicht leer ist. 4. Gleichzeitiges Lesen und Schreiben ist verboten. Damit erhalten wir als Blockdiagramm: Produzent Bereich schreiben signalisiere( voll ) warte(bis voll ) Bereich lesen Konsument warte(bis leer ) signalisiere( leer ) ws2016/17 H.-A. Schindler Folie: 11-36
37 In Semaphor-Notation: P(LEER) Bereich schreiben V(VOLL) Produzent Semaphor LEER Binäre Variable bv Anfangszustand: LEER.bv := 1 Semaphor VOLL Binäre Variable bv Anfangszustand: VOLL.bv := 0 Konsument P(VOLL) Bereich lesen V(LEER) ws2016/17 H.-A. Schindler Folie: 11-37
38 Aufgabenstellung (Anregungen) 1. Verwenden Sie Beispielprogramm sema1.c welches eine Gruppe ( Array ) von Semaphoren erzeugt. Wie viele Semaphore enthält das Array? (Warum?) Durch welchen Identifikatorbzw. welchen Schlüssel kann es identifiziert werden? Was passiert bei mehrmaligem Aufruf des gleichen Programms? Wie kann der Wert für den Schlüssel (key) selbst festgelegt werden und wozu wird der Schlüssel verwendet? 2. Lassen Sie jetzt beim flag-parameter die Spezifikation der Zugriffsrechte weg! Was passiert? (Untersuchen Sie die erzeugten Semaphore mit ipcs s auch im Superuser-Modus (sudo i).) Was passiert, wenn nur Zugriffsrechte spezifiziert sind? 3. Beschäftigen Sie sich mit binären Semaphoren. Verwenden Sie dazu das Programmbeispiel sema2.c 4. Das Programm sema3.c demonstriert den gegenseitigen Ausschluss an kritischen Abschnitten. Sehen Sie sich diese Demo an. 5. Löschen Sie alle von Ihnen erzeugten IPC-Strukturen (mit ipcrm bzw. semctl(..) )! ws2016/17 H.-A. Schindler Folie: 11-38
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:
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
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
Betriebssysteme (BTS)
13.Vorlesung Betriebssysteme (BTS) Christian Baun [email protected] Hochschule Mannheim Fakultät für Informatik Institut für Betriebssysteme 31.5.2007 Wiederholung vom letzten Mal Deadlocks und Verhungern
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
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
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 [email protected] http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/
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 [email protected] http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/
2. Prozesssynchronisation
Tafelübung zu BSRvS1 2. Prozesssynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund [email protected] http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 3. UNIX/Linux-Dateisysteme und zugehörige Systemaufrufe und Kommandos (Teil I) Wintersemester 206/7 UNIX/Linux-Dateisystem(e) Systemaufrufe zur Dateiarbeit:
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
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
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
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...
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
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 2. UNIX/Linux-Prozessverwaltung und zugehörige Systemaufrufe Wintersemester 2015/16 2. Die UNIX/LINUX-Prozessverwaltung Aufgaben: 1. Erzeugen neuer Prozesse
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN UNIX/Linux-Interprozesskommunikation, zugehörige Systemaufrufe und Kommandos 12. UNIX/Linux-Sockets Wintersemester 2016/17 UNIX/Linux-IPC-Mechanismen Nachrichtenbasierter
Systemnahe Programmierung in C/C++
Systemnahe Programmierung in C/C++ Interprozesskommunikation (IPC) Knut Stolze [email protected] Lehrstuhl für Datenbanken und Informationssysteme Fakultät für Mathematik und Informatik 2006
6. Nebenläufigkeit: wechselseitiger Ausschluss und Synchronisation
6. Nebenläufigkeit: wechselseitiger Ausschluss und Synchronisation 6.1 Problemdarstellung Relative Ausführungsgeschwindigkeit von Prozessen nicht vorhersagbar Sie ist abhängig von o Aktivitäten anderer
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?...................
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)
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 10. UNIX/Linux: Reaktion auf Fehler Wintersemester 2016/17 Reaktion auf Fehler: Übersicht Systemaufrufe: 1. Rückkehrwert: in den meisten (aber nicht in allen!)
2 UNIX Interprozesskommunikation
Parallelverarbeitung Folie 2-1 2 UNIX Interprozesskommunikation Austausch von Informationen zwischen kooperierenden Prozessen Synchronisation kooperierender Prozesse Kommunikationsmechanismen gemeinsame
Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012
Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)
Dr. Monika Meiler. Inhalt
Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11
Lösung von Übungsblatt 10. (Kommunikation von Prozessen)
Lösung von Übungsblatt 10 Aufgabe 1 (Kommunikation von Prozessen) 1. Was ist bei Interprozesskommunikation über gemeinsame Speichersegmente (Shared Memory) zu beachten? Die Prozesse müssen die Zugriffe
Deklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes
Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!
5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!
5.4 Arrays Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! Feld: Index: 17 3-2 9 0 1 0 1 2 3 4 5 Harald Räcke 114/656
6 ZEIGER UND REFERENZEN - ALLGEMEINES
6 ZEIGER UND REFERENZEN - ALLGEMEINES Leitideen: Zeiger sind Adressen mit zusätzlicher Typinformation über das dort gespeicherte Objekt. Die Vereinbarungssyntax soll der Ausdruckssyntax entsprechen und
Systemprogrammierung I - Aufgaben zur Erlangung der Klausurzulassung für Informatiker und Wirtschaftsinformatiker
Systemprogrammierung I - Aufgaben zur Erlangung der Klausurzulassung für Informatiker und Nachfolgend finden Sie die drei Aufgaben, die Sie als Zulassungsvoraussetzung für die Scheinklausur am 18.7.2001
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
Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()
Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
PIC16 Programmierung in HITECH-C
PIC16 Programmierung in HITECH-C Operatoren: Arithmetische Operatoren - binäre Operatoren + Addition - Subtraktion * Multiplikation / Division % Modulo + - * / sind auf ganzzahlige und reelle Operanden
3A Synchronisation: Weitere Aufgaben
3A Synchronisation: Weitere Aufgaben 3A.1 Sprachunabhängige Anwendungsaufgaben 1. Gegeben ist ein Prozess-System, das über Semaphore synchronisiert wird: Semaphore: SEM1.INIT(0); SEM2.INIT(1) Prozess A:
2. Aufgabenblatt Threads
Fakultät Informatik Institut für Systemarchitektur, Professur für Betriebssysteme Betriebssysteme und Sicherheit, WS 2016/17 2. Aufgabenblatt Threads Geplante Bearbeitungszeit: drei Wochen TEIL A THREADS
2.3 Prozessverwaltung
Realisierung eines Semaphors: Einem Semaphor liegt genau genommen die Datenstruktur Tupel zugrunde Speziell speichert ein Semaphor zwei Informationen: Der Wert des Semaphors (0 oder 1 bei einem binären
Algorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
Praxis der Programmierung
Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen
Repetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
Domänenmodell: Fadenkommunikation und -synchronisation
Domänenmodell: Fadenkommunikation und -synchronisation Alexander Humphreys, Reinhard Rösch, Fabian Scheler 15. Mai 2003 Inhaltsverzeichnis 1 Domänendefinition 1 2 Domänenlexikon 1 3 Konzeptmodelle 4 4
Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
Softwarelösungen: Versuch 4
Softwarelösungen: Versuch 4 Nichtstun in Schleife wird ersetzt durch zeitweilige Zurücknahme der Anforderung, um es anderen Prozessen zu erlauben, die Ressource zu belegen: /* Prozess 0 */ wiederhole flag[0]
7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});
S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht
Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
Programmiersprachen Einführung in C
Programmiersprachen Einführung in C Teil 8: Felder und Zeichenketten Prof. Dr. Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3. Variable und Datentypen
Klausur zum Kurs Betriebssysteme (1802) am 18. September 2010
Fakultät für Mathematik und Informatik Lehrgebiet Kooperative Systeme Prof. Dr. Jörg M. Haake Klausur zum Kurs Betriebssysteme (1802) am 18. September 2010 Klausurort: Vorname Name: Adresse: Matrikelnummer:
Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz
Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss Maren Bennewitz Version 18.12.2013 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung,
2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
Dämon-Prozesse ( deamon )
Prozesse unter UNIX - Prozessarten Interaktive Prozesse Shell-Prozesse arbeiten mit stdin ( Tastatur ) und stdout ( Bildschirm ) Dämon-Prozesse ( deamon ) arbeiten im Hintergrund ohne stdin und stdout
Programmierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
einlesen n > 0? Ausgabe Negative Zahl
1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen
2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
Viel Erfolg bei der Bearbeitung der Aufgaben!
Musterlösung Name:... 1 2 3 4 5 Gesamt Note 12 8 10 15 11 56 Bitte tragen Sie auf dem Deckblatt Ihr Namen und Ihre Matrikelnummer ein und auf allen weiteren Seiten nur noch Ihre Matrikelnummer. Lösungen
Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit ausgeführt werden.
7 Parallelität und Nebenläufigkeit Mehrere Prozessen oder Threads Parallelität Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit
Erzeuger-Verbraucher-Problem
Erzeuger-Verbraucher-Problem Hier: Puffer der Größe 1, Erzeuger, Verbraucher Zwei Semaphore werden eingesetzt, um zwischen Threads "Ereignisse zu melden" Man kann Semaphore auch verwenden, um Ereignisse
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
C für Java-Programmierer
Carsten Vogt C für Java-Programmierer ISBN-10: 3-446-40797-9 ISBN-13: 978-3-446-40797-8 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-40797-8 sowie im
int i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben
Datenfelder (Array) Seite 1 von 7 Bei den bisherigen Programmen wurde für jede verwendete Variable (oder für jedes Objekt) ein eigener Typ und Name vergeben. Die Initialisierung, d.h. die Belegung mit
Klausur Betriebssysteme I
Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme I 9.3.2000 Bitte bearbeiten Sie die Aufgaben soweit wie möglich auf den Aufgabenblättern. Nachname: Matrikelnummer: Vorname: Semester: Bitte beantworten
Grundlagen der Informatik Vorlesungsskript
Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1
Betriebssysteme (BS)
Betriebssysteme (BS) Probeklausur Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund http://ess.cs.uni-dortmund.de/ http://ess.cs.tu-dortmund.de/de/teaching/ss2014/bs/
4.2 Programmiersprache C
4.2.1. Elementare Datentypen (signed) int, unsigned int, (signed) short (int), unsigned short (int), (signed) long (int), unsigned long (int) Elementare Datentypen für ganze Zahlen mit oder ohne Vorzeichen.
Physische Datenstrukturen
Elementare Datentypen Strukturierte Datentypen Zeiger Seite 1 Einfache Datentypen Datentyp char Verwendung: ASCII-Zeichen Wertebereich: alle darstellbaren Zeichen, 8 bit lange Ganzzahlen im Intervall -128
C- Kurs 03 Ausdrücke und Operatoren
C- Kurs 03 Ausdrücke und Operatoren Dipl.- Inf. Jörn Hoffmann [email protected] leipzig.de Universität Leipzig InsDtut für InformaDk Technische InformaDk Ausdrücke Institut für Informatik Ausdrücke
Einführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
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
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
Zeiger (engl. Pointer)
Zeiger (engl. Pointer) Zeiger Ein Zeiger (engl. Pointer) speichert eine Adresse, unter der ein Wert im Speicher des Computers gespeichert werden kann. Eine Variable im Gegensatz speichert einen Wert. Der
Die Programmiersprache C
Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,
Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion
Betriebssysteme Vorlesung im Herbstsemester 2010 Universität Mannheim Kapitel 6: Speicherbasierte Prozessinteraktion Felix C. Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung
Zeiger in C und C++ Zeiger in Java und C/C++
1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,
GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT
User Requirements GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT Softwareentwicklung Praktikum, Übungsbeispiel 1 Gruppe 18 Andreas Hechenblaickner [0430217] Daniela Kejzar [0310129] Andreas Maller [0431289]
Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.
ls [optionen] [namen]: ls zeigt den Inhalt von Verzeichnissen. Sind keine namen angegeben, werden die Dateien im aktuellen Verzeichnis aufgelistet. Sind eine oder mehrere namen angegeben, werden entweder
e) Welche Aussage zu Speicherzuteilungsverfahren ist falsch?
Aufgabe 1: (1) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort
Zeiger, Arrays und Strings in C und C++
Zeiger, Arrays und Strings in C und C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für
Algorithmen implementieren. Implementieren von Algorithmen
Algorithmen implementieren Implementieren von Algorithmen Um Algorithmen ablaufen zu lassen, muss man sie als Programm darstellen (d.h. implementieren) Wie stellt man die algorithmischen Strukturelemente
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
Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute
Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert
Kapitel 2. Einfache Beispielprogramme
Kapitel 2 Einfache Beispielprogramme 2.1 Ausgabe auf dem Bildschirm 2.2 Lokale Variablen, Ausdrücke und Schleifen 2.3 Zahlen von der Tastatur einlesen 2.4 Formatierung bei der Ausgabe 2.5 Zusammenfassung
Typ : void* aktuelle Parameter Pointer von beliebigem Typ
2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben
Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.
Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung
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
Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)
Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern
