Paging i segmentacja
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 rzeczywistej (fizycznej) pamięci w danym systemie komputerowym. Głównym celem zarządzania pamięcią jest łączenie dużej, ale wolnej pamięci z małą, ale szybką pamięcią, aby uzyskać efekt większej szybkiej pamięci.
Co to jest Paging?
Rozdzielanie partycji na stałe i zmienne jest nieefektywne pod względem wykorzystania pamięci, ponieważ stały podział powoduje wewnętrzne, a dynamiczne zewnętrzne rozdrobnienie. Możliwym rozwiązaniem problemu fragmentacji jest umożliwienie zapisania procesu w nieprzerwanym bloku pamięci. Program może być rozproszony dowolnie 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 o tym samym rozmiarze, 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. Zatem jedna ramka z dysku jest zapisana w jednej ramce roboczej pamięci. System przywoławczy działa w następujący sposób: kiedy program jest akceptowany do realizacji, jego rozmiar jest obliczany, co wyraża się wymaganą liczbą stron. Jeśli wystarczająca liczba klatek jest wolna, proces jest rejestrowany na stronie pamięci na stronie. Jednocześnie liczba ramek, w których zapisana 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 z liczby segmentów i dyslokacji w tym segmencie. Ze względu na użycie segmentów o różnych rozmiarach segmentacja jest podobna do partycjonowania dynamicznego. W przypadku braku schematu nakładki lub użycia pamięci wirtualnej wymagane jest, aby wszystkie segmenty programu były ł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ę, a ta partycja nie musi być przyległa. Segmentacja rozwiązuje problem wewnętrznej fragmentacji, ale oprócz dynamicznego partycjonowania pozostaje problem fragmentacji zewnętrznej. Ponieważ jednak proces jest podzielony na kilka mniejszych części, zewnętrzna fragmentacja jest zazwyczaj mniejsza. W przeciwieństwie do stronicowania, które są 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 potencjalnego połączenia między adresami logicznymi i fizycznymi. Podobnie jak w przypadku stronicowania, prosta technika segmentacji wykorzystuje tabelę segmentów dla każdego procesu i listę dostępnych bloków w pamięci głównej.
Różnica między stronicowaniem a segmentacją
1. Pojęcie stronicowania i segmentacji
Paging dostarcza wirtualną i fizyczną przestrzeń adresową oraz dodatkową przestrzeń pamięci na blokach (stronach) o równej długości. Pozwala to na przypisanie stałej wirtualnej przestrzeni adresowej do procesu rozpraszania (niekoniecznie nieustannie dystrybuowanego) w rzeczywistej przestrzeni adresowej i pamięci wtórnej. Nawet strona, jako termin, odnosi się do pamięci, a nie obiektów logicznych, które są widoczne na poziomie programu. Segmentacja dostarcza wirtualną przestrzeń adresową na blokach (segmentach), które bezpośrednio odpowiadają obiektom na poziomie programu. Z tego powodu segment nie ma ustalonej długości, więc nawet rozmiar segmentu można zmienić podczas wykonywania programu. Ochrona i podział są zatem możliwe na poziomie obiektu i są widoczne procesy, w których wykonywana jest segmentacja.
2. Charakterystyka stronicowania i segmentacji
Twórca aplikacji nie jest świadomy stronicowania. Zapisuje programy tak, jakby pamięć była liniowa, a system operacyjny i procesor martwią się o partycjonowanie i konwersję na adresy wirtualne. Programista w systemach segmentacji podaje jednak dwie części adresu, segmentu i strony w swoich programach. Wszystkie strony mają ten sam rozmiar, podczas gdy segmenty są różne. Segmentacja ma wiele liniowych przestrzeni adresowych i wywołuje tylko jedną. Segmenty umożliwiają partycjonowanie logiczne i ochronę składników aplikacji, a strony nie.
3. Zalety stronicowania i segmentacji
Stronicowanie, które jest przezroczyste dla programisty, eliminuje zewnętrzną fragmentację, a tym samym zapewnia efektywne wykorzystanie pamięci głównej. Elementy, które wchodzą i wychodzą z pamięci głównej, są stałe i mają taką samą wielkość, 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 rozwojem struktury danych, modułowością oraz obsługą wymiany i ochrony.
Paging vs. Segmentation: Comparison Chart
Podsumowanie stronicowania i segmentacji
- Stronicowanie opiera się na rozmieszczeniu całej przestrzeni adresowej na blokach o stałej długości, które są obsługiwane jako kwantyzacja pamięci. Ponadto, konieczne jest zapewnienie środków do oznaczania dostępnej pamięci, które mogą być wykonywane przez obecność "nagłówka" każdej strony, wskazując status strony (globalna połączona lista, gdzie każdy węzeł wskazuje na następną wolną stronę) lub przez umieszczanie bezpłatnego adresu strony w tablicy globalnej, co zwykle jest najgorszym rozwiązaniem.
- Segmentacja oznacza podzielenie przestrzeni adresowej na segmenty, które wyraźnie oznaczały prawa dostępu do procesora MMU. W ramach segmentu procesy przydzielają dokładnie tyle pamięci, ile potrzebują, ale problemem zarządzania pamięcią jest zapewnienie takiej alokacji, w której może zachować wystarczająco dużą pamięć ciągłą, która może potrzebować trochę czasu.