Zbigniew S. Szewczak Podstawy Systemów Operacyjnych

Transkrypt

Zbigniew S. Szewczak Podstawy Systemów Operacyjnych
Zbigniew S. Szewczak
Podstawy Systemów
Operacyjnych
Wykład 10
Pamięć wirtualna.
Toruń, 2004
Odrabianie wykładów
☛czwartek, 1.04.2004, S7, g. 12.00 za 19.05 √
☛czwartek, 15.04.2004, S7, g. 12.00 za 12.05
Pamięć wirtualna
☛Podstawy
☛Stronicowanie na żądanie
☛Sprawność stronicowania na żądanie
☛Zastępowanie stron
☛Algorytmy zastępowania stron
☛Przydział ramek
☛Szamotanie
☛Inne rozważania
☛Segmentacja na żądanie
Podstawy
☛Wykonywane rozkazy muszą rezydować w
pamięci, jednak cały program nie musi
☛programy często zawierają fragmenty obsługi sytuacji
wyjątkowych
☛tablice, listy mają zwykle nadmiar przydzielonej pamieci
☛pewne możliwości programu są rzadko stosowane
☛Zalety programu częściowo rezydującego
☛brak ograniczeń na pamięć
☛więcej programów: lepsze wykorzystanie procesora
☛mniejsza liczba operacji we/wy dla załadowania programu
więc program wykonuje się szybciej
Podstawy (c.d.)
☛Pamięć wirtualna (ang. virtual memory ) – pozwala
na odseparowanie pamięci logicznej użytkownika od
pamięci fizycznej
☛Można jedynie część programu załadować do pamięci w celu
wykonania
☛Logiczna przestrzeń adresowa procesu może dlatego być
znacznie większa niż fizyczna przestrzeń adresowa
☛Potrzeba wymiany stron między dyskiem a pamięcią
☛Pamięć wirtualną można zaimplementować jako:
☛Stronicowanie na żądanie (ang. demand paging)
☛Segmentacja na żądanie (ang. demand segmentation) np.OS/2
Pamięć wirtualna i fizyczna
strona 0
strona 1
...
strona 2
strona n
pamięć wirtualna
odwzorowanie
pamięci
pamięć fizyczna
Stronicowanie na żądanie
☛Nigdy nie dokonuje się wymiany strony w
pamięci jeśli nie jest to konieczne - procedura
leniwej wymiany (ang. lazy swapper)
☛Mniej operacji we/wy
☛Mniej pamięci
☛Szybsza reakcja
☛Więcej użytkowników
☛Jeśli strona jest potrzebna ⇒ odwołaj się
☛niepoprawne odwołanie ⇒ abort
☛brak strony w pamięci ⇒ sprowadź z stronę do pamięci
☛Zgodność z Zasadą lokalności odniesień
Stronicowanie na żądanie (c.d.)
☛Proces jest traktowany jako ciąg stron
☛Procedura wymiany dotyczy całego procesu
☛Procedura stronicująca (ang. pager) dotyczy
poszczególnych stron procesu
☛Gdy proces ma zostać wprowadzony do pamięci,
wówczas procedura stronicująca zgaduje jakie
strony będą w użyciu przed ponownym
załadowaniem na dysk (ang. swap space)
☛Nigdy nie dokonuje się wymiana całego procesu
dlatego używamy określenia stronicowanie
(ang. page) zamiast wymiana (ang. swap)
Przesyłanie do obszaru ciąłego
swap out
program A
swap in
program B
pamięć operacyjna
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Bit poprawności
☛Z każdą pozycją w tablicy stron stowarzyszony jest
bit poprawności (ang. valid-invalid bit): 1 ⇒ w
pamięci, 0 ⇒ poza pamięcią (dozwolona lub nie)
☛Początkowo bit poprawności ustawiany jest na 0
(lub i) dla wszystkich pozycji
Nr ramki
bit poprawności
☛Przykład
1
1
1
1
0
Μ
0
0
tablica stron
Tablica stron z brakami stron
0
1
numer
bit
ramki poprawności 2
0
A
0
1
B
1
2
C
2
v
3
i
4
v
5
3
i
6
4
i
7
C
v
8
F
4
6
A
C
3
D
4
E
5
5
F
6
i
9
6
G
7
i
10
7
H
pamięć logiczna
9
F
11
tablica
stron
12
13
pamięć fizyczna
A
B
D
E
Brak strony
☛ Implementacja bitu poprawności wymaga
wsparcia ze strony sprzętu
☛Jeśli wystąpi odwołanie do strony z bitem 0,
sprzęt stronicujący spowoduje przejście do
systemu operacyjnego: błąd zwany brakiem
strony (ang. page-fault)
☛Czyste stronicowanie na żądanie (ang. pure
demand paging): Nigdy nie sprowadzaj strony
do pamięci wcześniej niż jest to niezbędne
Procedura obsługi braku strony
☛1. System operacyjny sprawdza wewnętrzną tablicę
oraz decyduje, że:
☛2. jeśli odwołanie niedozwolone - kończy proces
☛2. jeśli odwołanie dozwolone tylko zabrakło strony w pamięci to
sprowadza tę stronę
☛3. System
ramek
☛4. System
☛5. System
☛6. System
znajduje wolną ramkę na liście wolnych
wczytuje stronę z dysku do wolnej ramki
wstawia bit 1 (lub v) w tablicy stron
wykonuje przerwany rozkaz
Etapy obsługi braku strony
3
system
operacyjny
strona w pamięci
pomocniczej
2
odniesienie
pułapka
1
umieść M
i
pamięć fizyczna
6
wznowienie
wykonywania
tablica
stron
5
odnowienie
tablicy stron
4
sprowadzenie
brakujacej strony
Co się stanie gdy zabraknie
wolnej ramki?
☛Zastąpienie strony - szukamy strony w pamięci
która nie jest używana i zapisujemy na dyska
☛wydajność – potrzebny jest taki algorytm, który zminimalizuje
liczbę braków strony
☛Pewne strony mogą być sprowadzane do pamięci
po kilka razy
☛Może się okazać, że kilka stron w pamięci jest
potrzebnych do wykonania jednego rozkazu
☛MVC (przenieś znaki), EX (wykonaj)
☛sposób adresowania - np. pośrednie, autoincrement (PDP-11)
☛Wn. Sposób zastąpienia strony zależy od architektury
komputera
Sprawność stronicowania na
żądanie
☛Prawdopodobieństwo braku strony p
☛jeśli p=0 to brak braku stron
☛jeśli p=1 to każde odwołanie generuje brak strony
☛ Efektywny czas dostępu (EAT)
☛EAT = (1-p) * cd + p* czas obsługi strony
☛cd - czas dostępu do pamięci (10 do 200 ns)
☛czas obsługi strony
☛obsługa przerwania wywołanego brakiem strony (1 do 100 µs)
☛czytanie strony
☛wznowienie procesu(1 do 100 µs)
Prefiksy metryczne
☛10^-3
☛10^-6
☛10^-9
☛10^-12
☛10^-15
☛10^-18
☛10^-21
☛10^-24
-
mili (m);
10^3 - kilo (k)
micro (µ); 10^6 - Mega (M)
nano (n); 10^9 - Giga (G)
pico (p);
10^12 - Tera (T)
femto (f); 10^15 - Peta (P)
atto (a);
10^18 - Exa (E)
zepto (z); 10^21 - Zetta (Z)
yocto (y); 10^24 - Yotta (Y)
Przykłady wykorzystania
☛1.7 yg - masa protonu
☛1 as - czas przejścia światła przez atom
☛1 pg - masa bakterii
☛1 µL - kropelka wody
☛1 Ms - 11,6 dni
☛0,3 Gm - sekunda świetlna
☛9,5 Pm - rok świetlny
☛1 ZL - objętość Pacyfiku
☛1 YL - pojemność Ziemii
Czas obsługi braku strony
☛Przejście do systemu operacyjnego
☛Przechowanie kontekstu
☛Określenie, że przerwanie to brak strony
☛Określenie dopuszczalności i położenia strony
☛Czytanie z dysku do wolnej ramki
☛Przydzielenie procesora w trakcie transferu
☛Przerwanie we/wy po transferze strony
☛Odebranie sterowania i przełączenie kontekstu
☛Skorygowanie tablicy stron
☛Czekanie na przydział procesora i wznowienie
Stronicowanie na żądanie przykład
☛cd = 100 ns
☛czytanie strony z dysku twardego
☛opóźnienie (ang. latency) - 8ms
☛przeszukiwanie (ang. seek) - 15ms
☛przesyłanie (ang. transfer) - 1ms
☛Czytanie strony = 25 ms = 25000000ns
EAT = (1 – p) *(100) + p *(25000000)
=100 + 24999900*p ns
☛Wn. EAT jest proporcjonalny do p (page-fault
rate) dlatego rozsądnym jest utrzymywanie
małego prawdopodobieństwa p braku strony
Tworzenie procesu
☛Podczas tworzenia procesu pamięć wirtualna
pozwala na realizację technik poprawiajacych
wydajność systemu
☛kopiowanie przy zapisie (ang. copy-on-write)
☛odwzorowanie plików do pamięci (ang. memory-mapped
files)
☛
Kopiowanie przy zapisie
☛Kopiowanie przy zapisie umożliwia procesowi
potomnemu jak i rodzicowi dzielenie tych samych
stron w pamięci
☛Jeśli któryś z nich modyfikuje stronę to jest ona
kopiowana
☛Kopiowanie przy zapisie poprawia wydajność
tworzenia procesów np. Linux, W2K, Solaris 2
☛Wolne strony są alokowane z puli wyzerowanych stron
(ang. zero-fill-on-demand)
☛vfork - rodzic jest zawieszony i potomek używa jego
przestrzeni adresowej, np. funkcja systemowa exec
Odwzorowanie plików do pamięci
☛We/wy na pliki odwzorowane w pamięci to
dostęp do bloków danych dyskowych
wymapowanych na strony
☛Plik jest początkowo czytany jako żądanie strony
☛Blok danych o wielkości strony zostaje wczytany
☛Operacje we/wy na pliku to we/wy na pamięci
☛Uproszczenie dostępu do pliku, bez wywołań
systemowych read(), write()
☛Wiele procesów może korzystać z pliku dzieląc
strony w pamięci
☛Solaris 2
Zastępownie stron - dzielenie
stron pliku
1
2
3
4
5
6
1
2
3
4
5
6
3
6
1
5
pamięć wirtualna
procesu A
pamięć wirtualna
procesu B
4
2
pamięć fizyczna
1
2
3
4
plik na dysku
5
6
Zapotrzebowanie na zastąpienie
strony - brak wolnej ramki
PC
0
H
1
umieść M
2
J
3
M
pamięć logiczna
użytkownika 1
ramka
bit
poprawności
3
v
4
v
0
5
v
1
i
tablica stron
użytkownika 1
ramka
A
1
B
2
D
2
v
E
7
v
3
pamięć logiczna
użytkownika 2
2
D
3
H
bit
4
poprawności
5
v
6
0
i
tablica stron
użytkownika 2
monitor
B
umieść M
J
6
A
7
E
pamięć fizyczna
M
Zastępowanie stron
☛Ochrona przed nadprzydziałem (ang. overallocation) pamięci przez dodanie do obsługi
braku strony możliwości zastąpienia strony (ang.
page replacement).
☛1. Zlokalizowanie potrzebnej strony na dysku
☛2. Odnalezienie wolnej ramki
☛jeśli ramka istnieje - zostaje użyta
☛w przeciwnym razie typowanie ramki ofiary (ang. victim)
☛ramka ofiara zapisana na dysk; zmiana w tablicy stron
☛3. Wczytanie potrzebnej strony
☛4. Wznowienie procesu
Zastępowanie strony
bit
poprawności
ramka
o
i
f
v
tablica stron
2
4
strona ofiara
swap out
zmiana na
invavlid
1
f
reset tablicy
stron dla
nowej strony
ofiara
3
strona potrzebna
swap in
pamięć fizyczna
Zastępowanie stron (c.d.)
☛Gdy nie ma wolnych ramek - potrzebne jest
dwukrotne przesyłanie stron a w konsekwencji
wydłużenie efektywnego czasu dostępu
☛Zastosowanie bitu modyfikacji (zabrudzenia)
(ang. modify (dirty) bit ) do zredukowania czasu
dostępu - tylko strony zmodyfikowane są
zapisywane na dysk
Zastępowanie stron (c.d.)
☛Zastępowanie stron jest podstawą stronicowania
na żądanie i dopełnia rozdzielenie pamięci
logicznej od fizycznej
☛Z pomocą tego mechanizmu otrzymujemy
wielką pamięć wirtualną używając mniejszej
pamięci fizycznej
☛Dwa główne problemy
☛algorytm przydziału ramek (ang. frame-allocation
algorithm)
☛algorytm zastępowania stron (ang. page-replacement
algorithm)
Algorytmy zastępowania stron
☛Minimalizacja częstości braków stron (ang. pagefault rate)
☛Algorytm ocenia się na podstawie wykonania go na
pewnym ciągu odniesień (ang. reference string) do
pamięci i zsumowaniu liczby braków stron w tym
ciągu
☛Dla zilustrowania algorytmów zastępowania stron
będziemy używać pamięci z trzema wolymi ramkami
oraz następujacego ciągu odniesień
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1.
Algorytm zastępowania FIFO
☛Algorytm FIFO (ang. First-In-First-Out)
stowarzysza z każdą ze stron czas kiedy została
ona sprowadzona do pamięci
☛Jeśli trzeba zastąpić stronę to zastępowana jest
najstarsza ze stron
☛Implementuje się za pomocą kolejek FIFO (IPC
System V, POSIX)
☛Dla ciągu odniesień z trzema ramkami mamy
15 braków stron (w tym trzy początkowe braki
stron)
Algorytm FIFO - przykład
☛Ciąg odniesień: 1, 2, 3, 4, 1, 2, 5, 1, 2,
3, 4, 5
☛3 ramki (3 strony mogą być w pamięci w
w tym samym czasie)
1
1
4 5
2
2
1
3
3
3
2
4
9 braków stron
1 1 5 4
☛4 ramki
2 2 1 5
3 3 2
4 4 3
10 braków stron
Anomalia Belady’ego
☛Anomalia Belady’ego (ang. Belady’s anomaly)
odzwierciedla fakt, że w niektórych algorytmach
zastępowania stron współczynnik braków stron
może wzrastać ze wzrostem wolnych ramek
(mimo, że intuicja zdaje się sugerować, że
zwiekszenie pamięci procesu powinno polepszyć
jego działanie)
☛Poszukiwanie optymalnego algorytmu
zastępowania stron, który cechuje najniższy
współczynnik braków stron
Krzywa braków stron (FIFO)
liczba braków stron
16
14
12
10
8
6
4
2
0
1
2
3
4
liczba ramek
5
6
7
Algorytm optymalny
☛Zastąp tę stronę, która najdłużej nie będzie
używana; nazywany OPT lub MIN
☛Przykład 3 ramek
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
1 7
2
2
2
2
2
7
2 0
0
0
4
0
0
0
3 1
1
3
3
3
1
1
9 braków stron
☛Nie ma anomalii Belady’ego
Algorytm optymalny (c.d.)
☛Bardzo trudny do realizacji bo wymaga wiedzy o
przyszłej postaci ciągu odniesień (podobnie jak
przy planowaniu procesora metodą SJF)
☛Używany głównie w studiach porównawczych
☛wiedza o tym, że jakiś algorytm odbiega od optymalnego o
12,3% a średnio jest od niego gorszy o 4,7% może okazać
się cenną
☛inna sprawa to wartość wartości średniej
Algorytm LRU
☛Zastąp tę stronę, która najdawniej była użyta
(ang. Least Recently Used)
☛Przykład 3 ramek
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
1 7
2
2
4
4
4
0
1
1
1
1
2 0
0
0
0
0
3
3
3
0
0
2
3 1
1
3
3
2
2
2
2
2
7
3
12 braków stron
☛Nie jest dotknięty anomalią Belady’ego
☛Odwracalność
Algorytm LRU a FIFO - przykład
☛Ciąg odniesień: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
☛Zastępujemy najdawniej używaną stronę
5
1
2
3
5
4
3
4
Algorytm LRU (c.d.)
☛Dwie implementacje
☛Liczniki - do każdej pozycji w tablicy stron dołączamy rejestr
czasu użycia, do procesora zaś dodajemy zegar logiczny lub
licznik. Wskazania zegara są zwiększane wraz z każdym
odniesieniem do pamięci. Ilekroć występuje odniesienie do
pamięci, tylekroć zawartość rejestru zegara jest kopiowana do
rejestru czasu użycia należącego do danej strony w tablicy stron
☛Stos - przy każdym odwołaniu do strony jej numer wyjmuje się
ze stosu i umieszcza na szczycie - najlepsza implementacja to
dwukierunkowa lista ze wskaźnikami do czoła i do końca
☛najwyżej 6 zmian wskaźników
☛nie jest potrzebne przeszukiwanie listy
Przykład - LRU i użycie stosu
4
7
0
7
1
0
1
2
2
7
1
2
0
1
7
0
4
4
1
2
7
1
2
Algorytmy stosowe
☛Algorytm stosowy (ang. stack algorithm) to taki
algorytm dla którego zbiór stron w pamięci w
przypadku n ramek jest podzbiorem zbioru stron
w pamięci w przypadku n+1 ramek
☛Przykład: LRU
☛Własności: klasa algorytmów stosowych nie jest
dotknięta anomalią Belady’ego
Algorytmy przybliżające LRU
☛Bit odniesienia (ang. reference bit)
☛Z każdą stroną stowarzyszamy na początku bit 0
☛Czytanie lub pisanie na stronie ustawia bit na 1
☛Zastąp stronę stronę jeśli ma bit 0
☛nie można poznać porządku użycia stron
☛Algorytm drugiej szansy (ang. second chance)
☛Algorytm FIFO (wymaga zegara)
☛Gdy strona (FIFO) ma bit odniesienia = 1 to strona dostaje
drugą szansę na pobyt w pamięci:
☛bit odniesienia = 0 i czas przybycia = bieżący
☛zostawia się stronę w pamięci
☛zastępuje się następną w porządku FIFO stronę według
powyższych zasad
...
...
...
...
Zegarowy algorytm drugiej
szansy
następna
ofiara
bity
odniesienia
strona
Ulepszony algorytm drugiej
szansy
☛(x,y) - x - bit odniesienia, y- bit modyfikacji
☛4 klasy (od najniższej)
☛(0,0) - nie używana ostatnio i nie zmieniana: najlepsza
ofiara
☛(0,1) - nie używana ostatnio ale zmieniona: gorsza ofiara
bo wymaga zapisu na dysk
☛(1,0) - używana ostatnio i czysta: może być wkrótce użyta
☛(1,1) - używana ostatnio i zmieniana - najgorsza ofiara,
prawdopodobnie będzie zaraz użyta
☛Algorytm drugiej szansy ale zastępujemy
pierwszą napotkaną stronę z najniższej
niepustej klasy (x,y)
Algorytmy zliczające
☛Wprowadzamy liczniki odwołań do każdej ze
stron
☛Algorytm LFU (ang. least frequently used) zastąp stronę najrzadziej używaną
☛Algorytm MFU (ang. most frequently used) uzasadnia się tym, że strona z najmniejszą
wartością licznika została prawdopodobnie
dopiero co sprowadzona i będzie jeszcze
używana
☛Implementacja kosztowana i nie przybliżają
dobrze algorytmu OPT
Algorytmy buforowania stron
☛Zanim usunie się z pamięci ramkę ofiarę wczytuje się
nową stronę do którejś z wolnych ramek
☛Nie trzeba czekać na zakończenie zapisywania strony
ofiary aby wznowić proces
☛Z chwilą zapisania do swapu ramki ofiary dołączana
jest ona do listy wolnych ramek
☛Rozwinięcie tej idei: lista zmodyfikowanych stron
☛gdy urządzenie stronicujące jest wolne (ang. idle) zmodyfikowna
strona jest zapisywana na dysk
☛Lista wolnych stron wraz listą odwiedzających stron
☛VAX/VMS - ramka ofiara (FIFO) może być użyta
Przydział ramek
☛Każdy proces wymaga minimalnej liczby ramek
☛Przykład: IBM 370 – 6 ramek potrzebnych do
wykonania rozkazu typu SS MVC:
☛rozkaz długośći 6 bajtów może zajmować 2 strony
☛dane wejściowe (256 znaków) mogą zajmować 2 strony
☛obszar na który przesyłamy może zajmować 2 strony
☛gdy MVC jest argumentem rozkazu EXECUTE jeszcze 2!
☛Dwa główne schematy przydziału
☛przydział stały (ang. fixed allocation)
☛przydział priorytetowy (ang. priority allocation)
MVC - Move Characters
☛MVC D1(L,B1), D2(B2)
☛prześlij pole danych o długości L z pod adresu
wyznaczonego przez zawartość rejestru B2 powiększonego
o przesunięcie D2 pod adres (B1)+D1
☛Przykład
☛L=08, B1=x’B’, D1=001,B2=x’B’,D2=000
☛MVC 1(8,11), 0(11) - format Assemblera
☛D207B001B000 - format maszynowy
☛rejestr 11 zawiera x’358’; pod adresem 358 mamy:
00F1F2F3F4F5F6F7F8F9
☛po wykonaniu MVC mamy pod adresem 358 :
000000000000000000
EX - Execute
☛EX R1, D2(X2,B2)
☛do bitów 8-15 rozkazu z pod adresu (X2)+(B2)+D2 są
dodawane logicznie bity 24-31 rejestru R1 i tak
zmodyfikowany rozkaz jest wykonywany
☛Przykład
☛pod adresem 3820 mamy D2FFB001B000; R11=x’358’,
pod adresem 358 mamy 00F1F2F3F4F5F6F7F8F9
☛R1=3, X2=0, B2=x’A’, D2=000, R10 = x’00003820’
☛EX 1,0(0,10) - format Assemblera
☛4410A000 - format maszynowy
☛po wykonaniu EX mamy pod adresem 358:
0000000000F5F6F7F8
Przydział stały
☛Przydział równy (ang. equal allocation) - np. jeśli
mamy 100 ramek i 5 procesów, to każdy proces
może dostać 20 ramek
☛Przydział proporcjonalny (ang. proportional
allocation) - każdemu procesowi przydziela się
dostępną pamięć proporcjonalnie do jego
rozmiaru
Przydział proporcjonalny
☛Przykład
☛s(i) rozmiar pamięci wirtualnej procesu P(i)
☛S = s(1)+s(2)+....+s(n)
☛m - całkowita liczba ramek
☛procesowi P(i) przydzielamy a(i)~ m*(s(i)/S) ramek
☛m=64, n=2, s(1)=10, s(2)=127
☛a(1)= 64*(10/137) ~ 5 ramek
☛a(2)= 64*(127/137) ~ 59 ramek
Przydział priorytetowy
☛Zastosowanie metody przydziału
proporcjonalnego, w którym liczba ramek zależy
nie od względnych rozmiarów procesu, lecz od
priorytetów procesów albo od kombinacji
rozmiaru i priorytetu
☛Jeśli proces Pi generuje błąd braku strony
☛wybierz do zastąpienia jedną z jego ramek
☛wybierz do zastąpienia ramkę procesu o niższym
priorytecie
Porównanie przydziału
globalnego i lokalnego
☛Zastępowanie globalne (ang. global
replacement) – umożliwia procesom wybór
ramki ze zbioru wszystkich ramek, nawet gdy
ramka jest w danej chwili przydzielona do
innego procesu: jeden proces może zabrać
ramkę drugiemu procesowi
☛Zastępowanie lokalne (ang. local replacement) –
wybór ograniczony do zbioru ramek
przydzielonych do danego procesu
☛Lepszą przepustowość systemu daje globalne zastępowanie lokalne ma mniejszy zakres
Szamotanie
☛Jeśli proces nie ma “wystarczająco dość” ramek to
współczynnik braków stron jest znaczny.
Powoduje to:
☛słabe wykorzystanie CPU
☛system operacyjny reaguje: trzeba zwiększyć
wieloprogramowość i podnieść wykorzystanie CPU
☛nowy procesy z kolejki procesów gotowych staje się
aktywnym
☛Szamotanie (ang. trashing) - proces się szamocze
jeśli spędza więcej czasu na stronicowaniu niż na
wykonaniu
Przyczyna szamotania
☛System operacyjny nadzoruje wykorzystanie
jednostki centralnej
☛Jeśli jest ono za małe planista przydziału
procesora zwiększa stopień wieloprogramowości
☛Strony zastępowane są według globalnego
algorytmu bez brania po uwagę do jakich
procesów należą
☛Procesom zaczyna brakować stron
☛Procesy ustawiają się w kolejce do urządzenia
stronicującego
☛Planista opróżnia kolejkę procesów gotowych
Powstrzymanie szamotania
☛Zmniejszenie stopnia wieloprogramowości
☛Lokalny (lub priorytetowy) algorytm
zastępowania
☛jeśli proces zaczyna się szamotać nie może on kraść ramek
innemu procesowi bo może on też zacząć się szamotać
☛Trzeba dostarczyć procesowi potrzebne ramki
☛Należy zabezpieczyć się przed możliwością
wystapienia braku ramek
Szamotanie - diagram
wykorzystanie procesora
szamotanie
stopień wieloprogramowości
Model strefowy a chaos
☛Model strefowy (ang. locality model) zakłada, że
w trakcie wykonania przechodzi się z jednej
strefy programu do innej, gdzie przez strefę
programu rozumie się zbiór stron pozostajacych
we wspólnym użyciu
☛Ogólnie ujmując, program składa się z wielu
różnych stref, które mogą na siebie zachodzić
☛Strefy programu są określne przez jego
strukturę oraz strukturę jego danych
☛Model strefowy neguje losowość programów
☛System operacyjny nie radzi sobie z chaosem
Zasada lokalności odniesień
Model zbioru roboczego
☛Założenie: procesy mają charakter strefowy
☛∆ - parametr do definiowania okna roboczego
(ang. working-set window) oznaczający ustaloną
liczbę ostatnich odniesień do stron
☛WS(i) - zbiór roboczy (ang. working-set)
procesu P(i) - całkowita liczba odniesień do
stron w ostatnich ∆ jednostkach czasu
☛za małe ∆ nie obejmie całego zbioru roboczego
☛za duże ∆ to będzie zachodzić na kilka stref programu
☛nieskończone ∆ - wszystkie strony użyte przez proces
☛Szamotanie jeśli WS(1)+..+WS(n) > #(pamięć)
- należy zawiesić w takiej sytuacji jakiś proces
Utrzymanie śladu zbioru
roboczego
☛Trudno jest utrzymać ślad zbioru roboczego
☛Model zbioru roboczego można przybliżać z
pomocą zegara generującego przerwania w
stałych odstępach czasu oraz bitu odniesienia
☛Przykład ∆ = 10000
☛przerwania zegarowe co 5000 odniesień
☛dwa bity przechowywane w pamięci dla każdej strony
☛po wystąpieniu przerwania zegara kopiuje się i zeruje
wartości bitów odniesień wszystkich stron
☛jeśli wystąpi brak strony to badamy bit odniesienia i dwa
bity w pamięci: conajmiej jeden ustawiony bit określa
zbiór roboczy
Utrzymanie śladu zbioru
roboczego - przykład (c.d.)
☛Wada: nie można powiedzieć, w którym miejscu
przydziału 5000 odniesień wystąpiło dane
odniesienie
☛Można zwiekszyć historię odniesień (t.j. ilość
bitów z 2 do 10) i liczbę przerwań ( np. co 1000
odniesień)
☛Wada: zwiększony koszt obsługi
Model zbioru roboczego - przykład
ślad odwołań do stron
...2615777751623412344434344413234443444...
∆
WS(t 1 )= { 1,2,5,6,7 }
∆
t1
t2
WS(t 2 )= { 3,4 }
Częstość braków stron
☛Metodą mierzenia szamotania jest mierzenie
częstości braków stron (ang. page-fault
frequency - PFF)
☛ustala się górną i dolną granicę pożądanego poziomu
braków stron
☛jeśli proces przekracza górną granicę do dostaje dodatkową
ramkę
☛jeśli częstość występowania braków stron spada poniżej
dolnej granicy to usuwa się ramkę z procesu, którego ten
objaw dotyczy
Częstość braków stron - wykres
liczba braków stron
zwiększ
ilość ramek
ograniczenie
górne
ograniczenie
dolne
liczba ramek
zmniejsz
ilość ramek
Przykłady implementacji
pamięci wirtualnej - WNT
☛stronicowanie na żądanie
☛clustering - każdy proces ma przypisany
minimalny i maksymalny zbiór roboczy: jeśli
proces ma zbiór roboczy bliski maksymalnemu i
złapie błąd strony musi zgodnie z lokalną polityką
zastępowania wyznaczyć ramkę ofiarę; jeśli
proces ma zbiór roboczy bliski minimalnemu może
dostać ramkę z globalnej listy wolnych ramek
☛Konkretny sposób wyboru strony do usunięcia ze
zbioru roboczego jest zależny od typu procesora
Przykłady implementacji
pamięci wirtualnej - W2K
☛4GB pamięci dla procesu w tym 2GB - W2K,
2*64KB - pointers
☛stany stron
☛dostępne - nieużywane przez dany proces
☛powierzone (ang. commited) - np. strony w chwili
zapisywania do pliku na dysku
☛zarezerwowane - ciągły zbiór stron nie wliczany do quoty
zanim użyty (np. przy zapisie do pamięci)
Przykłady implementacji
pamięci wirtualnej - Solaris 2
☛ wartość progowa (ang. threshold) wolnej pamięci zwana lotsfree (zwykle
1/64 pamięci fizycznej) poniżej której proces pageout zaczyna
podkradanie stron i wymianę
☛ pageout weryfikuje pamięć 4 razy na sekundę
☛ jeśli liczba wolnych ramek < lostfree to pageout wykonuje algorytm
(podobny do zegarowego algorytmu drugiej szansy)
☛ zerowanie bitu odniesienia wszystkich ramek
☛ sprawdzenie (po pewnym czasie) bitów odniesienia i zwrot wolnych ramek
☛ jeśli liczba wolnych ramek < desfree to pageout startuje 100 razy na
sekundę aby utrzymać desfree
☛ jeśli pageout nie jest w stanie utrzymać desfree przez 30 sekund to
zaczyna się swapowanie stron
☛ jeśli system nie jest w stanie utrzymać ilości wolnej pamięci na poziomie
minfree to pageout jest wołany przy każdym żądaniu nowej strony
☛ rozpoznawanie stron bibliotek dzielonych
Stronicowanie wstępne
☛Stronicowanie wstępne (ang. prepaging) jednorazowe wprowadzenie do pamięci
wszystkich potrzebnych stron procesu zapobiega
wysokiej aktywności stronicowania we wstępnej
fazie procesu
☛W systemach implementujących model zbioru
roboczego dla każdego procesu przechowuje
się listę stron jego zbioru roboczego
☛Przełączenie kontekstu: zapamiętanie listy stron
(np. w przypadku I/O) oraz wczytanie stron z tej
listy przed restartem
Rozmiar strony
☛Rozmiary stron są potęgami 2: od 4096 (2^12)
do 4194304 (2^22) bajtów
☛Wybór rozmiaru strony
☛minimalizacja fragmentacji wewnętrznej - małe strony
☛małe strony - wzrasta wielkość tablicy stron
☛duże strony - minimalizacja czasu operacji we/wy
☛małe strony - lepsza lokalizacja
Rozmiar strony (c.d.)
☛Obserwuje się tendencję do wybierania
większych stron
☛Intel 80386 - 4KB; Motorola 68030 - od 256B do
32KB
☛Wzrost szybkości procesorów i pojemności
pamięci jest szybszy niż wzrost szybkości
dysków
☛Z punktu widzenia wydajności systemu braki
stron są kosztowne
☛Większy rozmiar strony = większa fragmentacja
wewnętrzna
Przykładowe rozmiary stron
☛Altlas
512 48b słów
☛Honeywell-Multics
1024 36b słów
☛IBM 370/XA i 370/ESA
4kB
☛VAX
512B
☛IBM AS/400
512B
☛DEC Alpha
8kB
☛MIPS
4kB - 16MB
☛UltraSPARC
8kB - 4MB
☛Pentium
4kB - 4MB
☛PowerPC
4kB
Współczynnik trafień dla TLB
☛Współczynnik trafień dla TLB (ang. TLB reach)
odnosi się do ilości pamięci dostępnej za pomocą
TLB (tzn. liczby pozycji w TLB razy rozmiar strony)
☛Najlepiej mieć zbiór roboczy w TLB
☛Jak zwiększyć współczynnik trafień TLB?
☛powiększyć rozmiar strony
☛wiele rozmiarów stron (UltraSPARC - 8KB, 64KB, 512KB,
4MB)
☛Konieczność obsługi TLB (musi zawierać rozmiar
strony) przez system operacyjny w przypadku wielu
rozmiarów stron
Odwrócona tablica stron
☛ Odwrócona tablica stron nie zawiera pełnych informacji o
logicznej przestrzeni adresowej procesu potrzebnych
przy stronicowaniu
☛ W stronicowaniu na żądanie wprowadza się zewnętrzną
tablicę stron procesu (położenia stron wirtualnych) do
której odwołanie następuje w przypadku braku strony
☛ Zewnętrzne tablice stron podlegają również
stronicowaniu
☛ Zarządca pamięci wirtualnej może spowodować kolejny
brak strony wprowadzając potrzebną zewnętrzną tablicę
stron aby zlokalizować stronę wirtualną na dysku
Struktura programu
☛Struktura programu zerowania tablicy
☛int A[][] = new int[128][128];
☛Strona długości 128 słów
☛System operacyjny alokuje mniej niż 128 ramek
☛Program 1:
for (int j = 0; j < A.length; j++ )
for (int i = 0; i < A.length; i++ )
A[i][ j] = 0;
128 x 128 braków stron (A w pamięci jest wierszami)
Struktura programu (c.d.)
☛Struktura programu zerowania tablicy
☛int A[][] = new int[128][128];
☛Strona długości 128 słów
☛System operacyjny alokuje mniej niż 128 ramek
☛Program 2:
for (int i = 0; i < A.length; i++ )
for (int j = 0; j < A.length; j++ )
A[i][ j] = 0;
128 braków stron (A w pamięci jest wierszami)
We/wy a ramki
☛Proces wysyła zamówienie na we/wy i ustawia
się w kolejce do urządzenia we/wy
☛Procesor zostaje przydzielony innym procesom
☛Zaczynają występować braki stron
☛W wyniku działania algorytmu globalnego
zastępowania stron jeden z procesów zastępuje
stronę zawierającą bufor we/wy procesu
czekającego w kolejce we/wy
☛Zamówienie na we/wy zaczyna być realizowane
do ramki innego procesu
We/wy a ramki - diagram
bufor
przewijak taśmy
We/wy a ramki (c.d.)
☛Zakaz wykonywania operacji we/wy wprost do
pamięci użytkownika
☛duże nakłady przy kopiowaniu
☛Blokowanie stron w pamięci
☛każda ramka ma bit blokowania
☛stron zablokowanych nie wolno zastępować
☛strona jest odblokowywana po zakończeniu operacji
we/wy
☛pula wolnych stron jest zbyt mała?
☛proces próbuje zablokować zbyt wiele stron?
Segmentacja na żądanie
☛Jeśli występuje niedostatek sprzętu do realizacji
pamięci wirtualnej stosuje się segmentację na
żądanie (ang. demand segmentation)
☛OS/2 zamiast stronami przydziela pamięć
segmentami opisanymi za pomocą deskryptorów
segmentów (ang. segment descriptors)
☛Deskryptor segmentu zawiera bit poprawności
wskazujący dla każdego segmentu czy znajduje
się on w danej chwili w pamięci
☛Jeśli segment jest w pamięci głównej, kontynuacja
☛W przeciwnym razie przerwanie brak segmentu
Konfigurowanie pamięci
wirtualnej
☛AIX - schedtune, vmtune
☛FreeBSD - sysctl, /etc/sysctl.conf
☛HP-UX - lotsfree, desfree, minfree
☛wolna pamięć > lotsfree - wstrzymanie podkradania stron
☛desfree < wolna pamięć < lotsfree - podkradanie stron
☛minfree < wolna pamięć < desfree - likwidacja szamotania
☛Linux - /proc/sys/vm
☛Solaris - kstat
☛kstat -m unix -n system_pages | grep ‘free’
☛True64 - sysconfig
Podsumowanie (1)
☛Potrzeba wykonania procesów których logiczna
przestrzeń adresowa jest większa niż dostępna
fizyczna przestrzeń adresowa
☛Można użyć nakładek ale jest to bardzo trudne
☛Pamięć wirtualna umożliwia wykonywanie
bardzo dużych procesów zwalniając
jednocześnie programistę od kłopotów
związanych z brakiem pamięci
Podsumowanie (2)
☛Czyste stronicowanie na żądanie (ang. pure
demand paging) polega na nie sprowadzaniu
strony do pamięci dopóty, dopóki nie ma do niej
odniesienia
☛Potrzebne są algorytmy zastępownia stron w
pamięci
☛FIFO - anomalia Belady’ego
☛optymalne zastępowanie OPT - wymaga wiedzy o
przyszłości
☛Algorytm LRU przybliża OPT ale jest trudny w realizacji
☛Większość algorytmów oparta o algorytm drugiej szansy
Podsumowanie (3)
☛Polityka przydziału ramek uzupełnia algorytm
zastępowania stron
☛przydział stały lub dynamiczny
☛Proces powinien mieć przydzieloną liczbę ramek
wystarczającą dla bieżącego zbioru roboczego,
w przeciwnym razie nastąpi szamotanie
☛Rozważenia wymaga również:
☛rozmiar strony
☛blokowanie stron w pamięci (np. dla operacji we/wy)

Podobne dokumenty