C Tutorium – Shared Memory – Knut Stolze. 2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher –

Slides:



Advertisements
Ähnliche Präsentationen
Ext2. Geschichte Minixerhebliche Beschränkungen extfs ext2erstmals aufhebung aller drängenden Beschränkungen ext3erweiterung um Journaling.
Advertisements

Einführung in die Programmiersprache C/C++
Imperative Programmierung
Vorbereitung: struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp; b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten b bp.
Klassen - Verkettete Liste -
Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
4.5 Virtueller Speicher Problemsituation: Programme und Daten sind zu groß für den verfügbaren Arbeitsspeicher Frühere Lösung Aufspaltung der Programme.
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Beim Start eines Prozesses in Windows NT, 2000 wird a der Programmtext aus der exe-Datei ab der dort angegebenen Adresse gespeichert.
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
C Tutorium – Semaphoren –
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
der Universität Oldenburg
SAP R/3 - Speichermanagement
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Dynamischer Speicher und Struktur
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Tag 2 Look-up-Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung Quelle: 3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander.
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
1 Linux Paging, Caching und Swapping. 1 Vortragsstruktur Paging – Das Virtuelle Speichermodell –Die Page Table im Detail –Page Allocation und Page Deallocation.
DbjFileManager Paul Fruntzek Michael Stanek. Überblick Unterste Ebene im Schichtenmodell Schnittstelle zum BS (Low-Level) Aufgabenbereich: Persistente.
Vorbereitung: struct SX { int x; struct SX *p; } *px, *ph; px: Zeiger auf Listen- anfang ph: Hilfszeiger px = NULL; px zeigt auf leere Liste px.
EDV1 - Komplexe Datentypen
Einführung in Visual C++
Arrays,Strings&Pointer in C/C++
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
Systeme 1 Kapitel 4 Prozesse WS 2009/10.
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Eine Implementierung einer effiziente externe geordnete (!) lineare Liste Operationen: Search(x) Insert(x) Delete(x)
Einführung in die Programmierung
Dateisysteme Marcel Waldvogel. Marcel Waldvogel, IBM Zurich Research Laboratory, Universität Konstanz, , 2 Dateisysteme Was ist eine Datei?
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 4
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
VP1 VP2 VP3 PP1.1 PP2.1 PP2.2 PP1.2 PP2.3 PP1.3 MMU VP1 VP2 VP3 PP1 PP4 PP6 MMU-Konfiguration für Prozess P1 Virtual Memory von P1 Physical Memory.
Bs Gemeinsame Datensegmente am Beispiel Solaris [Beachte: Unix/Linux setzen keine Hardware-Segmentierung voraus und sprechen daher statt von.
Arduino Kurs Abend 2.
Interprozess- kommunikation (IPC)
1 Projekt1: Prozesse unter Unix Aufgabenstellung 3: Quicksort.
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Vs Objektpufferung (caching) = dynamische, ad-hoc-Replikation einer Primärkopie: Zugriffswilliger beschafft sich temporär eine lokale Kopie cache.
C Tutorium – Debugging & Tracing – Knut Stolze. 2 Agenda Debugging & Debugger Tracing.
Datenbanksystementwicklung – Systemarchitektur & Prozessmodell – Knut Stolze
Übung Betriebssysteme, Uni Innsbruck 1 Projekt1: Prozesse unter Unix Teil II Prozesse / Systemaufrufe Fehlerbehandlung.
C Tutorium – Memory Management – Knut Stolze. 2 Agenda Einführung in die Speicherverwaltung Stack vs. Heap Malloc Free Sizeof Tipps/Hinweise.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.
Programmieren in C Wie speichert C
Durchschnitt (verbal)
UNIX Portability Semaphore
 Präsentation transkript:

C Tutorium – Shared Memory – Knut Stolze

2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher – Schnellste Form der Inter-Prozess- Kommunikation (IPC) Shared Memory Segment wird in Adressbereich jedes einzelnen (verbundenen) Prozesses abgebildet

3 Shared Memory Hauptspeicher Addressraum Prozess 1 Addressraum Prozess 2 Shared Memory Segment Prozess 1 Prozess 2

4 Gotchas Zeiger (Pointer) sind Werte, die Adressen zu anderen Daten beinhalten Shared Memory Segmente können an den unterschiedlichen Adressen in die Adressräume der einzelnen Prozesse abgebildet werden  Im Shared Memory darf kein Zeiger hinterlegt werden!!

5 Erzeugen eines SHM Segments Ein Prozess legt Segment an int shmget(key, size, flags) – key: Schlüssel für das Segment; üblicherweise mittels “ftok” generiert – size: Größe des Segments in Bytes Vergleichbar mit Größe bei “malloc” – flags: IPC_CREAT – Segment erzeugen IPC_EXCL – zu erzeugendes Segment darf noch nicht existieren; sonst Fehler Zugriffsrechte (wie bei Dateien) – Ergebnis: ID des Segments (oder –1 bei Fehler) Nicht gleich dem “key”!

6 shmget Es wird keine Verbindung zum SHM hergestellt, d.h. das Segment wird nicht in den aktuellen Prozessraum abgebildet Windows: – SHM Segment existiert nur so lange, wie der Prozess lebt, der das Segment erzeugt hat

7 ftok Generiere Schlüssel für “shmget”, “msgget” oder “semget” key_t ftok(file, proj_id) – file: Existierende Datei (inode kann herangezogen werden) – proj_id: Identifikator für aktuelles Projekt/Programm Schlüssel ist immer identisch für ein (file, proj_id)-Tupel – Prozessübergreifend – Andere Datei/andere “proj_id” gibt i.A. anderen Schlüssel

8 Verbinden zu einem existierenden SHM Segment Jeder Prozess, der auf SHM Segment zugreifen will, muss sich mit dem Segment verbinden void *shmat(id, addr, flags) – id: ID des Shared Memory Segments (von shmget) – addr: Zieladresse des abgebildeten Segments Sollte immer NULL sein! – flags: SHM_RDONLY – nur lesender Zugriff möglich SHM_RND – abrunden einer gegebenen Adresse in “addr” zum nächsten Seitenanfang

9 shmat Segment wird in den eigenen Adressraum abgebildet – Ähnlich zu “malloc” Nach “shmat” kann mit dem Segment wie mit jedem anderen Speicherblock gearbeitet werden Bei Fehler wird Zeiger mit Wert –1 zurückgegeben ptr = shmat(…); if ((char *)ptr == (char *)(-1)) { … /* Fehler */ … }

10 Verbindung zum SHM Segment trennen Aktueller Prozess beendet Verbindung zum Shared Memory Segment int shmdt(addr) – addr: Zeiger zum Beginn des Segments Ergebnis von “shmat” – Vergleichbar zu “free” Zugriff auf Speicher des SHM Segments darf nach “shmdt” nicht mehr erfolgen! Segment wird nicht zerstört

11 Segment zerstören Segment wird zum Zerstören markiert int shmctl(id, cmd, buffer) – id: ID des Shared Memory Segments Ergebnis von “shmget” – cmd: Operation auf dem Segment IPC_RMID – Segment zerstören IPC_STAT – Informationen über das Segment in “buffer” kopieren IPC_SET – Setze Zugriffsrechte für Segment

12 shmctl Betriebssystem zestört Segment, wenn letzte Verbindung aller Prozesse getrennt wird Aktueller Prozess kann immer noch Verbindung haben – Beispiel: Start von X-Server 1. id = shmget(…, IPC_CREAT | IPC_EXCL) 2. segment = shmat(id, …) 3. shmctl(id, IPC_RMID, NULL); 4. … 5. shmdt(segment, …)

13 Verwendung von SHM Segment ist ein zusammenhängender Speicherbereich – Muss von Anwendung(en) selbständig organisiert und strukturiert werden struct Entry { int x, y; }; ptr = shmat(…); int *count = (int *)ptr; struct Entry *entries = (struct entry *)(count + 1); count entry…

14 Verwendung von SHM (2) Konkurrierender Zugriff auf Segment muss synchronisiert werden  Semaphoren Nur bei Nutzung mehrerer Prozesse – Multi-Threading braucht keinen Shared Memory

15 Kommandozeile (Unix) Liste alle IPC-Resources (Message Queues, Semaphore, Shared Memors Segmente) $ ipcs Lösche eine IPC-Resource $ ipcrm Beispiel um alle Resources des aktuellen Nutzers zu löschen: $ ipcs | grep `user` | awk ‘{ print “ipcrm –”$1,$2 } | sh -e