ZARZĄDZANIE PAMIĘCIĄ OPERACYJNĄ
Najważniejsza po jądrze część systemu
Nie można wykonać programu dla którego nie ma miejsca w pamięci
Nie można wykonywać operacji wejścia wyjścia, jeśli brakuje miejsca dla buforów
CELE ZARZĄDZANIA PAMIĘCIĄ
Przemieszczanie procesów
Ochrona zawartości pamięci
Dostęp do obszarów dzielonych
Organizacja logiczna pamięci
Organizacja fizyczna pamięci
PAMIĘĆ WIRTUALNA
odwzorowanie adresów “address map”
przestrzeń adresów N
przestrzeń pamięci P
f: N->P
REJESTRY: BAZOWY I GRANICZNY
if a<0 then przekroczony zakres pamięci
a' := B+a
if a'>granica then przekroczony zakres pamięci
REJESTRY: BAZOWY I GRANICZNY
if a<0 or a>długość then przekroczony zakres pamięci
a' := B+a
STRONICOWANIE PAMIĘCI
wykonywanie operacji odwzorowywania adresów, czyli określanie, do której strony odnosi się adres w programie, oraz znajdowanie (o ile taka istnieje) ramki strony, którą bieżąco zajmuje dana strona;
przesyłanie - w zależności od potrzeby - stron z pamięci pomocniczej do pamięci głównej oraz odsyłanie nie używanych już stron z powrotem z pamięci głównej do pomocniczej.
ALGORYTM WYMIANY
Niezbędne informacje:
-ile razy wystąpiło odniesienie do tej strony
-czas ostatniego odniesienia do strony;
-czy na tej stronie coś zapisywano.
SEGMENTACJA PAMIĘCI
tablica segmentów
deskryptory segmentu
Uproszczona postać odwzorowania -wydziel w programie adres (s,a);
-użyj s do indeksowania tablicy segmentów;
-if a<0 or a>d then przekroczony zakres pamięci;
-(b+a) jest szukanym adresem komórki pamięci.
SEGMENTACJA - STRONICOWANIE
Celem segmentacji jest logiczny podział przestrzeni adresów, podczas gdy celem stronicowania jest fizyczny podział pamięci, którą chcemy implementować na tym samym poziomie.
Strony mają ustalony rozmiar wynikający z architektury maszyny, podczas gdy rozmiar segmentów może być dowolny, określony przez programistę.
Podział adresu programu na numery strony i bajtu jest wykonywany środkami sprzętowymi, a przekroczenie zakresu dla numeru bajtu automatycznie powoduje zwiększenie numeru strony.
Natomiast podział adresu programu na numery segmentu i bajtu jest logiczny, a przekroczenie adresu dla numeru bajtu nie ma żadnego wpływu na numer segmentu.
STRATEGIE PRZYDZIAŁU PAMIĘCI
Strategie wymiany
Strategie pobierania
Strategie rozmieszczania
STRATEGIE ROZMIESZCZANIA DLA SYSTEMÓW BEZ STRONICOWANIA
Najlepsze dopasowanie
Najgorsze dopasowanie
Pierwsze dopasowanie
Algorytm bliźniaków
NAJLEPSZE DOPASOWANIE
Dziury uporządkowane są rosnąco: x1<=x2<=…<=xn
znajdź najmniejsze takie i, że - s<= xi
NAJGORSZE DOPASOWANIE
Dziury uporządkowane są malejąco: u x1>=x2>=…>=xn
umieść segment w pierwszej dziurze, a dziurę utworzoną przez pozostały fragment przestrzeni dowiąż do odpowiedniego elementu list dziur
PIERWSZE DOPASOWANIE
Dziury uporządkowane są rosnąco pod względem ich adresów bazowych
znajdź najmniejsze takie i, że - s<= xi
ALGORYTM BLIŹNIAKÓW
S=2i dla pewnego i mniejszego niż k.
Utrzymuje się odrębne listy dla dziur o rozmiarach: 21, 22, …, 2k.
Dziurę można usunąć z listy o numerze (i+1), jeśli podzieli się ją na dwie połowy, tworząc w ten sposób parę “bliźniaków” o rozmiarach 2i.
I odwrotnie parę “bliźniaków” można usunąć z listy o numerze i, jeśli połączy się bliźniacze dziury w jedną, którą umieści się na liście o numerze (i+1).
Algorytm znajdowania dziury mającej rozmiar 2i jest rekurencyjny:
procedure znajdź_dziurę(i);
begin if i=k+1 then błąd;
if lista(i) pusta then begin znajdź_dziurę(i+1);
podziel dziurę na bliźniaki;
umieść bliźniaki w_lista(i)
end;
pobierz pierwszą dziurę z_lista(i)
end;
STRATEGIE ROZMIESZCZANIA DLA SYSTEMÓW BEZ STRONICOWANIA
Najlepsze dopasowanie
Najgorsze dopasowanie
Pierwsze dopasowanie
Algorytm bliźniaków
STRATEGIE ROZMIESZCZANIA DLA SYSTEMÓW ZE STRONICOWANIEM
Dużo prostsze, ponieważ wszystkie strony mają taki sam rozmiar jak ramki stron
Występuje fragmentacja wewnętrzna
STRATEGIE WYMIANY DLA SYSTEMÓW ZE STRONICOWANIEM
Najdawniej używana strona
Najmniej używana strona
Najdawniej załadowana strona
STRATEGIE WYMIANY DLA SYSTEMÓW BEZ STRONICOWANIA
główny cel jest taki sam - chcemy wymienić ten segment, do którego będzie prawdopodobnie najmniej odniesień w najbliższej przyszłości
najprostszy algorytm polega na zastąpieniu jednego segmentu (jeżeli taki istnieje) oraz sąsiedniej dziury, których łączny obszar wystarczy do pomieszczenia nowego segmentu. Gdy takich segmentów jest kilka, wówczas można skorzystać z jednej z omawianych strategii wyboru odpowiedniego segmentu. Jeżeli nie ma ani jednego dostatecznie dużego segmentu, to trzeba usunąć kilka segmentów; przypuszczalnie najlepiej wybrać najmniejszy zbiór sąsiadujących ze sobą segmentów, których wspólny obszar wystarczy do załadowania nowego segmentu.
STRATEGIE POBIERANIA Z PAMIĘCI POMOCNICZEJ
Kiedy przesłać blok informacji z pamięci pomocniczej do głównej ?
-strategie pobierania na żądanie
-strategie pobierania przewidującego
1.znajomość właściwości konstrukcji programu
2.wnioskowaniu z dotychczasowego przebiegu procesu
DZIAŁANIE W KONTEKŚCIE
W dowolnie małych przedziałach czasu program działa wewnątrz konkretnego modułu logicznego, wykonując rozkazy należące do jednej procedury lub pobierając dane z jednego obszaru.
Zasada lokalności: „występujące w programie odniesienia do pamięci wykazują tendencję do grupowania się w małych obszarach przestrzeni adresów, a do zmiany tych obszarów dochodzi tylko okresowo”
MODEL ZBIORU ROBOCZEGO
Szamotanie - większość procesów będzie zablokowana z powodu oczekiwania na przesłanie strony
Zbiór roboczy - każdy proces musi mieć w pamięci głównej pewną minimalną liczbę stron, zanim będzie mógł efektywnie używać procesora centralnego
r(t, h) = {strona i | strona i Î N oraz strona i występuje w h ostatnich odwołań}
Wykonuj proces tylko wtedy, gdy cały zbiór roboczy znajduje się w pamięci głównej, i nigdy nie usuwaj z niej stron, które są częścią zbioru roboczego jakiegoś procesu
.