2013-06-29 11 views

Odpowiedz

3

Zasadniczo to, do kogo programista wywołuje pamięć programistyczną, jest w rzeczywistości tylko przestrzenią adresową. A więc sterty, stos, a nawet segmenty programu to tylko zestawy adresów. Nasze programy, w tym te w węźle, odczytują i zapisują dane za pomocą tych adresów. Nazywamy takie rzeczy jak malloc "menedżerem pamięci", ale tak naprawdę powinno być "menedżerem adresów". Odrębny system "pamięci wirtualnej" określa, czy te zestawy adresów są mapowane do pamięci RAM, dysku lub w ogóle. Zestaw rezydentny to adresy obsługiwane przez pamięć RAM. Rozmiar zestawu rezydentnego jest tym, jak duży jest ten zestaw.

7

Proces otrzymuje pamięć do uruchomienia przez system operacyjny. W nowoczesnych systemach 32- i 64-bitowych ta przestrzeń pamięci wygląda jak szeroko otwarte pole wszystkich możliwych adresów pamięci, którymi można się zająć. W rzeczywistości system operacyjny "kłamie" do procesu i często może poprzeć to zobowiązanie tylko częścią pamięci, którą potencjalnie może zająć się ten proces. Reszta jest "wirtualna".

Ponieważ procesor może uruchamiać tylko dane i kod w pamięci RAM, system operacyjny współpracuje z procesorem, aby śledzić, jaka pamięć jest używana w pamięci RAM i co jest zapisywane w specjalnym pliku na dysku wirtualna pamięć RAM (tj. plik strony/plik wymiany). To, co jest w pamięci RAM, nazywa się "rezydentnym" lub "roboczym" zestawem.

Ważne jest, aby znać się jako programista, ponieważ czas potrzebny na uzyskanie dostępu do pamięci, która jest już w pamięci RAM, jest o wiele rzędów wielkości szybsza niż w przypadku, gdy system operacyjny musi najpierw załadować pamięć z dysku do pamięci RAM. Projektowanie programów utrzymujących krytyczne dane rezydentne ma wyższą charakterystykę wydajności niż programy, które nie mają nic wspólnego z przydzielaniem i dostępem do pamięci.

Stuła jest partycjonowaniem szeroko otwartej pamięci, którą OS przedstawia procesowi, zorganizowanemu w data structure bearing the same name. Proces wykorzystuje tę organizację w celu uzyskania dostępu (i śledzenia do późniejszego wydania) tylko niewielkich porcji na raz. Na przykład, jeśli proces chce przechowywać tablicę liczb całkowitych, potrzebuje kawałka pamięci z taką liczbą bajtów, ile jest elementów razy wielkości liczby całkowitej.

Partycjonowanie jest ponad to, co OS robi z zamianą. Uzyskuję dostęp do sterty, aby przechowywać alokacje pamięci dla moich obiektów i struktur danych w czasie wykonywania, ale alokacja sterty nadal istnieje w pamięci, którą system operacyjny dał mi, którą ogląda pod względem 4096 bajtowych "stron", które można przenieść iz powrotem z dysku.

Stos to kolejna specjalna struktura danych, którą system operacyjny daje procesowi, ale różni się tym, że pobiera cały stos naraz, a ponieważ proces umieszcza elementy na stosie w sekwencji, zwiększa (lub zmniejsza) specjalny wskaźnik (zwykle specjalny rejestr CPU), aby śledzić, gdzie znajduje się w tym stosie. Na wyższym poziomie każdy wątek śledzi stos i gdzie znajduje się wskaźnik w tym stosie. Zmienne lokalne, parametry funkcji i wskaźniki powrotu są tutaj przechowywane, a wskaźnik jest zwiększany i zmniejszany w tej pamięci, gdy proces jest wykonywany w celu śledzenia tych rzeczy.

Powiązane problemy