Jednostka zarządzania pamięcią
Jednostka zarządzania pamięcią ( MMU ), czasami nazywana jednostką zarządzania pamięcią stronicowaną ( PMMU ), to komputerowa jednostka sprzętowa , w której wszystkie odniesienia do pamięci są przekazywane przez nią samą, wykonując przede wszystkim translację adresów pamięci wirtualnej na adresy fizyczne .
MMU skutecznie zarządza pamięcią wirtualną , obsługując jednocześnie ochronę pamięci , kontrolę pamięci podręcznej , arbitraż magistrali oraz, w prostszych architekturach komputerów (zwłaszcza w systemach 8-bitowych ), przełączanie banków .
Przegląd
Nowoczesne MMU zwykle dzielą wirtualną przestrzeń adresową (zakres adresów używanych przez procesor) na strony , z których każda ma rozmiar będący potęgą 2, zwykle kilka kilobajtów , ale mogą być znacznie większe. Dolne bity adresu (przesunięcie na stronie) pozostają niezmienione. Górne bity adresu to wirtualne numery stron.
Wpisy w tablicy stron
Większość MMU używa tablicy elementów w pamięci zwanej „ tablicą stron ”, zawierającej jeden „ wpis tablicy stron ” (PTE) na stronę [ wątpliwe ] , do mapowania wirtualnych numerów stron na fizyczne numery stron w pamięci głównej. Asocjacyjna pamięć podręczna PTE jest nazywana buforem translacji (TLB) i służy do uniknięcia konieczności uzyskiwania dostępu do pamięci głównej za każdym razem, gdy mapowany jest adres wirtualny. Inne MMU mogą mieć prywatną tablicę pamięci lub rejestrów, które przechowują zestaw wpisów tablicy stron. Fizyczny numer strony jest łączony z przesunięciem strony, aby uzyskać pełny adres fizyczny.
PTE może również zawierać informacje o tym, czy strona została zapisana („ brudny bit ”), kiedy była ostatnio używana („bit dostępu”, dla algorytmu zastępowania stron ostatnio używanych (LRU) , jakiego rodzaju procesy ( tryb użytkownika lub tryb administratora ) mogą je odczytywać i zapisywać oraz czy powinny być buforowane .
Czasami PTE zabrania dostępu do strony wirtualnej, być może dlatego, że do tej strony wirtualnej nie została przydzielona żadna fizyczna pamięć o dostępie swobodnym (RAM). W takim przypadku MMU sygnalizuje CPU błąd strony . Następnie system operacyjny (OS) radzi sobie z sytuacją, być może próbując znaleźć wolną ramkę pamięci RAM i skonfigurować nowy PTE, aby zmapować go na żądany adres wirtualny. Jeśli żadna pamięć RAM nie jest wolna, może być konieczne wybranie istniejącej strony (zwanej „ofiarą”), przy użyciu algorytmu zastępczego i zapisanie jej na dysku (proces zwany „ stronicowaniem "). W przypadku niektórych MMU może również wystąpić niedobór PTE, w takim przypadku system operacyjny będzie musiał zwolnić jeden dla nowego mapowania.
MMU może również generować stany błędu niedozwolonego dostępu lub błędy nieprawidłowej strony przy odpowiednio niedozwolonym lub nieistniejącym dostępie do pamięci, prowadząc do błędu segmentacji lub błędu magistrali , gdy jest obsługiwany przez system operacyjny.
Korzyści
W niektórych przypadkach błąd strony może wskazywać na błąd oprogramowania , któremu można zapobiec, stosując ochronę pamięci jako jedną z kluczowych zalet MMU: system operacyjny może jej użyć do ochrony przed błędnymi programami, uniemożliwiając dostęp do pamięci, której dany program nie powinien mieć dostępu. Zazwyczaj system operacyjny przypisuje każdemu programowi własną wirtualną przestrzeń adresową.
MMU łagodzi również problem fragmentacji pamięci. Po przydzieleniu i zwolnieniu bloków pamięci wolna pamięć może ulec fragmentacji (nieciągłości), tak że największy ciągły blok wolnej pamięci może być znacznie mniejszy niż całkowita ilość. Dzięki pamięci wirtualnej ciągły zakres adresów wirtualnych można odwzorować na kilka nieciągłych bloków pamięci fizycznej; ta nieciągła alokacja jest jedną z zalet stronicowania .
W niektórych wczesnych projektach mikroprocesorów zarządzanie pamięcią było realizowane przez oddzielny układ scalony , taki jak VLSI Technology VI475 (1986), Motorola 68851 (1984) używana z procesorem Motorola 68020 w Macintosh II lub Z8010 i Z8015 (1985) używany z rodziną procesorów Zilog Z8000 . Późniejsze mikroprocesory (takie jak Motorola 68030 i Zilog Z280 ) umieścił MMU wraz z procesorem na tym samym układzie scalonym, podobnie jak mikroprocesory Intel 80286 i późniejsze x86 .
Podczas gdy ten artykuł koncentruje się na nowoczesnych jednostkach MMU, zwykle opartych na stronach, wczesne systemy wykorzystywały podobną koncepcję adresowania z limitem podstawowym, która następnie rozwinęła się w segmentację . Są one czasami obecne również w nowoczesnych architekturach. Architektura x86 zapewniała segmentację zamiast stronicowania w 80286 i zapewnia zarówno stronicowanie, jak i segmentację w procesorach 80386 i nowszych (chociaż użycie segmentacji nie jest dostępne w trybie 64-bitowym).
Przykłady
Większość nowoczesnych systemów dzieli pamięć na strony o wielkości 4–64 KB , często z możliwością wykorzystania tzw. ogromnych stron o wielkości 2 MB lub 1 GB (często możliwe są oba warianty). Tłumaczenia stron są buforowane w buforze podglądu tłumaczeń (TLB). Niektóre systemy, głównie starsze projekty RISC , przechwytują system operacyjny, gdy tłumaczenie strony nie zostanie znalezione w TLB. Większość systemów wykorzystuje sprzętowy program do chodzenia po drzewach. Większość systemów pozwala na wyłączenie MMU, ale niektóre wyłączają MMU podczas przechwytywania kodu systemu operacyjnego.
VAX
VAX mają 512 bajtów, czyli bardzo mało. System operacyjny może traktować wiele stron tak, jakby były jedną większą stroną. Na przykład Linux na VAX grupuje razem osiem stron. W ten sposób system jest postrzegany jako posiadający o wielkości 4 KB . VAX dzieli pamięć na cztery regiony o stałym przeznaczeniu, każdy o wielkości 1 GB . Oni są:
- Przestrzeń P0
- Używana do pamięci ogólnego przeznaczenia na proces, takiej jak sterty.
- Przestrzeń P1
- (lub przestrzeń kontrolna), która jest również na proces i jest zwykle używana dla stosów przełożonego, wykonawczego, jądra , użytkowników i innych struktur kontroli poszczególnych procesów zarządzanych przez system operacyjny.
- Przestrzeń S0
- (lub przestrzeń systemowa), która jest globalna dla wszystkich procesów i przechowuje kod i dane systemu operacyjnego, stronicowane lub nie, w tym tablice stronicowania.
- Przestrzeń S1
- , która jest nieużywana i „zarezerwowana dla formatu cyfrowego ”.
Tabele stron to duże tablice liniowe. Zwykle byłoby to bardzo marnotrawstwem, gdy adresy są używane na obu końcach możliwego zakresu, ale tablica stron dla aplikacji sama jest przechowywana w pamięci stronicowanej jądra. Tak więc faktycznie istnieje dwupoziomowe drzewo , umożliwiając aplikacjom posiadanie rzadkiego układu pamięci bez marnowania dużej ilości miejsca na nieużywane wpisy tablicy stron. MMU VAX wyróżnia się brakiem dostępnego bitu. Systemy operacyjne, które implementują stronicowanie, muszą znaleźć jakiś sposób emulacji udostępnianego bitu, jeśli mają działać wydajnie. Zazwyczaj system operacyjny będzie okresowo usuwał mapowanie stron, aby można było wykorzystać błędy braku strony, aby umożliwić systemowi operacyjnemu ustawienie bitu, do którego uzyskano dostęp.
RAMIĘ
architekturze ARM implementują jednostkę MMU zdefiniowaną przez architekturę systemu pamięci wirtualnej ARM. Obecna architektura definiuje PTE do opisywania stron 4 KB i 64 KB , sekcji 1 MB i nadsekcji 16 MB ; starsze wersje definiowały również małą stronę o wielkości 1 KB . ARM używa dwupoziomowej tablicy stron, jeśli używa 4 KB i 64 KB , lub tylko jednopoziomowej tablicy stron dla sekcji 1 MB i sekcji 16 MB .
Aktualizacje TLB są wykonywane automatycznie przez sprzęt do chodzenia po tablicy stron. PTE obejmują uprawnienia dostępu do odczytu/zapisu na podstawie uprawnień, informacji o możliwości buforowania, bitu NX i bitu niezabezpieczonego.
IBM System/360 Model 67, IBM System/370 i następcy
System IBM System/360 Model 67 , który został wprowadzony w sierpniu 1965 r., zawierał jednostkę MMU zwaną skrzynką dynamicznej translacji adresów (DAT). Ma niezwykłą cechę przechowywania dostępnych i brudnych bitów poza tablicą stron (wraz z czterobitowym kluczem zabezpieczającym dla wszystkich procesorów S/360). Odnoszą się one raczej do pamięci fizycznej niż do pamięci wirtualnej i są dostępne za pomocą instrukcji specjalnego przeznaczenia. Zmniejsza to obciążenie systemu operacyjnego, który w przeciwnym razie musiałby propagować dostępne i brudne bity z tablic stron do bardziej fizycznie zorientowanej struktury danych. To sprawia, że wirtualizacja na poziomie systemu operacyjnego , później nazwana parawirtualizacja , łatwiej.
Począwszy od sierpnia 1972 r., IBM System/370 ma podobną MMU, chociaż początkowo obsługiwał tylko 24-bitową wirtualną przestrzeń adresową zamiast 32-bitowej wirtualnej przestrzeni adresowej System/360 Model 67. Przechowuje również dostępne i brudne bity poza tablicą stron. Na początku 1983 r. architektura System/370-XA rozszerzyła wirtualną przestrzeń adresową do 31 bitów, aw 2000 r. wprowadzono 64-bitową architekturę z/Architecture z rozszerzoną przestrzenią adresową do 64 bitów; te nadal przechowują dostępne i brudne bity poza tablicą stron.
DEC alfa
Procesor DEC Alpha dzieli pamięć na strony o wielkości 8 KB . Po pomyłce TLB kod maszynowy oprogramowania układowego niskiego poziomu (tutaj nazywany kodem PAL ) przechodzi przez trzypoziomową tablicę stron o strukturze drzewa. Adresy są podzielone w następujący sposób: 21 bitów nieużywanych, 10 bitów do indeksowania głównego poziomu drzewa, 10 bitów do indeksowania środkowego poziomu drzewa, 10 bitów do indeksowania poziomu liścia drzewa i 13 bitów przechodzących przez na adres fizyczny bez modyfikacji. Obsługiwane są pełne bity uprawnień do odczytu/zapisu/wykonania.
MIPS
Architektura MIPS obsługuje od jednego do 64 wpisów w TLB. Liczba wpisów TLB jest konfigurowalna w konfiguracji CPU przed syntezą. Wpisy TLB są podwójne. Każdy wpis TLB odwzorowuje numer strony wirtualnej (VPN2) na jeden z dwóch numerów ramek strony (PFN0 lub PFN1), w zależności od najmniej znaczącego bitu adresu wirtualnego, który nie jest częścią maski strony . Ten bit i bity maski strony nie są przechowywane w VPN2. Każdy wpis TLB ma swój własny rozmiar strony, który może mieć dowolną wartość z zakresu od 1 KB do 256 MB w wielokrotnościach czterech. Każdy PFN we wpisie TLB ma atrybut buforowania, brudny i ważny bit statusu. VPN2 ma bit stanu globalnego i identyfikator przypisany przez system operacyjny, który bierze udział w dopasowaniu wpisu TLB adresu wirtualnego, jeżeli bit statusu globalnego jest ustawiony na zero. PFN przechowuje adres fizyczny bez bitów maski strony.
Wyjątek uzupełniania TLB jest generowany, gdy w TLB nie ma wpisów pasujących do odwzorowanego adresu wirtualnego. Wyjątek nieprawidłowego TLB jest generowany, gdy występuje dopasowanie, ale wpis jest oznaczony jako nieprawidłowy. Zmodyfikowany wyjątek TLB jest generowany, gdy instrukcja składowania odwołuje się do mapowanego adresu, a pasujący status wpisu nie jest ustawiony. Jeśli wyjątek TLB wystąpi podczas przetwarzania wyjątku TLB, wyjątku TLB z podwójnym błędem, jest on wysyłany do własnej procedury obsługi wyjątków .
MIPS32 i MIPS32r2 obsługują 32 bity wirtualnej przestrzeni adresowej i do 36 bitów fizycznej przestrzeni adresowej. MIPS64 obsługuje do 64 bitów wirtualnej przestrzeni adresowej i do 59 bitów fizycznej przestrzeni adresowej.
Słońce 1
Oryginalny Sun 1 to komputer jednopłytkowy zbudowany wokół mikroprocesora Motorola 68000 i wprowadzony na rynek w 1982 r. Zawiera oryginalną jednostkę zarządzania pamięcią Sun 1, która zapewnia translację adresów, ochronę pamięci, współdzielenie pamięci i alokację pamięci dla wielu procesów działających na CPU . Cały dostęp CPU do prywatnej wbudowanej pamięci RAM, zewnętrznej Multibus , wbudowanych wejść /wyjść i wejść/wyjść Multibus odbywa się przez MMU, gdzie translacja adresów i ochrona są wykonywane w jednolity sposób. MMU jest zaimplementowane sprzętowo na płycie CPU.
MMU składa się z rejestru kontekstu, mapy segmentów i mapy stron. Adresy wirtualne z procesora są tłumaczone na adresy pośrednie przez mapę segmentu, które z kolei są tłumaczone na adresy fizyczne przez mapę strony. Rozmiar strony to 2 KB , a rozmiar segmentu to 32 KB , co daje 16 stron na segment. Jednocześnie można mapować do 16 kontekstów. Maksymalna logiczna przestrzeń adresowa dla kontekstu to 1024 strony lub 2 MB. Maksymalny adres fizyczny, który można mapować jednocześnie, również wynosi 2 MB.
Rejestr kontekstu jest ważny w wielozadaniowym systemie operacyjnym, ponieważ pozwala procesorowi przełączać się między procesami bez ponownego ładowania wszystkich informacji o stanie translacji. 4-bitowy rejestr kontekstu może przełączać się między 16 sekcjami mapy segmentu pod kontrolą nadzorcy, co pozwala na jednoczesne mapowanie 16 kontekstów. Każdy kontekst ma swoją własną wirtualną przestrzeń adresową. Współdzielenie wirtualnej przestrzeni adresowej i komunikację międzykontekstową można zapewnić poprzez wpisanie tych samych wartości do map segmentu lub stron w różnych kontekstach. Dodatkowe konteksty można obsłużyć, traktując mapę segmentów jako pamięć podręczną kontekstów i zastępując nieaktualne konteksty na podstawie najmniej ostatnio używanych.
Rejestr kontekstu nie rozróżnia stanów użytkownika i nadzorcy. Przerwania i pułapki nie przełączają kontekstów, co wymaga, aby wszystkie ważne wektory przerwań były zawsze mapowane na stronie 0 kontekstu, jak również na prawidłowym stosie nadzorcy.
PowerPC
W PowerPC G1, G2, G3 i G4 strony mają zwykle 4 KB. Po chybieniu TLB standardowa jednostka PowerPC MMU rozpoczyna dwa jednoczesne wyszukiwania. Jedno wyszukiwanie próbuje dopasować adres do jednego z czterech lub ośmiu rejestrów translacji adresów bloków danych (DBAT) lub czterech lub ośmiu rejestrów translacji adresów bloków instrukcji (IBAT), odpowiednio. Rejestry BAT mogą mapować liniowe fragmenty pamięci o wielkości nawet 256 MB i są zwykle używane przez system operacyjny do mapowania dużych części przestrzeni adresowej na własny użytek jądra systemu operacyjnego. Jeśli wyszukiwanie BAT powiedzie się, drugie wyszukiwanie jest zatrzymywane i ignorowane.
Inne wyszukiwanie, które nie jest obsługiwane bezpośrednio przez wszystkie procesory z tej rodziny, odbywa się za pośrednictwem tak zwanej „ odwróconej tablicy stron ”, która działa jako zahaszowane rozszerzenie TLB poza chipem. Najpierw cztery górne bity adresu są używane do wyboru jednego z 16 segmentowych . Następnie 24 bity z rejestru segmentowego zastępują te cztery bity, tworząc 52-bitowy adres. Wykorzystanie rejestrów segmentowych umożliwia wielu procesom współdzielenie tej samej tablicy skrótów .
Adres 52-bitowy jest mieszany, a następnie używany jako indeks w tabeli poza chipem. Tam grupa ośmiostronicowych wpisów w tabeli jest skanowana w poszukiwaniu pasującego. Jeśli żadna nie pasuje z powodu nadmiernych kolizji mieszania , procesor próbuje ponownie z nieco inną funkcją mieszania . Jeśli to również się nie powiedzie, procesor zatrzymuje się w systemie operacyjnym (z wyłączonym MMU), aby problem mógł zostać rozwiązany. System operacyjny musi odrzucić wpis z tablicy skrótów, aby zrobić miejsce na nowy wpis. System operacyjny może wygenerować nowy wpis z bardziej normalnej, przypominającej drzewo tabeli stron lub ze struktur danych mapowania, które prawdopodobnie będą wolniejsze i bardziej wydajne. Wsparcie dla no-execute znajduje się w rejestrach segmentowych, co prowadzi do ziarnistości 256 MB .
Głównym problemem związanym z tym projektem jest słaba lokalizacja pamięci podręcznej spowodowana funkcją skrótu. Projekty oparte na drzewach unikają tego, umieszczając wpisy tablicy stron dla sąsiednich stron w sąsiednich lokalizacjach. System operacyjny działający na PowerPC może zminimalizować rozmiar tablicy skrótów, aby zmniejszyć ten problem.
Usuwanie wpisów z tablicy stron procesu jest również nieco powolne. System operacyjny może unikać ponownego wykorzystywania wartości segmentów, aby opóźnić stawienie czoła temu problemowi, lub może zdecydować się na marnowanie pamięci związane z tablicami skrótów dla poszczególnych procesów. Chipy G1 nie wyszukują wpisów w tablicy stron, ale generują skrót, oczekując, że system operacyjny przeszuka standardową tablicę skrótów za pomocą oprogramowania. System operacyjny może zapisywać do TLB. Układy G2, G3 i wczesne układy G4 używają sprzętu do przeszukiwania tablicy skrótów. Najnowsze chipy pozwalają systemowi operacyjnemu wybrać dowolną metodę. Na chipach, które czynią to opcjonalnym lub w ogóle go nie obsługują, system operacyjny może zdecydować się na użycie wyłącznie tabeli stron opartej na drzewie.
IA-32 / x86
Architektura x86 ewoluowała przez bardzo długi czas przy zachowaniu pełnej kompatybilności oprogramowania, nawet w przypadku kodu systemu operacyjnego. Tak więc MMU jest niezwykle złożone, z wieloma różnymi możliwymi trybami działania. Normalna praca tradycyjnego 80386 i jego następców ( IA-32 ) jest opisana tutaj.
Procesor przede wszystkim dzieli pamięć na strony o wielkości 4 KB . Rejestry segmentowe, fundamentalne dla starszych 8088 i 80286 , nie są używane w nowoczesnych systemach operacyjnych, z jednym głównym wyjątkiem: dostęp do danych specyficznych dla wątków dla aplikacji lub danych specyficznych dla procesora dla jąder systemu operacyjnego, co odbywa się przy wyraźnym użyciu Rejestry segmentowe FS i GS. Cały dostęp do pamięci obejmuje rejestr segmentowy, wybrany zgodnie z wykonywanym kodem. Rejestr segmentowy działa jak indeks w tabeli, który zapewnia przesunięcie do dodania do adresu wirtualnego. Z wyjątkiem korzystania z FS lub GS, system operacyjny zapewnia, że przesunięcie będzie równe zeru.
Po dodaniu przesunięcia adres jest maskowany tak, aby nie był większy niż 32 bity. Wynik można wyszukać za pomocą tablicy stron o strukturze drzewa, z bitami adresu podzielonymi w następujący sposób: 10 bitów dla gałęzi drzewa, 10 bitów dla liści gałęzi, a 12 najniższych bitów jest bezpośrednio skopiowane do wyniku. Niektóre systemy operacyjne, takie jak OpenBSD z funkcją W^X i Linux z Exec Shield lub PaX łaty, mogą również ograniczać długość segmentu kodu, określoną przez rejestr CS, aby uniemożliwić wykonanie kodu w modyfikowalnych regionach przestrzeni adresowej.
Drobne zmiany MMU wprowadzone wraz z Pentium pozwoliły na bardzo duże strony o wielkości 4 MB poprzez pominięcie dolnego poziomu drzewa (zostaje 10 bitów na indeksowanie pierwszego poziomu hierarchii stron, a pozostałe 10+12 bitów jest bezpośrednio kopiowanych do wyniku ). Drobne wersje MMU wprowadzone wraz z Pentium Pro wprowadziły funkcję rozszerzenia adresu fizycznego (PAE), umożliwiającą 36-bitowe adresy fizyczne z 2 + 9 + 9 bitami dla trzypoziomowych tablic stron i 12 najniższych bitów bezpośrednio kopiowanych do wyniku. Duże strony ( 2 MB ) są również dostępne po pominięciu dolnego poziomu drzewa (co daje 2+9 bitów dla dwupoziomowej hierarchii tabeli i pozostałe 9+12 najniższych bitów kopiowanych bezpośrednio). Ponadto tabela atrybutów strony umożliwiła określenie buforowalności poprzez wyszukanie kilku wysokich bitów w małej tabeli na procesorze.
no-execute było pierwotnie zapewniane tylko dla poszczególnych segmentów, przez co było bardzo niewygodne w użyciu. Nowsze chipy x86 zapewniają bit no-execute na stronę w trybie PAE. W ^X , Exec Shield i PaX emulują obsługę niewykonania na stronie na maszynach z procesorami x86 pozbawionymi bitu NX, ustawiając długość segmentu kodu, ze stratą wydajności i redukcją dostępnej przestrzeni adresowej .
x86-64
x86-64 to 64-bitowe rozszerzenie x86, które prawie całkowicie eliminuje segmentację na korzyść płaskiego modelu pamięci używanego przez prawie wszystkie systemy operacyjne dla procesorów 386 lub nowszych. W trybie długim wszystkie przesunięcia segmentów są ignorowane, z wyjątkiem segmentów FS i GS. W przypadku stron o rozmiarze 4 KB drzewo tablicy stron ma cztery poziomy zamiast trzech.
Adresy wirtualne są podzielone w następujący sposób: 16 bitów nieużywanych, po dziewięć bitów na cztery poziomy drzewa (łącznie 36 bitów) i 12 najniższych bitów skopiowanych bezpośrednio do wyniku. W przypadku wielkości 2 MB istnieją tylko trzy poziomy tablicy stron, w sumie 27 bitów używanych do stronicowania i 21 bitów przesunięcia. Niektóre nowsze procesory obsługują również pojemności 1 GB z dwoma poziomami stronicowania i 30 bitami przesunięcia.
CPUID może służyć do określenia, czy obsługiwane są strony o wielkości 1 GB . We wszystkich trzech przypadkach wymagane jest, aby 16 najwyższych bitów było równych 48-temu bitowi, czyli innymi słowy, 48 najniższych bitów jest rozszerzonych o znak do wyższych bitów. Ma to na celu umożliwienie przyszłego rozszerzenia adresowalnego zakresu, bez uszczerbku dla kompatybilności wstecznej. Na wszystkich poziomach tablicy stron wpis w tablicy stron zawiera braku wykonania .
Systemy Unisys MCP (Burroughs B5000)
Burroughs B5000 z 1961 roku był pierwszym komercyjnym systemem obsługującym pamięć wirtualną (po Atlasie ), mimo że nie ma MMU. Zapewnia dwie funkcje MMU - adresy pamięci wirtualnej i ochronę pamięci - z innym podejściem architektonicznym.
Po pierwsze, w mapowaniu adresów pamięci wirtualnej, zamiast MMU, systemy MCP są oparte na deskryptorach . Każdy przydzielony blok pamięci otrzymuje główny deskryptor z właściwościami bloku (tj. rozmiarem, adresem i obecnością w pamięci). Kiedy wysyłane jest żądanie dostępu do bloku w celu odczytu lub zapisu, sprzęt sprawdza jego obecność za pomocą bitu obecności (pbit) w deskryptorze.
Pbit równy 1 wskazuje na obecność bloku. W takim przypadku dostęp do bloku można uzyskać poprzez adres fizyczny w deskryptorze. Jeśli pbit wynosi zero, generowane jest przerwanie dla MCP (systemu operacyjnego), aby blok był obecny. Jeśli pole adresowe ma wartość zero, jest to pierwszy dostęp do tego bloku i jest on przydzielany (bit init). Jeśli pole adresu jest niezerowe, jest to adres dysku bloku, który został wcześniej rozwinięty, więc blok jest pobierany z dysku, a pbit jest ustawiany na jeden, a adres pamięci fizycznej aktualizowany tak, aby wskazywał na blok w pamięci (kolejny pbit). To czyni deskryptory równoważnymi wpisom w tablicy stron w systemie MMU. Wydajność systemu można monitorować za pomocą liczby pbitów. Początkowe pbity wskazują początkowe przydziały, ale wysoki poziom innych pbitów wskazuje, że system może się rzucać.
Cała alokacja pamięci jest więc całkowicie automatyczna (jedna z cech nowoczesnych systemów) i nie ma innego sposobu na alokację bloków niż ten mechanizm. Nie ma takich wywołań jak malloc lub dealloc, ponieważ bloki pamięci są również automatycznie odrzucane. Schemat jest również leniwy , ponieważ blok nie zostanie przydzielony, dopóki nie zostanie faktycznie odniesiony. Kiedy pamięć jest prawie pełna, MCP sprawdza zestaw roboczy, próbując upakować (ponieważ system jest podzielony na segmenty, a nie stronicowany), zwalniając segmenty tylko do odczytu (takie jak segmenty kodu, które można odtworzyć z ich oryginalnej kopii) i jako ostateczność, wyrzucanie brudnych segmentów danych na dysk.
Innym sposobem, w jaki B5000 zapewnia funkcję MMU, jest ochrona. Ponieważ wszystkie dostępy odbywają się przez deskryptor, sprzęt może sprawdzić, czy wszystkie dostępy mieszczą się w granicach, aw przypadku zapisu, czy proces ma uprawnienia do zapisu. System MCP jest z natury bezpieczny i dlatego nie potrzebuje MMU, aby zapewnić ten poziom ochrony pamięci. Deskryptory są tylko do odczytu dla procesów użytkownika i mogą być aktualizowane tylko przez system (sprzęt lub MCP). (Słowa, których znacznikiem jest liczba nieparzysta, są tylko do odczytu; deskryptory mają znacznik 5, a słowa kodowe mają znacznik 3).
Bloki mogą być współdzielone między procesami za pomocą deskryptorów kopiowania w stosie procesów. W związku z tym niektóre procesy mogą mieć uprawnienia do zapisu, a inne nie. Segment kodu jest tylko do odczytu, a zatem jest ponownie wprowadzany i współdzielony między procesami. Deskryptory kopiowania zawierają 20-bitowe pole adresowe podające indeks deskryptora głównego w tablicy deskryptorów głównych. Implementuje to również bardzo wydajny i bezpieczny mechanizm IPC. Bloki można łatwo przenosić, ponieważ tylko deskryptor główny wymaga aktualizacji, gdy zmienia się status bloku.
Jedynym innym aspektem jest wydajność – czy systemy oparte na MMU lub nie oparte na MMU zapewniają lepszą wydajność? Systemy MCP mogą być wdrażane na standardowym sprzęcie, który ma MMU (na przykład standardowy komputer). Nawet jeśli implementacja systemu w jakiś sposób wykorzystuje MMU, nie będzie to w ogóle widoczne na poziomie MCP.