42. Przedstaw fazy życia programu, w których następuje wiązanie adresów logicznych z fizycznymi adresami pamięci operacyjnej.
Wiązanie rozkazów i danych z adresami pamięci może być dokonane w dowolnym z trzech kroków:
1.Faza kompilacji: Jeżeli a priori znane jest miejsce, w którym proces będzie przebywał w pamięci, to można wygenerować kod bezwzględny(absolute code); zmiana położenia kodu w pamięci wymaga jego rekompilacji. 2.Faza ładowania: Jeżeli przyszłe położenie procesu w pamięci nie jest znane podczas kompilacji, to kompilator musi generować kod przemieszczalny(relocatable code); wiązanie adresów następuje w czasie ładowania kodu.
3.Faza wykonania: Jeżeli proces podczas wykonania może być przemieszczany w pamięci, to wiązanie adresów musi być opóźnione do czasu wykonania –wymaga to specjalnego sprzętu (stosowane w większości systemów).
43. Co to są adresy logiczne i fizyczne pamięci? Przedstaw jedną z metod ich wzajemnego przekształcania.
Adresy logiczne (wirtualne) – adresy generowane przez CPU
Adresy fizyczne –adresy widziane przez jednostkę pamięci.
Adresy logiczne i fizyczne są: takie same – w schematach wiązania adresów podczas kompilacji i ładowania; różne – w schematach wiązania adresów podczas wykonywania.
Zbiór wszystkich adresów logicznych generowanych przez program nazywa się logiczną przestrzenią adresową, a zbiór odpowiadających im adresów fizycznych –fizyczną przestrzenią adresową.
Odwzorowywanie adresów logicznych na fizyczne jest dokonywane przez jednostkę zarządzania pamięcią (memory-management unit –MMU) –jest to urządzenie sprzętowe. Do każdego adresu generowanego przez proces użytkownika w chwili odwołania się do pamięci dodawana jest wartość rejestru przemieszczenia (relocation register). Program użytkownika działa na adresach logicznych, nigdy nie ma do czynienia z rzeczywistymi adresami fizycznymi.
44. Wyjaśnij pojęcia: fragmentacja zewnętrzna, fragmentacja wewnętrzna. Podaj przykłady sytuacji, w których mogą wystąpić.
Fragmentacja zewnętrzna (external fragmentation): Suma wolnych obszarów w pamięci wystarcza na spełnienie zamówienia, ale nie tworzą one spójnego obszaru.
Reguła 50 procent–w strategii pierwszego dopasowania z powodu fragmentacji straty wynoszą zwykle ok. 50% tego co zostało przydzielone.
Fragmentacja wewnętrzna (internal fragmentation): Przydzielona pamięć może być nieco większa niż zamawiana (nie opłaca się trzymać informacji o bardzo małych dziurach) –ten naddatek znajduje się wewnątrz przydzielonego obszaru, ale jest niewykorzystywany.
Fragmentację zewnętrzną można redukować przez upakowanie:
Przetasowanie pamięci tak, aby cała wolna pamięć była w jednym bloku.
Upakowanie jest możliwe tylko przy dynamicznym wiązaniu adresów wykonywanym podczas działania procesu.
Algorytm upakowania może być dość kosztowny.
Wybranie optymalnej strategii upakowywania jest dosyć trudne.
Dodatkowe trudności pojawiają się kiedy w systemie występuje wymiana, np. problem przywrócenia procesu o statycznie ustalanych adresach.
45. Co to jest i na czym polega stronicowanie pamięci?
Inne rozwiązanie problemu fragmentacji zewnętrznej – dopuszczenie do nieciągłości logicznej przestrzeni adresowej, tzn. przydzielanie procesowi dowolnych dostępnych miejsc pamięci fizycznej, ale określonymi porcjami.
Pamięć fizyczna podzielona jest na bloki o stałej długości zwane ramkami (frames); rozmiar zwykle jest potęgą 2, między 512 B a 16 MB.
Pamięć logiczna podzielona jest na bloki takiego samego rozmiaru zwane stronami (pages)
System utrzymuje informację o wolnych i przydzielonych ramkach w tablicy ramek (a także do jakiego procesu – lub procesów – ramka jest przydzielona).
Strony uruchamianego procesu przebywające w pamięci pomocniczej są wprowadzane w wolne ramki pamięci operacyjnej(program rozmiaru n stron potrzebuje n ramek –mogą być w dowolnym miejscu pamięci fizycznej)
Eliminuje się fragmentację zewnętrzną, ale pozostaje fragmentacja wewnętrzna.
Adres logiczny generowany przez procesor składa się z dwóch części:
numer strony s(page number) –indeks w tablicy stron; tablica stron zawiera adresy bazowe wszystkich stron w pamięci operacyjnej.
odległość na stronie o (page offset) – w połączeniu z adresem bazowym daje adres fizyczny pamięci, który jest wysyłany do jednostki pamięci.
46. Co to jest i na czym polega segmentacja pamięci?
Segmentacja jest schematem zarządzania pamięcią urzeczywistniającym sposób widzenia pamięci przez użytkownika.
•Przestrzeń adresów logicznych jest zbiorem segmentów.
Segment to jednostka logiczna, taka jak:, program główny, procedury, funkcje, metody, obiekty, stosy, wykazy, tablice, zmienne lokalne i globalne itd.
Dla ułatwienia implementacji segmenty są ponumerowane.
•Adres logiczny: <numer_segmentu, odległość>
Tablica segmentów: odwzorowuje dwuwymiarowe adresy logiczne w jednowymiarowe adresy fizyczne. Każda pozycja składa się z dwu części:
Baza segmentu –zawiera początkowy adres fizyczny segmentu w pamięci;
Granica segmentu –określa długość segmentu.
Co to jest pamięć wirtualna i jak jest ona implementowana w systemach operacyjnych?
Pamięć wirtualna jest techniką, która umożliwia wykonywanie procesów, pomimo że nie są one w całości przechowywane w pamięci operacyjnej. Pozwala stworzyć abstrakcyjną pamięć główną w postaci olbrzymiej, jednolitej tablicy i odseparować pamięć logiczną od pamięci fizycznej.
Pamięć wirtualna jest najczęściej implementowana w formie:
Stronicowania na żądanie (demand paging);
Segmentacji na żądanie (demand segmentation) –rzadziej, np. IBM OS/2.
48. Co to jest stronicowanie na żądanie? Podaj przykład jego zastosowania.
Procesy podzielone na strony przebywają w pamięci pomocniczej (zwykle dysk).
•Strona jest sprowadzana z pamięci pomocniczej do operacyjnej tylko wtedy, kiedy jest potrzebna.
Mniej operacji WE/WY koniecznych do załadowania i wymiany programu.
Mniejsze zapotrzebowanie na pamięć.
Krótszy czas odpowiedzi.
Równocześnie może pracować większa liczba procesów/użytkowników.
49. Jak realizowane jest w systemach operacyjnych zastępowanie stron?
Zastępowanie stron (page replacement):
1.Zlokalizowanie potrzebnej strony na dysku.
2.Wykonanie algorytmu zastępowania stron w celu wytypowania ramki-ofiary (victim frame).
3.Zapisanie strony-ofiary na dysku oraz stosowna modyfikacja tablicy stron i tablicy ramek.
4.Wczytanie potrzebnej strony do zwolnionej ramki oraz modyfikacja tablicy stron i tablicy ramek.
5.Wznowienie działania procesu.