Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Clarimond Almendinger Geändert vor über 10 Jahren
1
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 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-5.4.32 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-5.4.33 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-5.4.34 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-5.4.35 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-5.4.36......... 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) 0123401234 shmid = 2 01230123
7
bs-5.4.37 5.4.4 Umlagerung segmentierter Prozesse ! Beachte:Umlagerung verändert nicht den Adressraum des Prozesses – wenngleich die Deskriptoren marginal modifiziert werden. Einlagern Auslagern Erweitern
8
bs-5.4.38 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-5.4.39 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-5.4.310 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 )
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.