w Linuksie, gdy proces prosi o (wirtualny) pamięci z systemu, to po prostu zarejestrowany w VMA (deskryptor wirtualnej pamięci procesu jest), ale strony fizycznej dla każdego wirtualnego nie jest zarezerwowana w czas połączenia. Później, kiedy proces uzyska dostęp do tej strony, zostanie ona zarzucona (dostęp wygeneruje przerwanie Page Fault), a program obsługi PF # przydzieli fizyczną stronę i aktualizuje tabelę stron procesu.stos prefaulting w linux - pojedyncze lub wielokrotne awarie wymagające
Istnieją dwa przypadki: błąd przy czytaniu może przekształcić się odnośnik do strony zerowej (specjalny globalny wstępnie wyzerowany strony), która jest zabezpieczona przed zapisem; i błąd w zapisie (zarówno na stronie zerowej, jak i na wymaganej, ale nie fizycznej stronie) spowoduje fizyczną fizyczną alokację strony.
Na mmaps (i BRK/sbrk, która jest wewnętrznie mmap zbyt) metoda ta jest na stronie; wszystkie obszary mmone są zarejestrowane jako całość w vma (mają adresy początkowy i końcowy). Ale stos jest obsługiwany w inny sposób, ponieważ ma tylko adres początkowy (wyższy na typowej platformie, rośnie na niższe adresy).
Pytanie brzmi:
Kiedy dostępu nowej nieprzydzielone pamięci pobliżu stosu, to dostać PF # i rosnąć. Jak to rośnie, jeśli mam dostęp do strony obok stosu, ale strona, która jest 10 lub 100 stron z dala od stosu?
E.g.
int main() {
int *a = alloca(100); /* some useful data */
int *b = alloca(50*4096); /* skip 49 pages */
int *c = alloca(100);
a[0]=1;
/* no accesses to b - this is untouched hole of 49 pages */
c[0]=1;
}
Czy ten program otrzyma 2 lub 50 prywatnych stron fizycznych przydzielonych do stosu?
Myślę, że może być opłacalne zapytać jądra przeznaczyć dziesiątki fizycznych stron w pojedynczym pagefault następnie zrobić kilkadziesiąt pagefaults przydzielanie strona po stronie (1 przerwania + 1 kontekstowego-switch + proste, cache przyjazne pętli nad N żądań strona alokacji versus N przerwań + N przełączników kontekstowych + alokacji stron N, kiedy kod mm może zostać wyeksmitowany z Icache).
Dzięki za interesujące pytanie. (+1) – NPE