240 likes | 524 Views
Systemy operacyjne. Algorytmy przydziału pamięci - ćwiczenia. dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz. Wstęp. W systemie wieloprogramowym procesy, które działają powinny mieć wydzielone – rozłączne obszary pamięci.
E N D
Systemy operacyjne Algorytmy przydziału pamięci - ćwiczenia dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz
Wstęp W systemie wieloprogramowym procesy, które działają powinny mieć wydzielone – rozłączne obszary pamięci. W najprostszym przypadku zakładamy, że każdy proces posiada stały rozmiar potrzebnej pamięci. Proces może być w stanie aktywnym tylko wtedy, gdy program jest załadowany do pamięci. W przeciwnym wypadu musi poczekać. System operacyjny musi zdecydować, czy dla ładowanego procesu jest wystarczająca ilość pamięci, a jeśli tak, to który jej obszar przydzielić. W najprostszym przypadku przydzielany obszar musi być ciągły
Przydział dynamiczny Załóżmy że w kolejce procesów gotowych systemu, który stosuje szeregowanie FCFS jest 5 procesów, które potrzebują odpowiednio: P1 – 600KB, P2 – 1000KB, P3 – 300KB, P4 – 700KB i P5 – 500KB pamięci. Dostępnych jest tylko 2560KB pamięci operacyjnej. Można ją przydzielić od razu pierwszemu, drugiemu i trzeciemu procesowi. W pamięci zostanie dziura (D), miejsce wolne, które będzie nie wystarczające, dla żadnego z pozostałych procesów. Będą musiały poczekać, aż zakończy sie jeden z trzech procesów, które są już w pamięci. Jako pierwszy zakończył się proces drugi. W pamięci powstają zatem dwa ciągłe obszary wolne. Okazuje sie, ze dziurę po P2 można przydzielić tylko jednemu z procesów, z kolejki. Tym procesem będzie proces P4.
Przydział dynamiczny - przykład Po tym przydziale w pamięci operacyjnej nadal istnieją dwie dziury, o sumarycznej wielkości 560KB. Ta wielkość spełnia wymagania programu piątego (500KB), ale ponieważ te dziury nie tworzą obszaru spójnego, to nie można ich przydzielić temu procesowi. Następnym procesem, który zakończy swa prace będzie proces P1. Po jego zakończeniu w pamięci operacyjnej pojawia się ciągły obszar wolny o wielkości 600KB, co pozwala na spełnienie zapotrzebowania na pamięć ze strony procesu piątego. Z tej dziury procesowi P5 zostanie przydzielone dokładnie 500KB. Po wykonaniu ostatniego z przydziałów w pamięci operacyjnej powstają trzy niespójne wolne obszary o łącznej pojemności 660KB. Powstaje fragmentacja zewnętrzna.
Fragmentacja pamięci Zjawisko występuje powszechnie w systemach, które stosują dynamiczny przydział pamięci. Rozróżniamy dwa rodzaje tego zjawiska: Fragmentacja wewnętrzna Występuje, gdy procesowi przydzielane jest więcej pamięci, niż on potrzebuje. Ta dodatkowa pamięć nie będzie nigdy przez niego wykorzystana. Przydział taki może być podyktowany względami ekonomicznymi: nie jest opłacalne utrzymywanie 2 bajtowej dziury w pamięci, jeśli należy zapamiętać o wiele więcej informacji o niej. Fragmentacja zewnętrzna Występuje, gdy w pamięci operacyjnej istnieje wiele obszarów wolnych, których sumaryczna wielkość pozwalałaby na spełnienie zadania przydziału pamięci przez proces, ale każdy z osobna z tych obszarów ma zbyt mała pojemność, żeby to było możliwe. Obliczanie fragmentacji zewnętrznej
Strategie wyboru dziury SO utrzymuje ewidencję wolnych oraz zajętych obszarów pamięci i na bieżąco podejmuje decyzję, który z wolnych obszarów przydzielić czekającym procesom. To planowanie wymaga określenia strategii wyboru dziury, jeśli jest ich wiele. Pierwsza pasująca (ang. first-fit) Przydzielana jest pierwsza dziura, która spełnia wymagania procesu co do rozmiaru. Jej poszukiwanie może rozpoczynać się zawsze od początku wykazu miejsc wolnych lub od miejsca ostatniego przydziału (ang. next-fit). Najlepiej pasująca (ang. best fit) Przydziela sie dziurę, która dokładnie spełnia wymagania co do rozmiaru, lub dla której różnica miedzy jej rozmiarem, a rozmiarem wymaganym jest najmniejsza spośród pozostałych dziur. Najgorzej pasująca (ang. worst fit) przydziela sie największą dziurę w systemie. Zakłada się, że proces zażąda w czasie wykonania dodatkowej pamięci. Przy zastosowaniu tej strategii istnieje duże prawdopodobieństwo, ze zadanie to zostanie od razu zrealizowane. Symulacje wykazały, że najlepsze rezultaty uzyskuje się przy zastosowaniu strategii Pierwsza pasująca i Najlepiej pasująca. Z praktycznego punktu widzenia ta pierwsza jest lepsza ponieważ działa szybciej.
Zadanie • Załóżmy, że w systemie jest 2048kB pamięci. • Przydziel pamięć dynamicznie stosując strategie: • first-fit, • best-ft, • worst-fit. • Narysuj wykresy czasowe pamięci i oblicz fragmentację zewnętrzną przy każdym przełączniu
Stronicowanie Stronicowanie (ang. paging) jest systemem zarządzania pamięcią, który rozwiązuje problem zewnętrznej fragmentacji pamięci pozwalając, aby pamięć przydzielana była nieciągła. Pamięć fizyczna jest podzielona na ramki (ang. frame) o stałym rozmiarze, będącym potęgą dwójki (512B – 4KB). Przestrzeń adresowa procesu jest podzielona na strony (ang. page), rozmiar strony jest równy rozmiarowi ramki. I–tej stronie w przestrzeni adresowej procesu odpowiada K-taramka. Dla dowolnego I, K może być dowolne.
Przykład stronicowania Aby proces mógł być załadowany do pamięci musi jedynie istnieć odpowiednia liczba wolnych ramek dla niego. Strony w ramkach nie musza być umieszczane po kolei, fizycznie pamięć procesu nie musi być ciągła. Po lewej stronie znajduje się pamięć logiczna, w środku tablica stron, a po prawej pamięć fizyczna. Stronicowanie eliminuje całkowicie fragmentację zewnętrzną, ale nie jest odporne na fragmentacje wewnętrzną. Ta fragmentacja dotyczy ostatniej ramki przydzielonej procesowi i w skrajnych przypadkach może wynosić rozmiar strony minus jeden bajt.
Przykład stronicowania W pamięci procesy A, B. Załaduj C. W pamięci procesy A, B, C. Zakończ B. W pamięci procesy A, C. Załaduj D. Struktury systemu po załadowaniu D.
Zadanie Pamięć składa się z 16 stron po 4kB (razem 64kB). Jak będą umieszczane strony procesów w tej pamięci (first Fit) ? Wykonaj rysunki stron w ramkach dla odpowiednich chwil czasowych oraz oblicz fragmentację wewnętrzną
Idea pamięci wirtualnej System operacyjny pozwala na wykorzystanie pamięci o pojemności większej od zainstalowanej pamięci RAM, dzięki wykorzystaniu przestrzeni dysku twardego. Mechanizm ukryty przed procesami użytkownika. Proces “widzi” logiczną przestrzeń adresową od 0 do max_address Obszary logicznej przestrzeni adresowej, do których proces często się odwołuje przechowywane są w pamięci RAM. Obszary, do których proces odwołuje się rzadko, są na dysku. System operacyjny bez współpracy procesu przesyła dane do oraz z dysku. Metody implementacji pamięci wirtualnej (ang. virtualmemory) Stronicowanie na żądanie (ang. demandpaging) Segmentacja (na żądanie) Segmentacja stronicowana (na żądanie)
Przechowywanie stron na dysku Ciągły obszar w przestrzeni wymiany odpowiada logicznej przestrzeni adresowej. Numer ramki w tablicy stron identyfikuje przy pomocy tablicy pomocniczej numer bloku dyskowego.
Zastępowanie stron Problem podczas obsługi błędu strony – zabrakło wolnych ramek w pamięci. Rozwiązania: – Zawiesić proces, który żąda strony lub: – Wymiana stron Wymiana stron polega na odnalezieniu strony-ofiary, co do której istnieje podejrzenie, że nie będzie używana (już wcale lub w najbliższym czasie), wysłaniu jej do przestrzeni wymiany i sprowadzeniu w jej miejsce żądanej strony. Należy więc uzupełnić scenariusz obsługi błędu strony o następujące czynności: Jeśli nie istnieje wolna ramka, należy wytypować ramkę-ofiarę. Jeżeli ta strona w rej ramce została zmodyfikowana (D==1), jest zapisywana na dysku i aktualizowana jest tablic stron. Do zwolnionej ramki wczytywana jest żądana strona. Wybór strony-ofiary jest wykonywany przez algorytm zastępowania stron (ang. pagereplacement).
Algorytmy zastępowania stron Kryterium: Minimalizacja liczby błędów stron. Test algorytmu: za pomocą wygenerowanego losowo ciągu odwołań (ang. referencestring), czyli ciągu numerów stron, do których hipotetyczny program mógłby się odwoływać. Należy również założyć pewną liczbę wolnych ramek, którymi będzie dysponował ten program. Badanie przeprowadza się dla kilku różnych wartości tego czynnika, co pozwala sprawdzić, czy algorytm zachowuje sie poprawnie, tzn. czy wraz ze wzrostem liczby ramek maleje liczba błędów stron. W przykładach wykorzystamy ciąg odwołań : 1, 2, 3, 4, 1, 2, 5, 1, 2, 5, 1, 2, 3, 4, 5
Algorytm FIFO Zastąp stronę, która została sprowadzona jako pierwsza do pamięci. Sprowadzone strony tworzą kolejkę. Kolejność odwołań: 1, 2, 3, 4, 1, 2, 5, 1, 2, 5, 1, 2, 3, 4, 5. Jeżeli procesowi przydzielono trzy ramki: Jeżeli procesowi przydzielono cztery ramki:
Algorytm FIFO drugiej szansy Algorytm drugiej szansy jest to modyfikacja algorytmu FIFO W standardowym algorytmie FIFO wybierana jest pierwsza strona z kolejki W algorytmie drugiej szansy sprawdzany jest bit odniesienia R. – Jeżeli R==0 (brak odniesienia) to strona jest wybierana na ofiarę. – Jeżeli R==1 (odniesienie) to: ● R = 0 ● Strona przesunięta jest na koniec kolejki (“otrzymała drugą szansę”). ● Przechodzimy do kolejnej strony w kolejce.
Algorytm drugiej szansy Jeżeli procesowi przydzielono trzy ramki: FIFO
Algorytm drugiej szansy Jeżeli procesowi przydzielono cztery ramki: FIFO
Algorytm optymalny Algorytm teoretyczny – powoduje najmniejszą liczbę wymian stron, a zarazem najmniejszą liczbę błędów stron. Zastąp stronę, do której nie będziemy się odwoływać przez najdłuższy czas. W praktyce – nie możliwe jest przewidzenie, która ze stron będzie najdłużej potrzebna Algorytm ten zwany OPT lub MIN jest stosowany do porównywania innych algorytmów i badania i stopnia, w jakim go przybliżają.
Algorytm optymalny Kolejność odwołań: 1, 2, 3, 4, 1, 2, 5, 1, 2, 5, 1, 2, 3, 4, 5. Jeżeli procesowi przydzielono trzy ramki: Jeżeli procesowi przydzielono cztery ramki:
Algorytm LRU Algorytm LRU (ang. LeastRecentlyUsed) wymienia tę stronę, która najdawniej była używana. Stanowi on w pewnym sensie odwrotność działania algorytmu OPT. Algorytm OPT „patrzy w przyszłość”, żeby znaleźć stronę do wymiany, a algorytm LRU „patrzy w przeszłość”. Przybliżenie – algorytm MFU (ang. Most FrequentlyUsed) - wymienia on tę stronę, do której najczęściej się odwoływano, wychodząc z założenia, że nie będzie już potrzebna. LRU: Jeżeli procesowi przydzielono trzy ramki: Kolejka
Algorytm LRU Jeżeli procesowi przydzielono cztery ramki: Kolejka
Zadanie Zakładamy, że proces odwołuje się kolejno do stron 2, 1, 3, 4, 1, 2, 5, 3, 2, 3, 4, 5 i mamy cztery dostępne ramki dla tego procesu. Zaprezentuj algorytm FIFO, LRU, OPT wymiany stron. Oblicz, ile jest błędów strony w każdym przepadku