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]