Pamięć współdzielona, pytanka

0

Cześć :)
Tak się zastanawiam:
Chcę zastosować komunikację międzyprocesową przy użyciu tak zwanej Shared Memory. Wiem o istnieniu Mapped Memory, ale najpierw chcę zastosować Shared Memory.
I w istocie polega to w uproszczeniu, że jeden proces prosi o taką pamięć kernel. I tej pamięci przypisywany jest pewien ID wprowadzany przez proces 1.
Teraz jeżeli proces 2 chce tam namieszać, to musi się do niego dołączyć po znanmy ID.

  1. Czy to oznacza, że znając ID pamięci współdzielonej możemy bez problemu się podłączyć?
  2. Jak się ma tu kwestie bezpieczeństwa? Przecież nie jest problem dowiedzieć się ID jakiejś pamięci współdzielonej działającej, podpiąć się pod nią i zamazać, czyli mam tu na myśli utrudnienie pracy jakimś innym procesom.
  3. Jak taka pamięć jest organizowana przez kernel. Jak wiadomo, każdy proces ma swoją przestrzeń adresową i dla niej określoną tabelę stron. Teraz w której tabeli lądueje taki kawałek współdzielonej pamięci?
0
  1. Tak.
  2. Ale po co ktoś miałby tak robić? o_O Jeśli zaś pytasz o przypadkowe psucie, to stosuje się tu standardowe rozwiązania związane z wielodostępem w środowisko wieloprocesowym / współbieznym / równoległym -> mutexy, semafory itd.
  3. To chyba zalezy już od konkretnej implementacji, różne OS będą to robić w różny sposób.
0

Ad. 3. Nie wiem czy zauważyłeś, ale w tagach jest linux. Zatem zależy mi na odpowiedzi dt. linuxa. Jakoś w odpowiedzi na 1 i 2 pytanie nie przeszkadzało Ci, że 'to zależy od implementacji'. Czego nie powiesz wprost, że po prostu nie wiesz?

  1. Ale po co ktoś miałby tak robić? o_O Jeśli zaś pytasz o przypadkowe psucie, to stosuje się tu standardowe rozwiązania związane z wielodostępem w środowisko wieloprocesowym / współbieznym / równoległym -> mutexy, semafory itd.

No ale Ty nie odpowiedziałeś na pytanie o_O?
Pytanie wcale nie dotyczyło semaforów ani przetwarzania współbieżnego.

Mam do Ciebie prośbę. Jeżeli nie wiesz to na siłę nie odpowiadaj, bo to bez sensu.

0

Nie wiem czy zauważyłeś, ale w tagach jest linux. Zatem zależy mi na odpowiedzi dt. linuxa. Jakoś w odpowiedzi na 1 i 2 pytanie nie przeszkadzało Ci, że 'to zależy od implementacji'

Gdybyś poświęcił 3 minuty na próbę samodzielnego zgłębienia tematu to wiedziałbyś, że istnieją dla systemów unixowych 2 standardy więc twoje pytanie nie jest zbyt konkretne. Odpowiedzi na 1 i 2 pytanie nie były zależne od implementacji bo w obu zachowuje się to tak samo.

Pytanie wcale nie dotyczyło semaforów ani przetwarzania współbieżnego.

To ja nie do końca rozumiem czego dotyczyło. Tego czy można napisać malware który będzie mieszał w innych aplikacjach poprzez podpinanie się do ich pamięci współdzielonej? Można. Można też mieszać w aplikacjach bez pamięci współdzielonej, wiec nie do końca rozumiem twoje zastrzeżenia.

Ale wracając do twojego pytania numer 3: nie bierzesz chyba pod uwagę faktu istnienia wirtualnej przestrzeni adresowej. To gdzie fizycznie w tabeli stron coś się znajduje nijak się ma do tego jak widzi to dany proces. Dla Systemu V (możliwe że dla POSIX też) te same (fizycznie) strony będą widziane w obu procesach jako część ich wirtualnej przestrzeni adresowej. Każdy będzie widział tą pamięć jako "swoją".

1 użytkowników online, w tym zalogowanych: 0, gości: 1