Fragmentacja pamięci: Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
m zmniejszony wsp. lania wody
m styl
Linia 1:
'''Fragmentacja pamięci''' - w [[informatyka|informatyce]] niekorzystne zjawiska pojawiające się podczas zarządzania pamięcią operacyjną bądź dyskową:
# '''Fragmentacja wewnętrzna'''. WynikajaWynika z natury zarządców pamięci, które albo z przyczyn technicznych, albo wydajnościowych, nie operują na obszarach o dowolnym rozmiarze, lecz blokach danych będących wielokrotnością określonej liczby [[bajt]]ów. Np. na [[dysk twardy|dyskach twardych]] jednostką jest sektor (mający zwykle pół kilobajta), [[system plików|systemy plików]] operują na [[klaster dyskowy|klastrach]] składających się z kilku-kilkunastu sektorów dyskowych, [[system operacyjny|systemy operacyjne]] przydzielają aplikacjom [[stronicowanie pamięci|strony]] (np. w procesorach [[x86]] strona ma rozmiar 4kB), zaś wewnętrznie aplikacje zwykle alokują pamięć w jednostkach kilku, kilkunastu bajtów (np. w bibliotece [[GNU]] [[libc]] to 8 lub 16 bajtów). Ponieważ przydzielana jest pamięć o rozmiarze zaokrąglonym w górę do wielokrotności rozmiaru bloku, toteż nadwyżka po pierwsze nie jest używana przez aplikację, po drugie zaś zarządca pamięci nie może jej oddać innej aplikacji. Pamięć taka jest marnowana - np. plik o rozmiarze 1 bajta w istocie zajmie cały klaster, czyli kilka kB - i te kilka kB minus 1 bajt pozostanie niewykorzystane, podobnie jeśli program zażąda od systemu operacyjnego przydzielenia 1 bajta, otrzyma całą stronę.
# '''Fragmentacja zewnętrzna''' pojawia w trakcie działania aplikacji, gdy dochodzi do szeregu przydzielania i zwalniania bloków pamięci o różnej wielkości, toteżskutkiem czego po pewnym czasie bloki wolne i zajęte są przemieszane. Niesie to dwa skutkiproblemy:
#* Współczesne dyski jak i [[mikroprocesor]]y potrafią niwelować opóźnienia odczytu i zapisu (m.in. dzięki [[cache|pamięciom podręcznym]], odczycie z wyprzedzeniem, grupowaniu zapisów), jednak te działania są skuteczne tylko w przypadku odwoływania się do bliskich sobie bloków pamięci (najlepiej kolejnych).
#* W zarządzaniu pamięcią operacyjną przydziela się jeden ciągły blok, może jednak wystąpić sytuacja, w której sumaryczna wielkość wolnych bloków będzie satysfakcjonująca, lecz nie będzie istniał jeden ciągły obszar o wymaganej wielkości - toteż przydział się nie powiedzie.