[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

WHDLoad i Jednostka Zarządzająca Pamięcią (MMU)

MMU posiadają następujące procesory: 68030, 68040, 68060. Istnieją również tak zwane wersje EC tych procesorów, które posiadają zepsute, niedziałające MMU. Dla przykładu, wszystkie standardowe A4000/030 posiadają procesor 68EC030. Karty turbo wykonane przez firmy trzecie przedstawiają zgoła odmienną sytuację w tej materii i więcej na ich temat można dowiedzieć się z dostarczanej wraz z nimi dokumentacji. Z tego co wiem, wszystkie akceleratory 68040/68060 dla Amigi posiadają pełne procesory, czyli wyposażone w MMU (gdyż tryb burst i Zorro III wymagają mapowania MMU przez przestrzeń urządzeń wejścia/wyjścia). Brak MMU na procesorach EC nie może zostać nadrobiony poprzez oprogramowanie. Mimo wszystko, wszystko wymaga osobnych ustawień we właściwych opcjach WHDLoad.
Procesory 68020 wyposażone są w zewnętrzne MMU zwane 68851. Póki co, nie jest ono obsługiwane przez WHDload.

Cechy MMU i wykorzystanie ich przez WHDLoad

Głównym zadaniem MMU jest tłumaczenie logicznych adresów na fizyczne. Wymagane jest to dla pamięci wirtualnej i wydzielonej przestrzeni adresowej. Kolejną cechą jest precyzowanie specjalnych właściwości, takich jak tryb "Tylko Nadzorca" (Supervisor Only), tryb zabezpieczenia przed zapisem (Write Protected) czy tryb buforowania dla każdej fizycznej przestrzeni adresowej skonfigurowanej w oparciu o strony pamięci, które w WHDLoad posiadają rozmiar 4096 bajtów. WHDLoad nie korzysta z tłumaczenia adresów logicznych na fizyczne. Wykorzystuje MMU do ochrony pamięci, zarządzania cache i kilku innych specjalnych funkcji (Snooping, resload_Protect#?).

Ochrona pamięci w WHDLoad

. Na początku, WHDLoad skanuje listę pamięci i buduje drzewo tłumaczeń (translation tree), które zawiera wszystkie adresy dostępnej pamięci. Zaznacza poniższe adresy przestrzeni jak prawidłowe i dostępne: $0...BaseMem (wykorzystując informacje z pliku .slave), $dff000...$dff200 (rejestry Custom), $bfd000...$bff000 (rejestry Cia) i pamięc wykorzystana przez plik .slave i WHDLoad. Jeżeli w pamięci znajduje się program zatrzymujący działanie innych programów, pamięć przez niego wykorzystywana również oznaczana jest jako dostępna. Każdy inny obszar pamięci oznaczany jest jako niedostępny. Każdy dostęp do takiej pamięci (zapis lub odczyt) spowoduje wyjątek błędu dostępu (Access Fault Exception), który zakończony zostanie stosownym komunikatem wytworzonym przez WHDLoad.

Kontrola MMU w WHDLoad z poziomu użytkownika

Istnieją trzy różne tryby w jakich WHDLoad może wpływać na MMU.
  1. ignorowanie MMU:
    W tym trybie WHDLoad nie zmienia rejestrów MMU. Może być to użyteczne w sytuacji, gdy uruchamiamy programy, które nie życzą sobie obecności MMU.
    Ostrzeżenie: ponieważ WHDLoad nie kontroluje MMU, mogą występować różne problemy. Mogą one powodować zawieszenia, błędy lub inne trudne do przewidzenia zachowania. Oto lista możliwych sytuacji:
  2. wyłączenie MMU:
    W tym trybie, który jest możliwy tylko na 68030, MMU zostanie wyłączone przez WHDLoad. Żadne funkcje powiązane z MMU nie są dostępne.
  3. wykorzystanie MMU:
    W tym trybie WHDLoad przejmuje pełną kontrolę nad MMU i dokonuje ochrony pamięci i zarządzania cache tak, jak to opisano powyżej.
Na 68030 domyślnie ustawione jest wyłączenie MMU. Na 68040/68060 domyślnie ustawione jest wykorzystanie MMU. Istnieją dwie opcje, które to kontrolują. MMU/S zmusza WHDLoad do wykorzystania MMU i jest wymagane na procesorach 68030, aby MMU zaczęło działać. NoMMU/S wyłącza użycie MMU przez WHDLoad (ignorowanie MMU).

Czasem "hit" Enforcera jest "hitem" Enforcera. (Michael Sinz)


[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]