Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Bs-5.4.31 5.4.3 Gemeinsame Datensegmente am Beispiel Solaris [Beachte: Unix/Linux setzen keine Hardware-Segmentierung voraus und sprechen daher statt von.

Ähnliche Präsentationen


Präsentation zum Thema: "Bs-5.4.31 5.4.3 Gemeinsame Datensegmente am Beispiel Solaris [Beachte: Unix/Linux setzen keine Hardware-Segmentierung voraus und sprechen daher statt von."—  Präsentation transkript:

1 bs Gemeinsame Datensegmente am Beispiel Solaris [Beachte: Unix/Linux setzen keine Hardware-Segmentierung voraus und sprechen daher statt von Segmenten von Regionen (Code, statische Daten, Keller,...).] Zusätzlich zu den drei Standard-Segmenten kann ein Prozess 1. neue Segmente erzeugen, 2. fremde Segmente in seinen Adressraum einblenden 3. und wieder ausblenden.

2 bs Systemaufrufe ( shm = shared memory): shmid = shmget(key, size, flags) Segment key der Größe size erzeugen und/oder – abhängig von flags – Segment key öffnen, d.h. einen geschützten Verweis dafür erzeugen, der mit shmid identifiziert wird; die gewünschten Zugriffsrechte werden über flags spezifiziert (ähnlich wie bei Dateien). Fehler: EACCES u.a.

3 bs addr = shmat(shmid, addr, flags) (attach) Segment shmid an einer freien Stelle in den Adressraum einblenden und seine Anfangsadresse liefern; Rechte bzgl. shmctl (s.u.) gemäß flags setzen. shmdt(addr) (detach) blendet das bei addr beginnende Segment aus. Ein nicht mehr benötigtes Segment muss explizit gelöscht werden (s.u.) !

4 bs shmctl(shmid, cmd, buffer) auf Segment shmid die Operation cmd ausführen, z.B.- Segment löschen - Daten abfragen - Rechte ändern - u.a. Verwandte Technik: memory-mapped files, d.h. Dateien in Adressraum einblenden ( 6)

5 bs Imlementierung: shmget :neuer Eintrag in einer um key erweiterten Segmenttabelle (5.4.2 )5.4.2 shmat :neuer Eintrag in Segmentliste des Prozesses oder aber – so in Solaris – mit separater Shared Memory Table:

6 bs rs w base lengthd backupBase r c Arbeitsspeicher Hintergrundspeicher Segmentlisten Segmenttabelle Segmente resident auslagerbar (aktiver Prozess) x (shmget) (shmat) shmget Shared Memory Table key region attr (shmget) shmid =

7 bs Umlagerung segmentierter Prozesse ! Beachte:Umlagerung verändert nicht den Adressraum des Prozesses – wenngleich die Deskriptoren marginal modifiziert werden. Einlagern Auslagern Erweitern

8 bs Einlagern – falls Speicherbelegung es erlaubt: 0. Bereits eingelagerte Segmente bleiben unberücksichtigt, ebenso die in Einlagerung befindlichen (c-Bit). 1. Segmentbereiche im Arbeitsspeicher reservieren. 2. Für jedes Segment base und c-Bit setzen, Segment einlagern, c-Bit löschen. 3.Prozess auswahlfähig machen (Operation start ).

9 bs Auslagern: 0.Für andere Prozesse noch benötigte gemeinsame Segmente bleiben unberücksichtigt. 1.Prozess stoppen (Operation stop ). 2.Für jedes Segment: base löschen; wenn dirty, dirty löschen, Segment auslagern; Speicherbereich freigeben.

10 bs Erweitern mit vorgezogener Auslagerung: 1.Neuen Segmentbereich im Auslagerungsbereich belegen. 2.Deskriptor in der Segmenttabelle erzeugen bzw. ändern. 3.Prozess auslagern. Dabei wird im Fall der Segment- erweiterung der alte length-Wert zugrundegelegt. ( Verschiedene Effizienzverbesserungen sind möglich )


Herunterladen ppt "Bs-5.4.31 5.4.3 Gemeinsame Datensegmente am Beispiel Solaris [Beachte: Unix/Linux setzen keine Hardware-Segmentierung voraus und sprechen daher statt von."

Ähnliche Präsentationen


Google-Anzeigen