2011-11-07 7 views
8

Podczas gdy studiowałem o udostępnionej biblioteki czytałem oświadczeniewspólną przestrzeń adresową biblioteki

Chociaż kod z udostępnionej biblioteki dzielone między wieloma procesów, jego zmienne nie są. Każdy proces korzystający z biblioteki ma własne kopie globalnych i statycznych zmiennych zdefiniowanych w bibliotece jako .

Mam tylko kilka wątpliwości.

  1. Czy część kodu każdego procesu znajduje się w oddzielnej przestrzeni adresowej?
  2. Czy część kodu biblioteki dzielonej znajduje się w jakiejś globalnej (unikalnej) przestrzeni adresowej.

Jestem tylko przystawką, więc proszę pomóżcie mi zrozumieć.

Dzięki!

+0

To "proces", a nie "postęp". –

+2

Sprawdź ten link: http: //duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory. Bardzo dobrze wyjaśnia program w pamięci. Widać, że biblioteki współdzielone są zwykle odwzorowywane w pamięci wirtualnej przestrzeni adresowej procesu –

Odpowiedz

17

Biblioteki współdzielone są ładowane do procesu przez odwzorowanie pamięci na plik do części przestrzeni adresowej procesu. Gdy wiele procesów ładuje tę samą bibliotekę, system operacyjny po prostu pozwala im współużytkować tę samą fizyczną pamięć RAM.

Fragmenty biblioteki, które można modyfikować, takie jak statyczne globale, są zwykle ładowane w trybie kopiowania przy zapisie, więc podczas próby zapisu występuje błąd strony, jądro reaguje, kopiując tę ​​stronę. do innej fizycznej strony pamięci RAM (tylko dla tego procesu), mapowanie przekierowane na nową stronę, a następnie operacja zapisu zostanie zakończona.

Aby odpowiedzieć na konkretne punkty:

  1. Wszystkie procesy mają swoją własną przestrzeń adresową. Dzielenie się pamięcią fizyczną między procesami jest niewidoczne dla każdego procesu (chyba że robią to celowo za pośrednictwem interfejsu API pamięci dzielonej).
  2. Wszystkie dane i kod znajdują się w fizycznej pamięci RAM, która jest rodzajem przestrzeni adresowej. Większość adresów, które prawdopodobnie widzisz, to jednak adresy pamięci wirtualnej należące do przestrzeni adresowej jednego lub drugiego procesu, nawet jeśli ten "proces" jest jądrem.
Powiązane problemy