Różnica między stronicowaniem a segmentacją

Zarządzanie pamięcią jest jedną z podstawowych funkcji systemu operacyjnego. Nowoczesne systemy operacyjne pozwalają każdemu procesowi uzyskać więcej pamięci wirtualnej niż całkowity rozmiar faktycznej (fizycznej) pamięci w danym systemie komputerowym. Głównym celem zarządzania pamięcią jest połączenie dużej, ale wolnej pamięci z małą, ale szybką pamięcią, aby uzyskać efekt większej szybkiej pamięci.

Co to jest stronicowanie?

Rozdzielanie między partycjonowaniem stałym i zmiennym jest nieefektywne pod względem wykorzystania pamięci, ponieważ ustalone partycjonowanie powoduje wewnętrzną, a dynamiczną fragmentację zewnętrzną. Możliwym rozwiązaniem problemu fragmentacji jest umożliwienie, aby proces nie był zapisywany w ciągłym bloku pamięci. Program można dowolnie rozproszyć w pamięci. W tym przypadku pamięć robocza jest podzielona na mniejsze bloki o stałym rozmiarze zwane ramkami. Logiczna przestrzeń adresowa programu jest również podzielona na bloki tego samego rozmiaru, zwane stronami. Po wprowadzeniu programu do pamięci strony są zapisywane w wolnych ramkach pamięci. Aby ułatwić przenoszenie programów z dysku do pamięci roboczej, dysk jest również podzielony na ramki o tym samym rozmiarze co ramki pamięci. Tak więc jedna ramka z dysku jest zapisywana w jednej ramce pamięci roboczej. System stronicowania działa w następujący sposób: gdy program zostanie zaakceptowany do wykonania, obliczany jest jego rozmiar, który wyraża się wymaganą liczbą stron. Jeśli wystarczająca liczba ramek jest wolna, proces jest zapisywany na stronie pamięci na stronę. Jednocześnie liczba ramek, w których zapisywana jest każda strona, jest wprowadzana do tabeli ramek.

Co to jest segmentacja?

Program użytkownika i powiązane dane można podzielić na kilka segmentów. Segmenty wszystkich programów nie muszą być tego samego rozmiaru, chociaż istnieje maksymalna długość segmentu. Podobnie jak w przypadku stronicowania, adres logiczny wykorzystujący segmentację składa się z dwóch części, w tym przypadku liczby segmentów i przemieszczeń w tym segmencie. Ze względu na zastosowanie segmentów o różnych rozmiarach segmentacja jest podobna do dynamicznego partycjonowania. W przypadku braku schematu nakładki lub użycia pamięci wirtualnej wymagane jest, aby wszystkie segmenty programu zostały załadowane do pamięci w celu wykonania. Różnica w porównaniu do partycjonowania dynamicznego polega na tym, że segmentacja może zająć więcej niż jedną partycję i ta partycja nie musi sąsiadować. Segmentacja rozwiązuje problem fragmentacji wewnętrznej, ale oprócz dynamicznego partycjonowania pozostaje problem fragmentacji zewnętrznej. Ponieważ jednak proces jest podzielony na kilka mniejszych części, fragmentacja zewnętrzna jest zazwyczaj mniejsza. W przeciwieństwie do stronicowania, które jest niewidoczne dla programisty, segmentacja jest zwykle widoczna i odpowiednia do organizowania programów i danych. W celu programowania modułowego program lub dane można dalej podzielić na kilka mniejszych segmentów. Minusem tej techniki jest to, że programista musi znać ograniczenia maksymalnego rozmiaru segmentu. Kolejną wygodą korzystania z segmentów o różnych rozmiarach jest brak perspektywicznego połączenia między adresami logicznymi i fizycznymi. Podobnie jak w przypadku stronicowania, prosta technika segmentacji wykorzystuje tabelę segmentów dla każdego procesu oraz listę dostępnych bloków w pamięci głównej.

Różnica między stronicowaniem a segmentacją

1. Pojęcie stronicowania i segmentacji

Stronicowanie zapewnia wirtualną i fizyczną przestrzeń adresową oraz dodatkową przestrzeń pamięci na blokach (stronach) o równej długości. Umożliwia to przydzielenie ciągłej wirtualnej przestrzeni adresowej procesowi rozproszenia (niekoniecznie ciągłej dystrybucji) w rzeczywistej przestrzeni adresowej i pamięci dodatkowej. Nawet strona jako termin odnosi się raczej do pamięci niż do obiektów logicznych widocznych na poziomie programu. Segmentacja zapewnia wirtualną przestrzeń adresową na blokach (segmentach), które bezpośrednio odpowiadają obiektom na poziomie programu. Z tego powodu segment nie ma stałej długości, więc nawet rozmiar segmentu można zmienić podczas wykonywania programu. Dlatego ochrona i podział są możliwe na poziomie obiektu, a widoczne są procesy, w których dokonuje się segmentacji.

2. Charakterystyka stronicowania i segmentacji

Deweloper aplikacji nie jest świadomy stronicowania. Pisze programy tak, jakby pamięć była liniowa, a system operacyjny i procesor martwią się jego partycjonowaniem i konwersją na adresy wirtualne. Programista w systemach segmentacji wymienia jednak dwie części adresu, segmentu i strony w swoich programach. Wszystkie strony mają ten sam rozmiar, a segmenty są różne. Segmentacja ma wiele liniowych przestrzeni adresowych, a stronicowanie tylko jedną. Segmenty umożliwiają logiczne partycjonowanie i ochronę komponentów aplikacji, a strony nie.

3. Zalety stronicowania i segmentacji

Stronicowanie, które jest przezroczyste dla programisty, eliminuje fragmentację zewnętrzną, a tym samym zapewnia efektywne wykorzystanie pamięci głównej. Elementy wchodzące i wychodzące z pamięci głównej są stałe i mają ten sam rozmiar, dzięki czemu można opracować zaawansowane algorytmy zarządzania pamięcią, które wykorzystują zachowanie programu. Segmentacja jest widoczna dla programisty i umożliwia zarządzanie wzrostem struktury danych, modułowością oraz obsługą wymiany i ochrony.

Stronicowanie a segmentacja: tabela porównawcza

Stronicowanie

Segmentacja

naprawiono rozmiar strony segmenty nie mają ustalonego rozmiaru
niewidoczny dla programisty widoczne dla programisty
jedna liniowa przestrzeń adresowa wiele liniowych przestrzeni adresowych
nie zezwala na logiczne partycjonowanie i ochronę komponentów aplikacji pozwala

Podsumowanie stronicowania i segmentacji

  • Przywoływanie opiera się na rozkładzie całej przestrzeni adresowej na bloki o stałej długości, które działają jak kwantyzacja pamięci. Ponadto konieczne jest zapewnienie środków do oznaczania dostępnej pamięci, które można wykonać przez obecność „nagłówka” każdej strony wskazującego status strony (globalna lista, na której każdy węzeł wskazuje następną wolną stronę) lub poprzez umieszczenie wolnego adresu strony w globalnej tablicy, co jest zwykle najgorszym rozwiązaniem.
  • Segmentacja oznacza podzielenie przestrzeni adresowej na segmenty, które mają wyraźnie oznaczone prawa dostępu do procesora MMU. W ramach segmentu procesy alokują dokładnie tyle pamięci, ile potrzebują, ale problem zarządzania pamięcią polega na tym, jak zapewnić taki przydział, aby zachować wystarczająco dużą ciągłą pamięć blokową, która może potrzebować trochę czasu.