Załóżmy, że procesor jest 32-bitowy. Tak więc każdy proces działający na tym procesorze otrzymuje 2 ^ 32 bity pamięci logicznej.
- Jeśli w systemie jest n procesów, czy na dysku jest przydzielonych n * 2 ^ 32 bity? gdzie to jest przydzielone? czy jest w przestrzeni wymiany?
Jeśli rozmiar strony to 4KB, całkowita liczba stron wynosi 2 ^ 32/2 ^ 12 = 2 ^ 20. czy suma stron znajduje się na dysku, a pamięć RAM dla tego procesu wynosi 2 ^ 20? jeśli nie, ile z tych 2 ^ 20 jest przydzielonych? 3)
#include <stdio.h> int main(){ printf("Hello World"); }
czy ten prosty proces zajmuje również 2 ^ 20 stron na RAM + Disk?
#include <stdio.h> int main(){ int x; scanf("%d",&x); while(x!=0){ malloc(sizeof(int)); x--; } }
Ile stron jest przydzielonych na dysku + RAM początkowo w momencie ładowania? czy jest to również 2 ^ 20? jeśli nie, to jak rośnie wraz z każdym wywołaniem malloc?
memory
virtual-memory
paging
veerendra
źródło
źródło
Odpowiedzi:
W
OS
przydziela wiele wirtualnych stron jako niezbędne do map sekcje zdefiniowane w plikach wykonywalnych.Jeśli w innym procesie są już uruchomione te same pliki wykonywalne, system operacyjny ponownie wykorzystuje strony tylko do odczytu, a jeśli system operacyjny obsługuje funkcję „kopiuj przy zapisie”, to wykorzystuje ponownie zmapowane niezmienione strony do odczytu i zapisu dla nowego procesu. W przypadku stosów, stert itp. Zarezerwuje wirtualną przestrzeń adresową, ale strony zostaną przydzielone na żądanie, tj. Gdy stos wzrośnie poza już zmapowane miejsce, system operacyjny przydzieli więcej stron
Miejsce w pliku wymiany jest przydzielane, gdy system decyduje się zamienić niektóre zmienione strony procesu z pamięci RAM. Jest to jednak optymalna strategia, rzeczywiste zachowanie może się różnić w zależności od systemu operacyjnego.
źródło