Najlepiej ilustrują to dwie architektury: nowatorski, choć niezbyt szeroko
* Dla segmentów. - Przyp. tłum.
używany system MULTICS oraz procesor Intel 386.
324 Rozdział 8 Zarządzanie pamięcią
8.7 Segmentacja ze stronicowaniem 325
8.7.1 System MULTICS
Zastosowane w tej sytuacji rozwiązanie polegało na stronicowaniu seg-
mentów. Stronicowanie powoduje usunięcie zewnętrznej fragmentacji
W systemie MULTTCS adres logiczny składa się z 18-bitowego numeru seg-
i uproszczenie sprawy przydziału: każda pusta ramka może być użyta na
mentu i 16-bitowej odległości. Mimo że schemat taki tworzy 34-bitową prze-
potrzebną stronę. Każda strona w systemie MULTICS składa się z 1 K słów.
strzeń adresową, można się pogodzić z kosztami organizacji tablicy segmen-
Wobec tego odległość w segmencie (16 bitów) podzielono na 6-bitowy nu-
tów; potrzeba tylko tylu wpisów w tablicy, ile jest segmentów, a utrzymywanie mer strony i 10-bitową odległość na stronie. Numer strony jest indeksem
pustych pozycji w tablicy segmentów jest zbyteczne.
w tablicy stron, z której uzyskuje się numer ramki. Wreszcie numer ramki
Jednakże przy segmentach dochodzących do 64 K słów 36-bitowych,
w połączeniu z odległością na stronie tworzy adres fizyczny. Schemat tłu-
średni rozmiar segmentu może być znaczny i fragmentacja zewnętrzna mo-
maczenia adresu jest przedstawiony na rys. 8.26. Zauważmy, że różnica
że stanowić problem. Jeśli nawet fragmentacja zewnętrzna nie stanowi pro-
między takim rozwiązaniem a czystą segmentacja polega na tym, że wpis
blemu, to czas przeszukiwania, zużyty na przydzielenie pamięci dla seg-
w tablicy segmentów zawiera nie adres segmentu, lecz adres bazowy tablicy mentu przy użyciu metody pierwszego dopasowania lub najlepszego dopa-stron tego segmentu.
sowania, może być długi. Możemy więc marnować pamięć z powodu ze-
Każdy segment musi obecnie mieć oddzielną tablicę stron. Jednak zwa-
wnętrznej fragmentacji lub (albo również) tracić czas z powodu długich
żywszy, że długość każdego segmentu, określona przez jego wpis w tablicy
przeszukiwań.
segmentów, jest ograniczona, tablica stron nie musi mieć pełnego rozmiaru.
Powinno w niej być tyle pozycji, ile ich naprawdę potrzeba. Jak zwykle
w przypadku stronicowania, ostatnia strona każdego segmentu na ogół nie jest całkiem zapełniona. W efekcie otrzymujemy średnio pół strony wewnętrznej
fragmentacji na segment. W konsekwencji, choć wyeliminowaliśmy frag-
mentację zewnętrzną, wprowadziliśmy fragmentację wewnętrzną i zwiększy-
liśmy nakład pamięci na przechowywanie tablic.
PrawdÄ™ powiedziawszy, nawet zaprezentowany przed chwilÄ… obraz stro-
nicowanej segmentacji w systemie MULTICS jest uproszczeniem. Skoro
numer segmentu jest wielkością 18-bitową, należy brać pod uwagę możliwość
wystąpienia 262 144 segmentów, co wymaga wyjątkowo dużej tablicy seg-
mentów. Aby pokonać ten problem, MULTICS stronicuje tablicę segmentów!
Numer segmentu (18 bitów) dzieli się na 8-bitowy numer strony i 10-bitową
odległość na stronie. Wskutek tego tablica segmentów przyjmuje postać tabli-cy stron zawierającej do 28 pozycji. Ogólnie biorąc, adres logiczny w systemie MULTICS wygląda zatem następująco:
przy czym s\ jest indeksem do tablicy stron tablicy segmentów, a s2 jest przemieszczeniem na stronie tablicy segmentów. Kiedy już znajdziemy potrzebną nam stronę tablicy segmentów, wtedy wartość o\ oznacza przemieszczenie w tablicy stron potrzebnego segmentu i wreszcie o2 jest prze-
mieszczeniem na stronie zawierającej słowo, do którego chce się uzyskać
Rys. 8.26 Segmentacja stronicowana w komputerze GE 645 (system MULTICS)
dostęp (rys. 8.27).
326 Rozdział 8 Zarządzanie pamięcią
8.7 Segmentacja ze stronicowaniem 327
w której 5 określa numer segmentu, g wskazuje, czy segment jest w tablicy deskryptorów globalnych (GDT) czy lokalnych (LDT), a pole p dotyczy ochrony. Odległość jest 32-bitową liczbą określającą położenie bajtu (słowa) w adresowanym segmencie.
Procesor ma sześć rejestrów segmentów, co umożliwia adresowa-
nie w procesie w dowolnej chwili sześciu segmentów. Ma on również sześć
8-bajtowych rejestrów mikroprogramowych służących do przechowywania
odpowiednich deskryptorów z tablicy LDT lub GDT. Ta pamięć podręczna
eliminuje w procesorze 386 konieczność czytania deskryptora z pamięci ope-
racyjnej podczas każdego do niej odwołania.
Adres fizyczny maszyny 386 ma 32 bity i jest tworzony następująco. Re-
jestr wyboru wskazuje na odpowiednią pozycję w tablicy deskryptorów lokal-
Rys. 8.27 TÅ‚umaczenie adresu w systemie MULTICS
nych lub globalnych. Na podstawie adresu poczÄ…tku segmentu (bazowego)
i jego długości jest tworzony adres liniowy (ang. linear address). Najpierw Aby zapewnić sensowną wydajność zastosowano 16 rejestrów asocjacyjnych
sprawdza się poprawność adresu ze względu na długość segmentu. Jeśli adres
zawierających adresy 16 ostatnio używanych stron. Każdy rejestr składa się
jest niepoprawny, to jest generowany błąd pamięci i kończy się to przejściem z dwu części: klucza i wartości. Klucz jest 24-bitowym polem, powstałym z połą-
do systemu operacyjnego. Jeśli adres jest poprawny, to wartość odległości
czenia numeru segmentu i numeru strony. Wartość reprezentuje numer ramki.
dodaje się do wartości bazowej, co daje w wyniku liniowy adres 32-bitowy.