Skąd jądro wie, które strony w wirtualnej przestrzeni adresowej odpowiadają wymienianej ramce strony fizycznej?

Rozważmy następującą sytuację: jądro wyczerpało fizyczną pamięć RAM i musi zamienić stronę. Wybiera najmniej ostatnio używaną ramkę strony i chce zamienić jej zawartość na dysk i przydzielić tę ramkę do innego procesu.

Martwi mnie to, że ta ramka strony została już zmapowana na, ogólnie mówiąc, kilka (identycznych) stron kilku procesów. Jądro musi w jakiś sposób znaleźć wszystkie te procesy i oznaczyć stronę jako zamienioną. Jak to realizuje?

Dziękuję Ci.

EDYCJA: Ilustracje do pytania:

Przed wymianą procesów 1 i 2 miały wspólną stronę 1, która znajdowała się w ramce pamięci fizycznej 1:

Teraz pamięć w systemie jest wyczerpana, a jądro przydziela pamięć dla procesu 3, wymieniając stronę 1 z ramki 1 i zastępując ją stroną 2. Aby to zrobić, musi

1) znajdź wszystkie procesy, odnosząc się do strony 1 (w naszym przypadku proces 1 i proces 2)

2) zmodyfikuj ich wpisy w tabeli stron, ustawiając bit „Present” na 0 i ustawiając lokalizację Page 1 w Swap

Więc nie rozumiem, jak wykonywany jest krok 1. Kernel nie może po prostu iteracyjnie patrzeć na tabele stron każdego procesu w celu znalezienia wpisu do tablicy stron, wskazującego na ramkę 1. Powinno być jakieś odwrotne odwzorowanie od ramek strony do wpisów tabeli stron.

ODPOWIEDŹ TO:

„Najważniejszą i ważną zmianą w zarządzaniu tabelami stron jest wprowadzenie odwrotnego mapowania (rmap). Odwołanie się do niego jako„ rmap ”jest celowe, ponieważ jest powszechnym użyciem„ akronimu ”i nie należy go mylić z -rmap drzewo opracowane przez Rika van Riela, który ma znacznie więcej zmian w magazynie VM niż tylko odwrotne mapowanie.

W pojedynczym zdaniu rmap umożliwia zlokalizowanie wszystkich PTE, które mapują konkretną stronę, podając tylko stronę struct. W 2.4 jedynym sposobem znalezienia wszystkich PTE, które odwzorowują udostępnioną stronę, takich jak biblioteka współdzielona z pamięcią, jest liniowe przeszukiwanie wszystkich tabel stron należących do wszystkich procesów. Jest to o wiele za drogie i Linux próbuje uniknąć tego problemu za pomocą pamięci podręcznej wymiany (patrz Rozdział 11.4). Oznacza to, że z wieloma udostępnionymi stronami Linux może być zmuszony do wymiany całych procesów bez względu na wiek strony i wzorce użytkowania. 2.6 zamiast tego ma łańcuch PTE powiązany z każdą stroną struct, którą można przejść, aby usunąć stronę ze wszystkich tabel stron, które się do niej odwołują. W ten sposób strony w LRU mogą być wymieniane w inteligentny sposób bez uciekania się do wymiany całych procesów. ”

zZrozumienie zarządzania pamięcią Linuxa, „co nowego w Linuksie 2.6”

questionAnswers(1)

yourAnswerToTheQuestion