Podręcznik

2. Zarządzanie pamięcią

2.2. Segmentacja pamięci

Segmentacja pamięci jest metodą alternatywną do stronicowania. Chociaż może ona być używana samodzielnie, to najczęściej jest wykorzystywana w połączeniu ze stronicowaniem. W segmentacji proces jest podzielony na pewne części (segmenty). Każdy segment może mieć różną długość i różne prawa dostępu (Rys. 9). Intuicyjnie wiążą się one z funkcjami segmentów.

Rys. 9. Segmentacja pamięci

 

Podobnie jak przy stronicowaniu, istnieje tablica segmentów, która je opisuje. Znajdują się w niej adres startowy segmentu, jego rozmiar, prawa dostępu i inne dane. Segmenty mogą być dowolnie porozrzucane po pamięci RAM. Adres w tym przypadku składa się z dwóch elementów: 16 bitowego selektora segmentu i 32 bitowego (bądź 64 bitowego w systemach 64 bitowych) przesunięcia. Sposób tworzenia adresu jest pokazany na rysunku 10. Selektor segmentu wskazuje na odpowiedni element w tablicy segmentów. Tablica ta jest nazywana tablicą deskryptorów.

 

Rys. 10. Konwersja adresu logicznego na adres liniowy [źródło: Intel® 64 and IA-32 Architectures

Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C]

 

Z wpisu do tablicy deskryptorów jest pobierany adres bazowy, do którego jest dodawany adres przesunięcia. W ten sposób wyszukiwany jest konkretny adres w pamięci. W architekturze PC istnieją specjalne rejestry segmentowe. Są one związane z segmentami kodu, danych, stosu i innymi pomocniczymi. Każdy rejestr segmentowy zawiera opis jednego segmentu (Rys. 11).

 

Rys. 11. Model pamięci z użyciem wielu segmentów [źródło: Intel® 64 and IA-32 Architectures

Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C]