Zarządzanie pamięcią

Z Wikipedii, wolnej encyklopedii

Zarządzanie pamięcią – sposób zarządzania pamięcią komputera z poziomu systemu komputerowego. Głównym wymaganiem stawianym procesowi zarządzania pamięcią jest dostarczenie możliwości dynamicznego alokowania pamięci oraz jej zwalniania, gdy już nie jest potrzebna. Jest to kluczowe wymaganie dla zaawansowanych systemów, w których jednocześnie uruchomionych jest wiele procesów[1].

Opracowano różne metody, które zwiększają efektywność zarządzania pamięciową. Jedną z nich jest mechanizm pamięci wirtualnej, który pozwala na odseparowanie adresów logicznych, używanych przez proces, od adresów fizycznych. Mechanizm ten ułatwia tworzenie rozbudowanych aplikacji oraz zwiększa efektywność wykorzystania pamięci RAM, pozwalając na używanie stronicowania pamięci oraz rozszerzenie dostępnej pamięci za pomocą pamięci zewnętrznej. Sposób zrealizowania mechanizmu pamięci wirtualnej może mieć istotny wpływ na działanie całego systemu.

Dynamiczna alokacja pamięci[edytuj | edytuj kod]

Szczegóły[edytuj | edytuj kod]

W przypadku pojawienia się żądania alokacji pamięci, znajdowany jest blok nieużywanej pamięci, który ma odpowiedni rozmiar. Alokowana pamięć pochodzi z dużej puli pamięci, zwanej stertą. Zazwyczaj, podczas działania systemu, część sterty jest używana przez pracujące procesy, podczas gdy pozostała część jest wolna i to właśnie ona zostanie zaalokowana, gdy pojawi się żądanie.

Niestety, w procesie alokacji pamięci pojawia się kilka problemów. Jednym z nich jest zjawisko fragmentacji zewnętrznej. Jest ona związana z występowaniem wielu małych kawałków wolnej pamięci, pomiędzy obszarami już zaalokowanymi. Może się zatem zdarzyć sytuacja, w której łączna ilość wolnej pamięci byłaby wystarczająca na zaspokojenie żądania, jednak nie jest możliwy przydział spójnego kawałka pamięci o żądanej wielkości. W przypadku występowania fragmentacji zewnętrznej, konieczne staje się scalanie wolnych obszarów pamięci. Scalanie takie nazywane jest kompaktyfikacją lub upakowaniem[2].

Strategie przydziału pamięci[edytuj | edytuj kod]

Istnieją różne strategie wybierania, z którego obszaru przydzielić pamięć procesowi, który jej żąda.

Pierwsze dopasowanie[edytuj | edytuj kod]

Najprostsza możliwa strategia: wybierany jest pierwszy napotkany obszar, którego wielkość jest wystarczająca, aby zaspokoić żądanie procesu[3].

Najlepsze dopasowanie[edytuj | edytuj kod]

Wybierany jest najmniejszy wolny obszar, który jest wystarczająco duży. Dzięki temu, po przydzieleniu takiego obszaru, nadmiarowa część, której proces nie potrzebuje będzie najmniejsza. W ten sposób zmniejsza się możliwość wystąpienia fragmentacji wewnętrznej[4].

Algorytm bliźniaków[edytuj | edytuj kod]

Aby można było skorzystać z algorytmu bliźniaków, rozmiar bloku pamięci musi być potęgą liczby 2. W strategii tej przechowuje się listę wolnych obszarów pamięci danej wielkości. Początkowo jest to jeden obszar rozmiaru W przypadku żądania alokacji pamięci mniejszego rozmiaru niż jeden z dostępnych, pamięć dzielona jest na dwie połowy, tworząc w ten sposób parę „bliźniaków”. Podobnie, bardzo łatwo można połączyć bliźniacze obszary w jeden, dwukrotnie większy[5].

Pamięć wirtualna[edytuj | edytuj kod]

Pamięć wirtualna jest sposobem odseparowania pamięci logicznej od pamięci fizycznej. Procesy używają adresów pamięci logicznej, które są tłumaczone na odpowiednie adresy pamięci fizycznej. Dzięki takiemu zabiegowi, proces ma wrażenie operowania na spójnym obszarze pamięci, podczas gdy w rzeczywistości nie tworzy ona spójnego obszaru w pamięci fizycznej. Zarówno pamięć logiczna, jak i fizyczna podzielona jest na kawałki równej wielkości, które w odniesieniu do pamięci logicznej nazywane są stronami, a w odniesieniu do pamięci fizycznej ramkami.

Podział pamięci logicznej na strony jest niewidoczny dla procesu. Translacją adresów logicznych na fizyczne zajmuje się jednostka zarządzania pamięcią[6].

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. Steve Gibson, Tech Talk: Placing the IBM/Microsoft XMS Spec Into Perspective [online] (ang.).
  2. Krzysztof Stencel. Systemy operacyjne, Wydawnictwo PJWSTK, Warszawa 2004, s. 101–102.
  3. Krzysztof Stencel. Systemy operacyjne, Wydawnictwo PJWSTK, Warszawa 2004, s. 102.
  4. Krzysztof Stencel. Systemy operacyjne, Wydawnictwo PJWSTK, Warszawa 2004, s. 103.
  5. A.M. Lister, R.D. Eager. Wprowadzenie do systemów operacyjnych, Wydawnictwa Naukowo-Techniczne, Warszawa 1994, s. 95–96.
  6. Krzysztof Stencel. Systemy operacyjne, Wydawnictwo PJWSTK, Warszawa 2004, s 105.