bs-5.4.3

 Documents

 56 views
of 10
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Description
5.4.3 Gemeinsame Datensegmente am Beispiel Solaris [Beachte: Unix/Linux setzen keine Hardware-Segmentierung voraus und sprechen daher statt von „Segmenten“…
Share
Transcript
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. bs-5.4.3 1 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. bs-5.4.3 2 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.) ! bs-5.4.3 3 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) bs-5.4.3 4 Imlementierung: shmget : neuer Eintrag in einer um key erweiterten Segmenttabelle (5.4.2) shmat : neuer Eintrag in Segmentliste des Prozesses oder aber – so in Solaris – mit separater Shared Memory Table: bs-5.4.3 5 Arbeitsspeicher 0 1 rs w Segmentlisten 2 shmid = 2 3 ... Shared Memory Table (shmat) key region attr (aktiver Prozess) 0 Segmenttabelle 1 2 base length d backupBase r c 3 4 (shmget) . . . . . . (shmget) resident auslagerbar Hintergrundspeicher x Segmente shmget ... bs-5.4.3 6 5.4.4 Umlagerung segmentierter Prozesse ! Beachte: Umlagerung verändert nicht den Adressraum des Prozesses – wenngleich die Deskriptoren marginal modifiziert werden.  Einlagern  Auslagern  Erweitern bs-5.4.3 7  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 ). bs-5.4.3 8  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. bs-5.4.3 9  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 ) bs-5.4.3 10
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks