Wiktor S. napisał(a):
> Możesz rozwinąć? Gdzie konkretnie i kiedy coś jest swapowane w inne
> miejsce.
Windows NT - jak jego daleki przodek VMS i jak wszystkie w
zasadzie nowoczesne systemy operacyjne - ma u podstaw działania
mechanizm odwzorowywania plików w pamięci wirtualnej. Przestrzeń
adresowa procesu jest podzielona na sekcje (segmenty (*) ), a te
-- na strony. Każda z sekcji odpowiada jakiemuś plikowi i jest
jego odwzorowaniem (anonimowe strony pamięci są odwzorowywane
z pliku wymiany -- nawet, jeżeli ten nie istnieje lub jest zbyt
mały).
W efekcie każda operacja na pliku jest operacją stronicowania,
a każda strona pamięci składająca się na plik podlega wymiataniu.
Na przykład jeżeli uruchomisz EXEca, to sam plik EXE, zależne
pliki DLL, pliki z danymi oraz obszar stosu i sterty zostaną
odwzorowane w pamięci. Strony pamięci z plików będą ładowane
(jak ze swapa!) w miarę zapotrzebowania. Teraz jeżeli np. pamięci
zacznie być mało, strony pamięci składające się na EXEca dzy DLLe
mogą zostać usunięte z RAMu (bez zapisywania gdziekolwiek).
Gdy będą potrzebne znów -- zostaną załadowane (znów jak ze swapa!)
z odpowiadających im plików.
Jeszcze bliżej idei działania swapa są zwykłe pliki z danymi.
Gdy bowiem jest taka potrzeba, system zapisuje do nich zmienione
dane obecne w pamięci i usuwa te strony z pamięci. Gdy strona
znów będzie potrzebna, zostanie załadowana na nowo. A więc o
ile w przypadku plików wykonywalnych dane są tylko swapowane
*do* pamięci (page-in), w przypadku plików danych następuje
swapowanie w obu kierunkach (page-in i page-out).
Jak już pisałem, plik wymiany obsługuje jedynie anonimowe strony
pamięci, a więc strony, za którymi nie stoi żaden plik fizyczny.
Są to stos, sterta i dynamicznie alokowane bloki pamięci. Plik
wymiany stanowi zatem nie tak duży element systemu pamięci
wirtualnej i nie decydujące źródło swapowania -- poza sytuacjami,
gdy używane oprogramowanie alokuje naprawdę dużo danych.
Przyspieszenie wynikające z usunięcia pliku wymiany wynika
tak naprawdę z ograniczenia ruchów głowicy, system bowiem
zamiast swapowania do kilku plików *i* do pliku wymiany
musi swapować tylko do kilki plików. Podobny zysk wydajnoś-
ciowy daje np. przeniesienie swapa na osobny dysk twardy,
bez konieczności rezygnowania z niego.
Co do przyczyn nadmiernego swapowania, wymienić należy dwie
najważniejsze: zbyt duże rozmiary programów i nieumiejętność
programistów. Pierwsze nie wymaga komentarza. Drugie skutkuje:
a) brakiem informacji zwrotnej dla systemu jak duży powinien
być zestaw roboczy aplikacji, co ograniczyłoby swapowanie
dużych programów,
b) otwieranie plików z niewłaściwymi flagami, co powoduje
rozrost bufora cache odwzorowującego pliki czytane
w sposób klasyczny i w efekcie wymusza wyswapowywanie
innych plików odwzorowanych w pamięci oraz stron anoni-
mowych.
Polecam dodatkowo moje artykuły na powyższe tematy:
http://www.grush.one.pl/article.php?id=ram
http://www.grush.one.pl/article.php?id=gigabajty
http://www.grush.one.pl/article.php?id=fileflags
PS. Fajny post mi wyszedł, chyba wrzucę go po drobnych zmianach
na bloga ;)
(*) Segmenty w sensie logicznym. Mechanizm segmentacji procesora,
nawet jeżeli obecny, jest blokowany i nie jest używany.
-- |""""""""""""""""""""""""""""""""""""""""""""""""""""""""""| | Radosław Sokół | http://www.grush.one.pl/ | | | Administrator, Politechnika Śląska | \................... Microsoft MVP ......................../Received on Wed Jan 31 08:35:07 2007
To archiwum zostało wygenerowane przez hypermail 2.1.8 : Wed 31 Jan 2007 - 08:42:05 MET