W grę wchodzi kilka warstw, które wpływają na odpowiedź.
Jeśli przyjmiesz nowoczesny system operacyjny pamięci wirtualnej, nie będziesz w stanie zobaczyć pozostałości danych z innych procesów na przydzielanych stronach.
Kiedy proces jest ładowany po raz pierwszy, tablica stron jest ładowana i potencjalnie ramki rzeczywistej pamięci są przydzielane do tych stron. Tabela stron lub tabela uzupełniająca zawiera przynajmniej mapę całej pamięci, którą proces może przydzielić. Tutaj również ustawia się początkową przerwę procesu, o której mowa powyżej.
Podczas gdy malloc () może, jeśli proces jest dozwolony, zmienić przerwanie procesu, dodając więcej stron do tabeli strony procesów (strony dodatkowej) w celu spełnienia żądania, miejscem, w którym jeden proces może „uzyskać inny”, jest dane dolna warstwa pamięci rzeczywistej.
W obu tych scenariuszach nowoczesny system operacyjny korzystający ze stronicowania na żądanie lub leniwego przydzielania jeszcze nie przydziela pamięci fizycznej (ramek). System operacyjny po prostu „robi notatki” na temat tego, która pamięć wirtualna dla tego procesu jest uważana za prawidłową. Rzeczywista pamięć jest przydzielana tylko w razie potrzeby.
Pamięć fizyczna lub ramki są przydzielane do procesu, gdy strona wirtualna jest realizowana i odwzorowywana na tabelę stron procesów W tym miejscu istnieje możliwość ujawnienia danych. Dzieje się tak podczas błędu strony. Narażenie wynika z faktu, że poprzedni proces mógł używać tej samej ramki, a jego dane zostały porzucone lub zamienione, aby zrobić miejsce dla bieżącego żądania pamięci fizycznej. System operacyjny musi zachować ostrożność, aby upewnić się, że dane procesów żądających zostały odpowiednio zamienione lub ramka została wyczyszczona (wyzerowana) przed wznowieniem procesu. Jest to również wspomniane powyżej jako „stary, ale rozwiązany” problem.
To sprawia, że nie ma znaczenia, czy pamięć innych procesów została „zwolniona”, czy nie. Kolejna „zwolniona” pamięć procesów nadal znajduje się na stronach przypisanych do tego procesu i zwykle nie jest odwzorowywana aż do zakończenia procesu, ponieważ zostaną one po prostu zamienione, gdy pamięć się wyczerpie lub zostaną w inny sposób eksmitowane. malloc () i free () zarządzają pamięcią wirtualną przypisaną do procesu na poziomie (użytkownika).
W twoim pytaniu twój proces nadal żąda coraz więcej pamięci, teoretycznie, wypychając wszystkie inne procesy z pamięci. W rzeczywistości istnieją strategie alokacji ramek - globalne i lokalne - które również mogą mieć wpływ na odpowiedź. Jest równie prawdopodobne, że proces wymusi zwolnienie pamięci z własnych stron, zanim będzie możliwe przekroczenie systemu operacyjnego i wszystkich innych procesów. Chociaż wykracza to poza początkowe pytanie.
Wszystko to jest dyskusyjne w systemie takim jak MS-DOS. MS-DOS (i inne, prostsze systemy) nie używają pamięci wirtualnej (same w sobie) i można łatwo szturchać i naciskać na inne „procesy” danych.
Dobrymi odniesieniami, które mogą być łatwiejsze do zrozumienia niż kod źródłowy Linuksa, byłby dobry podręcznik dotyczący systemów operacyjnych, Koncepcje systemów operacyjnych Silberscatz, Gavin i Gange lub Projektowanie systemów operacyjnych Andrew Tanenbaum. Również coś takiego jak Nachos z Berkeley lub Pintos ze Stanford to małe systemy operacyjne zbudowane do nauki i zawierające w sobie te same pomysły.