Zbigniew S. Szewczak Podstawy Systemów Operacyjnych

Transkrypt

Zbigniew S. Szewczak Podstawy Systemów Operacyjnych
Zbigniew S. Szewczak
Podstawy Systemów
Operacyjnych
Wykład 9
Zarządzanie pamięcią.
Toruń, 2004
Działanie systemu
Komputer
Peryferia
Pamięć
Procesy
System
Sterowanie
WejścieWyjście
Linie komunikacyjne
Zarządzanie pamięcią
☛Podstawy
☛Logiczna i fizyczna przestrzeń adresowa
☛Wymiana
☛Przydział ciągły
☛Stronicowanie
☛Segmentacja
☛Segmentacja ze stronicowaniem
Podstawy
☛Program musi być wprowadzony do pamięci
operacyjnej i przydzielony odpowiedniemu
procesowi
☛Kolejka wejściowa – (ang. input queue) zbiór
procesów czekających na dysku na
wprowadzenie do pamięci w celu wykonania
☛Program użytkownika, zanim zostanie
wykonany, przechodzi przez kilka faz
Wieloetapowe przetwarzania
programu użytkownika
biblioteka
systemowa
ładowana
dynamicznie
biblioteka
systemowa
moduły
wynikowe
łączenie
statyczne
program
źródłowy
kompilator
asembler
czas
kompilacji
moduł
wynikowy
program
linkujący
moduł
ładowalny
czas
ładowania
program
ładujący
łączenie
dynamiczne
obraz
binarny
programu
w pamięci
czas
wykonania
(run time)
Powiązanie rozkazów i danych
z adresami pamięci (1)
Powią zanie rozkazów i danych z adresami pamię ci moż e zostać
wykonane w dowolnym z trzech kroków
☛Czas kompilacji: Jeśli podczas
kompilacji jest znane miejsce, w którym
proces będzie przebywał, to można
wygenerować kod bezwzględny (ang.
absolute code); gdy w późniejszym
czasie ten adres początkowy ulegnie
zmianie, wówczas kod taki trzeba
skompilować od nowa
Powiązanie rozkazów i danych
z adresami pamięci (2)
☛Czas ładowania: Jeśli podczas
kompilacji nie wiadomo, gdzie będzie
umieszczony proces w pamięci, to
kompilator musi wytwarzać kod
przemieszczalny (ang. relocatable)
☛Czas wykonania: Jeśli proces może
ulegać przemieszczeniu z jednego
miejsca pamięci do innego podczas
swojego wykonania to trzeba zastosować
specjalny sprzęt do mapowania adresów
(np. bazowe i graniczne rejestry).
Logiczna i fizyczna przestrzeń
adresowa
☛Adres oglądany przez jednostkę pamięci zwie się
fizyczną przestrzenią adresową ; to w jaki
sposób fizyczna przestrzeń adresowa jest
odwzorowywana jest podstawową cechą
zarzadzania pamięcią
☛Logiczny adres – wygenerowany przez CPU; jeśli
odwzorowany na adres fizyczny podczas wykonywania
programu wtedy jest to wirtualny adres
☛Fizyczny adres – adres widziany przez sterownik pamięci
☛Adres logiczny i fizyczny jest taki sam podczas
kompilacji i ładowania; logiczny(wirtulany) i
fizyczny adres różnią się podczas wykonania
Jednostka zarządzania
pamięcią (MMU)
☛Urządzenie sprzętowe dokonujące
odwzorowania adresów fizycznych na wirtualne
(ang. memory-managament unit)
☛W MMU do każdego adresu wytwarzanego przez
proces użytkownika dodawana jest wartość
rejestru przemieszczenia (ang. relocation
register) w chwili odwoływania się do pamięci
☛program użytkownika nigdy nie ma do czynienia
z rzeczywistym adresem; program ten działa na
na logicznych adresach
Przemieszczenie dynamiczne z
z użyciem rejestru
pamięć
rejestr
przemieszczenia
14000
CPU
adres logiczny
346
+
adres fizyczny
14364
jednostka zarządzania
pamięcią (MMU)
Ładowanie dynamiczne
☛Podprogram nie jest wprowadzany do pamięci
dopóty, dopóki nie zostanie wywołany
☛Lepsze wykorzystanie pamięci; nigdy nie
zostanie załadowany podprogram, którego się
nie używa
☛Schemat ten jest szczególnie przydatny wtedy,
kiedy trzeba okazjonalnie wykonać wielkie
fragmenty kodu (np. obsługa błedów)
☛Nie wymaga specjalnego wsparcia ze strony
systemu operacyjnego; użytkownicy projektują
wykorzystanie procedur bibliotecznych
Konsolidacja dynamiczna
☛Konsolidację opóźnia się do czasu wykonania
☛W obrazie binarnym, w miejscu odwołania
bibliotecznego znajduje się tylko namiastka
(ang. stub) procedury będąca małym
fragmentem kodu, wskazującym jak odnaleźć
odpowiedni, rezydujący w pamięci podprogram
biblioteczny lub jak załadować bibliotekę jeśli
podprogramu nie ma w pamięci
☛Namiastka wprowadza na swoje miejsce adres
podprogramu i go wykonuje
☛System operacyjny sprawdza podprogram czy
jest w pamięci a jeśli nie ma to go sprowadza
Konsolidacja dynamiczna (c.d.)
☛Do pamięci można załadować więcej niż jedną
wersję biblioteki, każdy program posłuży się swoją
informacją o wersji, aby wybrać właściwą bibliotekę
☛Niezgodności powodowane zmianami w bibliotece
uwidaczniają się tylko w programach
skompilowanych z nowym numerem wersji
☛Biblioteki dzielone (ang. shared libraries)
☛Konsolidacja dynamiczna (ang. dynamic linking )
wymaga wspomagania ze strony systemu
operacyjnego, niektóre systemy realizują jedynie
konsolidację statyczną (ang. static linking)
Nakładki
☛Idea polega na przechowywaniu w pamięci tylko
tych danych i rozkazów, które są stale
potrzebne
☛Nakładki (ang. overlays) są potrzebne w sytuacji
gdy proces jest większy niż ilość przydzielonej
mu pamięci
☛Implementowane z poziomu użytkownika; nie
wymagają wsparcia ze strony systemu
operacyjnego; zrozumienie dużego programu
jest trudne więc projektowanie nakładek jest
złożonym przedsięwzięciem
Nakładki - przykład
☛Dwuprzebiegowy asembler
☛I przebieg konstruuje tablicę symboli
☛II przebieg generuje kod maszynowy
☛Kod przebiegu I = 70KB, II = 80KB, tablica
symboli = 20KB, wspólne podprogramy = 30KB
☛Wszystkiego 200KB; mamy tylko 150KB pamięci
☛Kod przebiegu I i II są niezależne:
☛ I nakładka : I kod + tablica + wspólne podprogramy
☛II nakładka : II kod + tablica + wspólne podprogramy
☛moduł obsługi nakładek = 10KB
Nakładki dwuprzebiegowego
asemblera
tablica
symboli
20 kB
wspólne
podprogramy
30 kB
moduły obsługi
nakładek
10 kB
przebieg 1
70 kB
przebieg 2
90 kB
80 kB
Wymiana
☛Proces może być tymczasowo odsyłany (ang.
swapped) do pamięci pomocniczej (ang. backing
store) i pobierany z powrotem do pamięci
operacyjnej w celu kontynuowania działania
☛Pamięć pomocnicza (ang. backing store) - jest
nią na ogół szybki dysk dostatecznie pojemny
aby pomieścić kopie obrazów pamięci
wszystkich użytkowników; powinien także
umożliwiać bezpośredni dostęp do tych obrazów
pamięci
Wymiana (c.d.)
☛Wytaczanie (ang. roll out), wtaczanie (ang. roll
in) - wariant wymiany wykorzystywany w
planowaniu priorytetowym; proces
niskopriorytetowy zostaje wyswapowany w
sytuacji gdy nadejdzie proces
wysokopriorytetowy do kolejki procesów
gotowych; proces wysokopriorytetowy zostaje
załadowany do pamięci i wykonany, a gdy
skończy, to proces o niższym priorytecie może
być sprowadzony do pamięci i wznowiony
Wymiana (c.d.)
☛Głównym składnikiem czasu wymiany jest czas
transferu (na dysk); całkowity czas transferu
jest proporcjonalny do ilości pamięci
wyswapowanej
☛Zmodyfikowana metoda wymiany jest
stosowana w wielu systemach operacyjnych
m.in. Unix, Linux, Windows; w normalnych
warunkach wymiana jest zabroniona, jednak
gdy nagromadzenie procesów w pamięci osiąga
pewną wartość progową może mieć miejsce
Wymiana dwu procesów z
użyciem pamięci pomocniczej
system
operacyjny
proces 1
wysłanie
proces 2
przestrzeń
użytkownika
pamięć
operacyjna
sprowadzenie
pamięć
pomocnicza
Zastosowanie rejestrów
sprzętowych do ochrony pamięci
rejestr
graniczny
adres
logiczny
<
nie
CPU
pułapka błąd
adresowania
rejestr
przemieszczenia
tak
+
adres
fizyczny
pamięć
Przydział ciągły
☛Pamięć główna zwykle mieści:
☛Rezydentny system operacyjny przechowywany zwykle w
pamięci dolnej (ang. low memory) (wraz z wektorem
przerwań)
☛Proces użytkownika przechowywany w pamięci górnej
(ang. high memory)
☛
Przydział ciągły (c.d.)
☛Wieloprogramowanie ze stałą liczbą zadań (ang.
multiprogrammining with a fixed number of
tasks - MFT)
☛Rejestr przemieszczenia (ang. relocation-register) jest
wykorzystany do do ochrony kodu użytkownika i systemu
operacyjnego
☛Rejestr przemieszczenia zawiera wartość najmniejszego
adresu fizycznego; rejestr graniczny zawiera zakres
adresów logicznych - każdy adres logiczny musi być
mniejszy od wartości rejestu granicznego
Przydział ciągły (c.d.)
☛Wieloprogramowanie z zmienną liczbą zadań
(ang. multiprogramming with a variable number
of tasks - MVT)
☛Dziura (ang. hole ) – blok dostępnej pamięci; dziury o
różnorodnej wielkości są porozrzucane po całej pamięci
operacyjnej
☛Gdy proces staje się gotowy, alokuje pamięć z dziury w
pamięci operacyjnej na tyle pojemnej aby sprostać
wymaganiom procesu
☛System operacyjny zarządza:
a) zaalokowanymi partycjami b) wolnymi partycjami
(dziurami w pamięci)
Przydział ciągły (c.d.)
☛przykład
SO
Proces 5
SO
Proces 5
SO
Proces 5
Proces 5
Proces 9
Proces 9
Proces 10
Proces 8
Proces 2
SO
Proces 2
Proces 2
Proces 2
Przykład planowania
kolejka zadań
0 kB
system
operacyjny
400 kB
2160 KB
2560 kB
proces
pamięć
czas
P1
600 kB
10
P2
1000 kB
5
P3
300 kB
20
P4
700 kB
8
P5
500 kB
15
Przykład planowania (c.d.)
0 kB
0 kB
system
operacyjny
0 kB
system
operacyjny
400 kB
400 kB
1000 kB
P2
system
operacyjny
400 kB
P1
P1
0 kB
400 kB
1000 kB
P3
P2
przydziel
2000 kB
P4
P3
system
operacyjny
400 kB
P5
2000 kB
900 kB
1000 kB
1000 kB
P4
1700 kB
2000 kB
system
operacyjny
P1
1000 kB
kończy
0 kB
P1
kończy
P4
2000 kB
P4
P5
1700 kB
P3
przydziel
1700 kB
P3
2000 kB
2300 kB
2300 kB
2300 kB
2300 kB
2300 kB
2560 kB
2560 kB
2560 kB
2560 kB
2560 kB
P3
Problem dynamicznego
przydziału pamięci
Jak na podstawie listy wolnych dziur spełnić zamówienie na obszar o rozmiarze n
☛Pierwsze dopasowanie: (ang. first-fit) przydziel pierwszą dziurę o wystarczającej
wielkości
☛Najlepsze dopasowanie: (ang. best-fit) przydziel najmniejszą z dostatecznie dużych
dziur; przejrzyj całą listę, chyba że jest
uporządkowana według rozmiarów. Strategia
ta zapewnia najmniejsze pozostałości po
przydziale
Problem dynamicznego
przydziału pamięci (c.d.)
☛Najgorsze dopasowanie: (ang. worstfit) - przydziel największą dziurę; należy
również przeszukać całą listę. Strategia
ta pozostawia po przydziale największą
dziurę, która może okazać się bardziej
użyteczna niż pozostałość wynikająca z
podejścia polegającego na przydziale
najlepiej pasującej dziury
Symulacje wykazały, że first-fit i best-fit są lepsze od wyboru
worst-fit zarówno pod wzglę dem zmniejszania czasu jak i
zużycia pamię ci.
Fragmentacja
☛Fragmentacja zewnętrzna (ang. external
fragmentation) – suma wolnych obszarów w
pamięci wystarcza na spełnienie zamówienia ale
nie tworzą one ciągłego obszaru
☛Fragmentacja wewnętrzna ( ang. internal
fragmentation) – zaalokowana pamięć jest
nieznacznie większa od żądania alokacji pamięci;
różnica ta stanowi bezużyteczny kawałek
pamięci wewnątrz przydzielonego obszaru
Upakowanie pamięci - przykład
0 kB
0 kB
system
operacyjny
system
operacyjny
400 kB
400 kB
P5
900 kB
1000 kB
100 kB
P5
900 kB
upakuj
P4
P4
1600 kB
1700 kB
2000 kB
2300 kB
2560 kB
300 kB
P3
1900 kB
P3
660 kB
260 kB
2560 kB
Fragmentacja - (c.d.)
☛Rozwiązanie problemu zewnetrznej fragmentacji
to upakowanie (ang. compaction)
☛Przemieszczenie zawartości pamięci w taki sposów aby
cała wolna pamięć znalazła się w jednym wielkim bloku
☛Upakownie nie jest możliwe jeśli ustalanie adresów jest
statyczne ; jest możliwe jedynie jeśli ustalanie adresów
jest dynamicznie wykonywane podczas działania procesu
☛Problem we/wy
☛“Zamknij” zadanie w pamięci w czasie wykonywanie we/wy
☛Realizuj we/wy jedynie do buforów systemowych
Porównanie sposobów
upakowania pamięci
0 kB
0 kB
system
operacyjny
system
operacyjny
300 kB
500 kB
P1
P2
600 kB
300 kB
500 kB
600 kB
P1
P2
P3
800 kB
1000 kB
P4
P3
1200 kB
1500 kB
system
operacyjny
system
operacyjny
300 kB
500 kB
P1
P2
600 kB
300 kB
500 kB
P4
1000 kB
P3
1900 kB
2100 kB
P2
600 kB
1500 kB
P4
przydział
początkowy
P1
1200 kB
1200 kB
1900 kB
2100 kB
0 kB
0 kB
przemieszczono
600kB
P4
P3
2100 kB
2100 kB
przemieszczono
przemieszczono
400kB
200kB
Stronicowanie (ang. Paging)
☛Logiczna przestrzeń adresowa procesu może być
nieciągła tj. procesowi można przydzielać
dowolne dostępne miejsca w pamięci fizycznej
☛Pamięć fizyczną dzieli się na bloki stałej długości
zwane ramkami (ang. frames) (rozmiar jest
potęgą 2, między 512B a 16MB)
☛Pamięć logiczną dzieli się na bloki tego samego
rozmiaru zwane stronami (ang. pages)
☛Pamiętana jest lista wolnych ramek
Przykłady 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
Stronicowanie (c.d.)
☛Wykonanie procesu o rozmiarze n stron wymaga
znalezienia n wolnych ramek i załadowanie w
nie procesu
☛Utworzenie tablicy stron (ang. page table) do
odwzorowywania adresów logicznych na
fizyczne
☛Eliminiuje się fragmentację zewnętrzna ale może
powstać fragmentacja wewnętrzna
☛proces 72766B = 35 stron 2048B + 1086 B -> 36 ramek ->
fragmentacja wewnętrzna = 2048 B - 1086 B = 926 B
Schemat Translacji Adresu
☛Stronicowanie wymaga wsparcia sprzętowego
☛Adres wygenerowany przez CPU jest dzielony na
dwie części:
☛Numer strony (ang. Page number) (p) – używany jako
indeks w tablicy stron zawierającej adresy bazowe
wszystkich stron w pamięci fizycznej
☛Odległość na stronie (ang. Page offset ) (d) – w połączeniu
z adresem bazowym definuje fizyczny adres pamięci
posyłany do jednostki pamięci
Architektura sprzętu
stronicującego
f
adres
logiczny
CPU
p
f0000....0000
d
f
d
adres
fizyczny
f1111....1111
p
f
pamięć
fizyczna
tablica stron
Model stronicowania pamięci
logicznej i fizycznej
numer
ramki
strona 0
strona 1
strona 2
strona 3
pamięć
logiczna
0
1
1
4
2
3
3
7
tablica
stron
0
1
strona 0
2
3
strona 2
4
strona 1
5
6
7
strona 3
pamięć
fizyczna
Adres logiczny
☛logiczna przestrzeń adresowa = 2^m
☛rozmiar strony = 2^n (B lub słów)
☛adres logiczny = (nr strony, odległość )
☛nr strony ≤ 2^(m-n)
☛odległość = 2^n
☛Przykład (minimalny):
☛strona rozmiaru 4 słów
☛pamięć fizyczna = 32 słowa = 8 stron
Przykład minimalny
a b c d e f g h i j k l m n o p
pamięć
logiczna
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
5
6
1
2
0
1
2
3
i j k l m n o p
0
4
8
12
tablica
stron
pamięć
fizyczna
a b c d e f g h
16
20
24
28
Przydział wolnej ramki
lista wolnych
ramek
14
13
18
20
15
strona 0
strona 1
strona 2
strona 3
nowy proces
lista wolnych
ramek
15
13
13 strona 1
14
14 strona 0
15
15
16
16
strona 0
strona 1
strona 2
strona 3
nowy proces
17
18
19
20
21
17
18 strona 2
19
14
13
18
20
0
1
2
3
tablica stron
nowego procesu
20 strona 3
21
Implementacja Tablicy Stron (1)
☛Tablicę stron przechowuje się w pamięci
operacyjnej
☛Rejestr bazowy tablicy stron (ang. Page-table
base register - PTBR) wskazuje położenie tablicy
stron
☛Rejestr długości tablicy stron (ang. Page-table
length register - PTLR) wskazuje rozmiar tablicy
stron; zwartość ta jest badana w celu
sprawdzenia czy dany adres jest dozwolny
Implementacja Tablicy Stron (2)
☛Schemat ten wymaga dwóch kontaktów z
pamięcia w celu uzyskania dostępu do bajtu jeden do wpisu do tablicy stron, drugi do
danego bajtu. W większości przypadków takie
opóźnienie jest nie do zaakceptowania
☛Problem ten rozwiązuje się za pomocą
specjalnej, małej i szybko przeszukiwanej,
sprzętowej pamięci podręcznej zwanej
rejestrami asocjacyjnymi (ang. associative
registers ) lub buforami translacji adresów
stron (ang. translation look-aside buffers -TLBs)
Sprzęt stronicujący z TLB
adres
logiczny
CPU
p
f
d
numer
strony
numer
ramki
f0000....0000
trafienie
TLB
f
d
adres
fizyczny
TLB
f1111....1111
p
chybienie
TLB
f
pamięć
fizyczna
tablica stron
Rejestry asocjacyjne
☛ Równoległe wyszukiwanie
Nr strony
Nr ramki
Translacja adresu (A´, A´´)
☛Jeśli A´ jest w rejestrze asocjacyjnym to weź
odpowiadający mu numer ramki
☛W przeciwnym razie weź numer ramki z tablicy stron
Efektywny czas dostępu do
pamięci (EAT)
☛Przeglądnięcie rejestrów asocjacyjnych = ε
jednostek czasu
☛Niech cykl pamięci wynosi 1 jednostkę czasu
☛Współczynnik trafień (ang. hit ratio) – procent
numerów stron odnajdowywanych w rejestrach
asocjacyjnych; współczynnik zależy od liczby
rejestrów asocjacyjnych
☛Współczynnik trafień = α
☛Effective Access Time (EAT)
EAT = (1 + ε) α + (2 + ε)(1 – α)
=2+ε–α
Ochrona pamięci
☛Ochrona pamięci jest zaimplementowana za
pomocą bitów ochrony przypisanych każdej
ramce
☛Bit poprawności (ang. Valid-invalid bit) - każdy
wpis w tablicy stron zostaje uzupełniony o
dodatkowy bit:
☛“poprawny” (“valid” ) oznacza, że strona, z którą jest on
związany, znajduje się w logicznej przestrzeni adresowej
procesu, a więc jest ona dozwolona (ang. legal page)
☛“niepoprawny” (“invalid” ) oznacza, że strona nie należy
do logicznej przestrzenia adresowej procesu
Bit poprawności lub
niepoprawności
0
strona 0
strona 1
strona 2
strona 3
strona 4
10,468
12,287
bit
poprawności
numer
ramki
0
2
v
1
3
v
2
4
v
3
7
v
4
8
v
5
9
v
6
0
i
7
0
i
strona 5
tablica
stron
2
3
4
strona 0
strona 1
strona 2
5
6
7
8
9
strona 3
strona 4
strona 5
Stronicowanie wielopoziomowe
☛Logiczna przestrzeń adresowa na 32- bitowej
maszynie z rozmiarem strony 4KB (2^12)
powoduje, że tablica stron może zawierać do
miliona wpisów (2^32/2^12)
☛Ponieważ każda pozycja w tablicy stron ma 4B
więc każdy proces może wymagać do 4MB
fizycznej przestrzeni adresowej na samą tylko
tablicę stron
☛Jednym z rozwiązań jest stronicowanie
wielopoziomowe
Przykład dwupoziomowego
stronicowania (1)
☛Logiczna przestrzeń adresowa na 32bitowej maszynie z rozmiarem strony 4K
jest podzielona na:
☛20-bitowy numer strony
☛12-bitowa odległość na stronie
☛Ponieważ dzielimy tablicę stron na strony,
numer strony podlega dalszemu
podziałowi na:
☛10-bitowy numer strony
☛10-bitowa odległość na stronie
Schemat dwupoziomowej
tablicy stron
tablica
stron
0
1
1
500
.
.
.
100
100
.
.
.
500
708
.
.
.
708
929
zewnętrzna
tablica
stron
900
900
strona
tablicy
stron
pamięć
929
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Przykład dwupoziomowego
stronicowania (2)
☛Adres logiczny przyjmuje więc postać:
numer strony odległość na stronie
p1
p2
d
10
10
12
gdzie p1 jest indeksem do zewnętrznej
tablicy stron, a p2 oznacza przesunięcie
na stronie tej tablicy
Tłumaczenie adresu w 32b
dwupoziomowej architekturze
adres logiczny
p1
p2
d
p1
p2
zewnętrzna
tablica
stron
d
strona
tablicy
stron
Stronicowanie wielopoziomowe
a wydajność
☛Ponieważ każdy poziom jest zapamiętany jako
osobna tablica w pamięci więc przekształcenie
adresu logicznego na fizyczny może wymagać aż
czterech dostępów do pamięci
☛Zwiększyliśmy więc pięciokrotnie czas potrzebny
do wykonania jednego dostępu do pamięci,
zastosowanie pamięci podręcznej pozwala
utrzymać wydajność w rozsądnych granicach
Stronicowanie wielopoziomowe
a wydajność (c.d.)
☛Dla współczynnika α = 0.98, ε = 20 ns i czasu
dostępu do pamięci 100 ns otrzymujemy:
effective access time = 0.98 x 120 + 0.02 x 520
= 128 nanosekund.
Co stanowi jedynie 28-procentowe wydłużenie
czasu dostępu do pamięci mimo dodatkowych
poziomów przeszukiwania tablic
Haszowane tablice stron
☛Przestrzeń adresowa > 32 bitów?
☛Numer strony pamięci wirtualnej jest odwzorowany
(ang. hashed ) przy pomocy funkcji haszującej na
pozycje w tablicy (ang. hashed page table)
☛Wszystkie strony wirtualne którym odpowiada ta
sama pozycja w tablicy (kolizja) zostają
umieszczone na jednej liście (metoda łańcuchowa)
☛Element listy: numer strony wirtualnej (p), numer
strony pamięci (r), wskaźnik do następnego
elementu listy
Haszowanie - przykłady
☛Osiem pozycji w tablicy z haszowaniem o
etykietach: 0,1,2,3,4,5,6,7 (długość tablicy M=8)
☛Modularna funkcja haszująca - reszta z dzielenia
przez 8
☛Rozwiązywanie kolizji
☛liniową (ang. linear rehashing)
☛metodą łańcuchową (ang. overflow with chaining )
☛Średni długość przeszukania tablicy długości M
jednego z N elementów
☛liniowe haszowanie: 2 - 2N/M
☛łańcuchowe: 1+ (N-1)/2M
☛
Haszowanie liniowe
119
wartość (119)
50
0
1
50
wartość (50)
2
51
51
wartość (51)
3
74
74
wartość (74)
4
83
83
wartość (83)
5
95
-
119
95
6
wartość (95)
7
Haszowanie łańcuchowe
50
51
74
50
wartość (50)
83
51
wartość (51)
.
.
74
wartość (74)
83
wartość (83)
94
119
wartość (119)
95
139
wartość (139)
119
94
wartość (94)
95
wartość (95)
.
139
hash table
overflow table
.
-
Wyszukiwanie adresu strony w
tablicy z haszowaniem
adres logiczny
p
d
r
q
funkcja
haszująca
hash table
s
p
d
r
adres
fizyczny
...
pamięć
fizyczna
Odwrócona tablica stron
☛Odwrócona tablica stron (ang. inverted page
table) ma po jednej pozycji dla każdej
rzeczywistej strony pamięci (ramki)
☛Każda pozycja zawiera adres wirtualny strony
przechowywanej w ramce rzeczywistej pamięci
oraz informacje o procesie posiadającym stronę
☛Zmniejsza się rozmiar pamięci potrzebnej do
pamiętania wszystkich tablic stron, jednak
zwiększa się czas potrzebny do przeszukania
tablicy przy odwołaniu do strony
☛tablica haszowania (ang. hash table) - ogranicza szukanie
do jednego lub najwyżej kilku wpisów w tablicy stron
Odwrócona tablica stron
adres logiczny
CPU
pid
p
d
i
wyszukiwanie
d
adres
fizyczny
i
pid
p
pamięć
fizyczna
tablica stron
Strony dzielone
☛Dzielenie kodu
☛Jedna kopia kodu nie modyfikującego samego siebie tj.
wznawialnego (ang. reentrant) jest dzielona pomiędzy
procesy (np. editory tekstu, kompilatory, system okien)
☛Kod dzielony musi być widziany pod tą samą lokacją w
logicznej przestrzeni adresowej dla wszystkich procesów
☛Kod prywatny i dane
☛Każdy proces ma własną kopie kodu i danych
☛Strony dla prywatnego kodu i danych mogą się pojawić w
dowolnym miejscu logicznej przestrzeni adresowej
Dzielenie kodu w środowisku
stronicowanym
ed 1
ed 2
ed 3
dane 1
0
3
4
6
1
tablica stron
procesu P1
proces P1
ed 1
ed 2
ed 3
dane 2
proces P2
ed 1
ed 2
ed 3
dane 3
proces P3
3
4
6
2
tablica stron
procesu P3
3
4
6
7
tablica stron
procesu P2
1
dane 1
2
dane 3
3
ed 1
4
ed 2
5
6
ed 3
7
dane 2
8
9
10
11
Segmentacja
☛Segmentacja (ang. segmentation) to schemat
zarządzania pamięcią który urzeczywistnia
sposób widzenia pamięci przez użytkownika
☛Program jest zbiorem segmentów czyli
jednostek logicznych takich jak:
program główny,
procedura,
funkcja,
zmienne lokalne, zmienne globalne,
common block,
stos, tablica symboli, arrays
Program z punkty widzenia
użytkownika
podprogram
stos
tablica
symboli
funkcja
sqrt
program
główny
logiczna
przestrzeń
adresowa
Filozofia segmentacji
stos
podprogram
stos
podprogram
tablica
symboli
tablica
symboli
program
główny
logiczna
przestrzeń
adresowa
program
główny
pamięć
fizyczna
Adres logiczny - segmentacja
☛<numer segmentu, odległość>
☛Program użytkownika jest tłumaczony za
pomocą kompilatora, który automatycznie
konstruuje segmenty odpowiadające
programowi
☛Kompilator języka Pascal wytwarza segmenty
☛(1) zmienne globalne
☛(2) stosu wywołań procedur
☛(3) kod funkcji i procedur
☛(4) lokalne zmienne funkcji lub procedury
☛Program ładujący przydziela numery segmentów
Sprzęt do segmentacji
s
granica
baza
tablica segmentów
s
d
<
tak
+
nie
CPU
pułapka: błąd adresacji
pamięć fizyczna
Przykład segmentacji
stos
segment 0
segment 3
segment 0
funkcja
sqrt
tablica
symboli
segment 4
granica
baza
1000
400
400
1100
1000
1400
6300
4300
3200
4700
2400
3200
segment 3
tablica
segmentów
program
główny
4300
4700
segment 1
segment 2
segment 2
segment 4
logiczna
przestrzeń
adresowa
5700
6300
6700
segment 1
fizyczna przestrzeń adresowa
1400
podprogram
Implementacja segmentacji (1)
☛Adres logiczny składa się z dwu części :
<numer-segmentu, odległość w segmencie>,
☛Tablica segmentów (ang. segment table )– jest
wykazem par:
☛bazy – zawiera początkowy fizyczny adres segmentu w
pamięci
☛granica – oznacza długość segmentu
Implementacja segmentacji (2)
☛Rejestr bazowy tablicy segmentów (ang.
Segment-table base register -STBR) wskazuje na
tablicę segmentów w pamięci
☛Rejestr długości tablicy segmentów (ang.
Segment-table length register -STLR) oznacza
liczbę segmentów przypadających na program;
numer segmentu s jest poprawny jeśli s < STLR.
Implementacja segmentacji (3)
☛Relokacja
☛dynamiczna
☛za pomocą tablicy segmentów
☛Dzielenie
☛segmenty dzielone
☛ten sam numer segmentu
☛Alokacja
☛first fit/best fit
☛fragmentacja zewnętrzna
☛upakowanie możliwe w dowolnej chwili
Dzielenie segmentów w
pamięci segmentowanej
editor
pamięć
logiczna
procesu P1
granica baza
25286 43062
4425 68348
0
segment 0
1
tablica
segmentów
procesu P1
dane 1
segment 1
editor
68348
72773
dane 1
90003
editor
0
segment 0
pamięć
logiczna
procesu P2
43062
1
dane 2
segment 1
granica baza
25286 43062
8850 90003
tablica
segmentów
procesu P2
98553
dane 2
pamięć
fizyczna
Implementacja segmentacji (4)
☛Ochrona. Z każdym elementem tablicy
segmentów stowarzyszamy:
☛validation bit = 0 ⇒ segment niepoprawny
☛uprawnienia read/write/execute
☛Bity ochrony dołączone do każdego segmentu;
dzielenie kodu ma miejsce na tym samym
poziomie
☛Segmenty mają zmienną długość - problem
dynamicznej alokacji pamięci
Segmentacja ze
stronicowaniem – MULTICS
☛MULTICS rozwiązuje problemy fragmentacji
zewnętrznej i długich czasów przeszukiwań
poprzez stronicowanie segmentów
☛Rozwiązanie to różni się od czystej segmentacji
tym, że pozycja w tablicy segmentów nie
zawiera adresu bazowego lecz adres bazowy
tablicy stron dla tego segmentu
Segmentacja ze
stronicowaniem – Intel 386
☛Intel 386 (i późniejsze) stosuje segmentację ze
stronicowaniem do zarządzania pamięcią z
dwupoziomowym schematem stronicowania
☛Maksymalna liczba segmentów w procesie 16K
☛Każdy segment mniejszy niż 4GB
☛Rozmiar strony 4KB
Segmentacja – Intel 386 (c.d.)
☛Przestrzeń adresowa ma dwie strefy zawierające
po co najwyżej 8KB segmentów
☛prywatne segmenty procesu przechowywane w tablicy
lokalnych deskryptorów (ang. local descriptor table -LDT)
☛każda pozycja w LDT ma 8B
☛wspólne segmenty procesów przechowywane w globalnej
tablicy deskryptorów (ang. global descriptor table - GDT)
☛selektor jest 16b liczbą
☛13b - numer segmentu
☛1b - czy segment jest w LDT czy w GDT
☛2b - ochrona
☛każdy adres logiczny jest parą (selektor, odległość)
Segmentacja - Intel 386 (c.d.)
☛Procesor ma 6 rejestrów segmentów do
zaadresowania 6 segmentów oraz 6 rejestrów
mikroprogramowych (8b) do przechowywania
pozycji z LDT i GDT
☛Adres fizyczny ma 32b
☛rejestr wyboru wskazuje na pozycję w LDT lub GDT
☛na podstawie adresu początku segmentu i jego długości
tworzony jest adres liniowy (ang. linear address)
☛sprawdzenie poprawności ze względu na długość segmentu
☛jeśli adres jest poprawny to odległość dodaje się do
wartości bazowej
Segmentacja - Intel 386 (c.d.)
☛W procesorze 386 przyjęto stronicowanie
dwupoziomowe
☛adres liniowy składa się z
☛20b numeru strony
☛10b wskaźnik do katalogu stron
☛10b wskaźnik do tablicy stron
☛12b odległość na stronie
☛
Intel 30386-tłumaczenie adresu
selektor
offset
adres logiczny
+
deskryptor segmentu
tablica deskryptorów
katalog strona offset
adres liniowy
ramka strony
adres fizyczny
katalog stron
wpis katalogowy
rejestr bazowy
katalogu stron
tablica stron
pozycja tablicy stron
Ustalanie wielkości pamięci
☛ pagesize
☛ AIX
☛ lsattr -HE -l sys0 -a realmem
☛ FreeBSD
☛ grep memory /var/run/dmesg.boot
☛ HP-UX
☛ dmesg | grep Phys
☛ Linux
☛ free
☛ Solaris
☛ dmesg | grep mem
☛ True64
☛ vmstat | grep ‘^Total’
Monitorowanie wykorzystania
pamięci
☛vmstat
☛memory - swap lub free
☛page
☛re - liczba przywołanych stron pamięci
☛pi - liczba wczytanych stron
☛fr - liczba stron zwolnionych
☛po - liczba wypisanych stron
☛top
☛KDE System Guard (ksysguard)
Wyświetlanie obszarów
stronicowania
☛ AIX
☛ lsps -a
☛ FreeBSD
☛ pstat -s
☛ HP-UX
☛ swapinfo -t -a -m
☛ Linux
☛ cat /proc/swaps
☛ swapon -s ; free -m -o
☛ Solaris
☛ swap -l
☛ True64
☛ swapon -s
Obszary stronicowania
☛AIX w pliku /etc/swapspaces
☛FreeBSD w pliku /etc/fstab
☛HP-UX w pliku /etc/fstab
☛Linux w pliku /etc/fstab
☛Solaris w pliku /etc/vfstab
☛True64 w pliku /etc/sysconfigtab
Podsumowanie
☛Algorytmy zarządzania pamięcią
☛przydział ciągły
☛stronicowanie
☛segmentacja
☛połączenie stronicowania i segmentacji
☛Wybór algorytmu zależy od sprzętu
☛Aspekty które należy brać pod uwagę przy
porównywaniu strategii zarządzania pamięcią
☛Wspomaganie sprzętowe - rejestr bazowy i graniczny
(schemat z pojedyńczymi obszarami), segmentacja i
stronicowanie ( tablice do odwzorowywanie adresów)
Podsumowanie (c.d.)
☛Wydajność - segmentacja i stronicowanie mogą mieć
zaimplementową tablicę w szybkich rejestrach
☛Fragmentacja - wewnętrzna (stałe jednostki przydziału) i
zewnętrzna (zmienne jednostki przydziału)
☛Przemieszczanie - upakowanie likwiduje fragmentację
zewnętrzną (program jest przesuwany w pamięci)
☛Wymiana - pozwala na zwiększenie liczby procesów
☛Wspólne użytkowanie - wymaga stronicowania lub
segmentacji oraz starannego zaprojektowania
☛Ochrona - różne sekcje programu mogą być określone jako
wyłącznie do czytania, wykonywania lub czytania i pisania

Podobne dokumenty