Zaimplementowanie wielu funkcji poza jądrem. Dzielone biblioteki i Interfejsy z systemu V.
Zapewnienie efektywności obiektowej architekturze.
Poprawiona przenaszalność. Oddzielenie warstwy softwarowej od hardwerowej.
Kompatybilność z innymi systemami Unixowymi.
Page-struktura identyfikująca stronę.
Anonimowa Pamięć (AP)-pamięć bez stałego adresu .
HAT(Hardware Address Translation)-jest to jednostka zależna od MMU-Memory Managemant Unit.
Przestrzeń Adresowa-w implementacji jest to uporządkowana lista odwzorowań adresów na pamięć fizyczną.
Segmenty-są to obiekty (C++) opisujące odwzorowanie z pamięci wirtualnej na ciągły obszar pamięci.
Wszystkie strony w pamięci fizycznej mają strukturę page która opisuje ich stan.
Struktura page jest oparta na parze (vnode,offset).
Do vnode przyczepiona jest lista dwukierunkowa stron (łatwo sprawdzić czy strona jest podczepiona do vnoda).
Strony mogą się znaleźć na liście wolnych stron.
Struktura page zawiera też wskaźnik do warstwy hat który jest wykorzystywany do sprawdzenia czy są jakieś translacje dotyczące tej strony (testuje czy NULL).
Na najwyższym poziomie abstrakcji warstwa PA. Warstwa PA dostarcza interfejs proceduralny w którym można wyróżnić dwie składowe:
Procedury operujące na całej przestrzeni adresowej. Zajmują się alokacją, usuwaniem i kopiowaniem.
Procedury działające na części pamięci. Mapowanie, obsługa praw itp.
Zawiera listę segmentów posortowanych po wirtualnym adresie oraz warstwę hat
Usprawnienia wyszukiwania:
Zapamiętanie adresu ostatniego segmentu (hint).
Grupownie przez sterowniki segmentów tego samego typu.
Mają swoje pola prywatne i publiczne, na których operacje przeprowadza się w pełni obiektowo.
Pola publiczne zawierają rozmiar segmentu, wskaźnik na następny i poprzedni segment oraz wskaźnik na strukturę PA. Dodatkowo każdy segment zawiera także wskaźnik na tablicę, w której określone są operacje podobne do operacji na PA i wskaźnik na prywatne przed segmenty.
Rodzaje sterowników segmentowych:
seg_vm - mapuje anonimową pamięć. Są dwa rodzaje mapowania
seg_dev - mapują specjalne pliki przeznaczone dla urządzeń.
seg_kmap - używany tylko przez jądro do specyficznych mapowań.
Page fault (wyjątek braku strony) może to być naruszenie praw, niewłaściwe sprzętowe tłumaczenie adresu lub zgłoszone przez oprogramowanie.
Realizacja page fault przez vnode segment wygląda następująco:
Sprawdź prawa strony.
Jeśli trzeba zaalokuj strukturę annon_map.
Jeśli trzeba weź stronę od menadżera obiektów. Zawołaj warstwę hat do przetłumaczenia adresu do strony.
Jeśli trzeba stwórz nową stronę za pomocą mechanizmu copy- on - write
Rysunek 2 przedstawia mapowanie prywatne z offsetu 0x6000 w vnode vp1 do adresu 0x30000 bajtów dla wielkości 0x4000 bajtów i strony o rozmiarze 0x2000. Jeśli będzie wyjątek braku strony inny niż przy pisaniu sterownik segmentowy vnode prosi menadżera obiektów vnode o stronę o adresie (vp1,addr - 0x30000). Menadżer obiektów vnode jest odpowiedzialny za stworzenie i inicjalizacje strony kiedy każe mu to sterownik segmentowy. Następnie sterownik segmentowy vnode zleca przetłumaczenie odwołania do strony warstwie hat .
Rysunek 3 przedstawia rezultat operacji copy-on-write na adresie 0x32000. Sterownik segmentowy vnode zaalokował strukturę annon_map (struktura do trzymania anonimowych stron) i przepisał na strukturę annon zawartość strony spod adresu 0x32000.