• Memory Management Unit (MMU) i jego obsługa

08.02.2005 16:34, autor artykułu: Sebastian Rosa
odsłon: 9435, powiększ obrazki, wersja do wydruku,

Ten dosyć obszerny artykuł w całości będzie poświęcony specjalnej jednostce zarządzającej pamięcią. Bardziej obeznane w temacie osoby zapewne wiedzą, czym jest MMU, lecz jest także wiele osób, które po dziś dzień zastanawiają się czym są te 3 magiczne literki, czy ja to także posiadam, a jeżeli tak, to jak to mogę wykorzystać?

PODSTAWY

MMU jest to skrót od "Memory Management Unit", co można przetłumaczyć na nasz język jako "jednostka zarządzająca pamięcią". Procesory posiadające ten specjalny element, zwane są bardzo często procesorami pełnymi. MMU jest to bardzo użyteczna, a zarazem wydajna część naszego procesora, która może być pojmowana jako tłumacz pomiędzy procesorem, który wykonuje wszelkiego rodzaju obliczenia, a otaczającym go hardwarem takim jak pamięć, czy wszelkiego rodzaju urządzenia/układy wejścia-wyjścia. Każdorazowy dostęp do procesora, odbywający się z zewnątrz, musi przejść przez "sito" MMU. MMU wówczas sprawdza, czy obszar pamięci, do którego odwołuje się urządzenie jest dostępny, zabezpieczony przed zapisem, może być przechowywany przez wewnętrzny cache procesora i inne. MMU może otrzymać polecenie "przetłumaczenia" adresów widzianych przez procesor, na inne adresy widziane przez inne urządzenia, jak również może zostać zmuszone do "przemapowania" fragmentów pamięci bez naruszania jej obecnej struktury (co jest niekiedy bardzo użyteczne).

Każdy bajt, czyli komórka pamięci, posiada swój adres. Adres ten jest tak jakby jego nazwą, charakterystyczną tylko dla niego, znaną i rozumianą przez system. Sam adres to nic innego jak zwykła liczba, coś jakby numer domu przy jednej baaaaardzo długiej ulicy. Rozróżniamy dwa rodzaje adresów: adresy fizyczne i adresy logiczne. Adresy fizyczne to te, które są dostępne przez ten cały stos krzemu, który chowa się w naszej obudowie. Dzielą się one na dwie części. Jednym z nich jest szyna adresowa, która przekazuje adresy z mikroprocesora, który jak wiadomo przeprowadza wszelkie obliczenia, do otaczających układów odpowiedzialnych za grafikę, dźwięk, napędy itd. Drugim jest szyna danych, która przenosi aktualną zawartość komórek pamięci, które mają zostać odczytane lub zapisane. Jak widać szyna danych i szyna adresowa wzajemnie się uzupełniają: szyna danych mówi co przenieść, a szyna adresowa, gdzie i skąd.

Nie mniej jednak, adresy fizyczne nie są widziane przez oprogramowanie naszego komputera. Wykonanie programu, interpretacja jego kodu są dokonywane przez mikroprocesor. Programy oczywiście również posługują się adresami, ale troszeczkę innymi, zwanymi adresami logicznymi. Adresy te muszą przejść właśnie przez MMU zanim wydostaną się na zewnątrz.

Jakie jest zatem działanie MMU? MMU pobiera adresy logiczne, określone przez program, i tłumaczy je na adresy fizyczne. W ten sposób dla całego "świata zewnętrznego" dostępne są tylko adresy fizyczne. A zatem nasze urządzenia/układy wejścia-wyjścia nie muszą marnować czasu, na zamianę adresów logicznych na fizyczne lub odwoływanie się do innych programów, które zrobiłyby to za nie. Przy tym jednak, nie są tracone dane przenoszone przez adresy.

MMU zazwyczaj jest zintegrowane w ten sam układ co główna jednostka procesorowa, za wyjątkiem procesora 68020, który posiada oddzielny, zewnętrzny chip - 68851. Od samego początku istnienia Amigi MMU nie istniało. Sytuacja zmieniła się wraz z erą nastania procesora 68020, jednakże aby pozostać kompatybilnym w dół, MMU było odłączone lub wykorzystywane przez nieliczną rzeszę specjalistycznych programów.

FUNKCJE MMU

Wiele programów wykorzystuje dobrodziejstwa jakie niesie za sobą MMU. Najbardziej jednak potrzebne jest dla samego systemu operacyjnego. Po pierwsze, MMU informuje procesor, aby nie przechowywał w swoim cache pamięci Chip, co wręcz uwielbiają robić układy amigowe. Drugą ważną sprawą jest to, iż przy pomocy MMU możliwy jest przerzut całego ROMu do 32-bitowej pamięci Fast. MMU wówczas tłumaczy, a może raczej przeistacza adresy ROM (widziane przez procesor), na adresy pamięci RAM, która będzie przetrzymywać obraz ROM. Trzecia użyteczna funkcja MMU wykorzystywana jest przez wszelkiego rodzaju programu "debuggujące", np. Enforcer. MMU wówczas pomaga określić, które adresy pamięci fizycznie są niedostępne. Czwartą, dosyć istotną rzeczą, jest fakt, iż MMU może tworzyć obrazy nieomalże nieskończonej ilości pamięci w dowolnie przez nas wskazanym miejscu, i to zarówno w pamięci, jak i na twardym dysku. Jest to tzw. system pamięci wirtualnej, wspomagany przez swapfile lub temporary file (pliki tymczasowe, odgrywające rolę pamięci). Piąta funkcja to szerokie zastosowanie MMU w dziedzinie wszelkiego rodzaju emulacji innych systemów, a także w przypadku korzystania z różnego rodzaju sterowników.

POMYSŁ

Jednak na nasze nieszczęście, system Amigi nie udostępnia ŻADNEGO oprogramowania do obsługi MMU! Wszystko odbywa się na drodze hacków systemowych i łat, które jak wiadomo zmniejszają stabilność systemu, a w dodatku, każdy z tych programów robi to po swojemu, co uwydatnia się "gryzieniem" programów obsługujących MMU.

Od czego są jednak zdolni amigowi programiści. Jeden z nich, Thomas Richter, znalazł sposób na to, aby dostęp do MMU był transparentny, łatwy, a co najważniejsze kompatybilny. Właśnie w tym celu została stworzona przez niego biblioteka "mmu.library", do której powinien odwołać się każdy program wykorzystujący MMU. Niestety starsze programy nie wykorzystają tej biblioteki, a aby tak się stało, muszą zostać napisane od początku. To oczywiście wiązałoby się z wieloma niedogodnościami. Jednak i na to znalazł się sposób. Thomas Richter stworzył zestaw narzędzi, które przejmują rolę starszego oprogramowania w momencie, gdy to odwołuje się bezpośrednio do hardware'u. Zostały one nazwane MuTools. Istotą ich działania jest kierowanie hardwarem niezależnie, bez żadnych specyficznych elementów procesora. MMU zarządza wówczas wszystkim, przez co procesor jest odciążony, głównie jeśli chodzi o sprawy przepisywania pamięci, czy też dostępu do niej. To z kolei wiąże się z przyspieszeniem działania tych programów.

PROBLEMY

Biblioteka mmu i narzędzia ją obsługujące zostały napisane w ostrożny i przemyślany sposób, aby zapewnić maksymalną kompatybilność. Jednakże zdarzają się pewne ograniczenia i błędy, głównie związane z procesorami. I tak, procesory 68000 oraz 68010 nie sprawiają żadnych problemów z biblioteką mmu, a to z racji iż nie posiadają układu MMU. Biblioteka oraz jej oprogramowanie może zostać zainstalowane na systemach opartych na tych procesorach, ale nie przyniesie ono żadnych rezultatów (co najwyżej guru). W przypadku procesora 68020 mamy dwa wyjścia. Albo nasza Motorolka jest wyposażona w MMU, albo nie. Jeżeli nie - to sytuacja wygląda podobnie jak w przypadku 68000 i 68010, jeżeli tak to układ 68020/68551 zachowuje się podobnie jak 68030, z tym, że jednostka MMU musi zużyć więcej czasu na dostęp i tłumaczenie niż standardowa 68030.

W przypadku procesora 68030 mamy również jego dwie odmiany: tak zwana prawdziwa 68030 oraz 68EC030. 68EC030 to tańsza wersja 68030 nie wyposażona w układ MMU. Instalacja biblioteki i pakietu nie przyniesie również żadnych pozytywnych rezultatów. Co do prawdziwej 68030, to MMU jak najbardziej zostanie pozytywnie zauważone, ale nie ustrzeżemy się pewnych niedogodności spowodowanych przez kontrolery DMA (ten mankamant występuje również przy procesorach 68040 i 68060). W skrócie rzecz ujmując, DMA to mechanizm, który zastępuje procesor w wykonywaniu wszystkich operacji wejścia/wyjścia. Tutaj zaczyna się to wszystko troszeczkę gryźć, gdyż w zasadzie MMU robi to samo, z tym, że szybciej i lepiej. Aby odciąć się, chociaż w części od DMA, zalecane jest niestosowanie programów i komend typu "CPU FastRom", "SetCPU FastROM", czy też "Enforcer", a w zamian posłużyć się programami zastępczymi z pakietu MuTools.

Sytuacja 68040 jest podobna. Rozróżniane są również dwa typy procesorów, z tym, że zasadniczo i 68040 i 68EC040 powinny być wyposażone w MMU. Zdarzają się jednak przypadki procków bez tego układu. Jeżeli jednak jesteśmy szczęśliwcami i posiadamy układ (niezależnie czy jest to 040, czy EC040) to tutaj mmu.library może znowu pracować dwojako: albo zostanie wykorzystana, albo zostanie wykorzystana i jeszcze dostaniemy bonus w postaci poprawionej biblioteki 68040.library (v40), która sprawia, że proces działania MMU nie jest tak pamięciożerny. Sposób sprawdzenia, jak nasza 040 wykorzystuje zasoby MMU jest bardzo prosty. Jeżeli system działał bez kłopotów na starej bibliotece 68040.library (v37.30), nie będzie miał również problemów z nową. Jeżeli jednak tak nie było i 68040.library (v37.30) nie chciała pracować, to 68040.library (v40) zacznie, lecz będzie potrzebne stworzenie (zmodyfikowanie) odpowiedniego pliku konfigurującego. Podobnie jak i w przypadku 68030 zalecane jest stosowanie odpowiednich programów zastępczych.

Przypadek ostatniego procesora linii 68k, czyli 68060 wypada podobnie jak 68040. Dla tego procesora również istnieje specjalna, bardziej wydajna, zastępcza biblioteka 68060.library. Na to jednak, czy nasz system rozpozna nową bibliotekę nie ma reguły. Tylko metodą prób i błędów możemy do tego dojść. Zalety nowej biblioteki są jednak większe. Po pierwsze jest najmniej pamięciożerna oraz wykorzystuje w 100% zasoby pamięci wirtualnej. Jeżeli jednak nowa biblioteka nie działa jak należy, podobnie jak przy 68040 będziemy zmuszeni zmodyfikować plik konfigurujący.

A jak wygląda sprawa PPC? Również dwojako. Sam procesor PPC nie sprawia żadnych problemów we współpracy z MMU, jednakże oprogramowanie tego procesora może. Wynika to z prostej przyczyny: istnieją dwa rodzaje sterowników kontrolujących PPC: PowerUp + ppc.library oraz WarpUp + WarpOs. Biblioteka mmu pracuje tylko w środowisku WarpUpa. Nie ma jednak co rozpaczać, gdyż istnieje już specjalny dodatek emulujący ppc.library pod WarpOsem.

OPROGRAMOWANIE

Skoro już wiemy, czym jest MMU i czy może nam się do czegoś przydać oraz czy nasz procesor będzie współpracował z biblioteką, nie pozostaje nam już nic innego jak instalacja oprogramowania, które wykorzystuje bibliotekę. Oprogramowania jest dosyć sporo i pokrótce postaram się każde z nich opisać. Zanim jednak do tego przejdę, skonfigurujmy sam pakiet MMU, czyli rdzeń, bez którego nasze nowe oprogramowanie do niczego się nie przyda.

Konfiguracja MMU w zasadzie nie jest niczym specjalnym. Jest to zwykły plik ASCII umieszczony w ENV: pod nazwą MMU-Configuration. W zasadzie nie trzeba nic w nim zmieniać, ale jeżeli chcemy aby nasz system pracował wydajniej i szybciej oraz wykorzystywał w pełni zasoby MMU to można się pobawić jego ustawieniami. Tutaj jednak malutkie ostrzeżenie: zmieniaj cokolwiek w tym pliku, jeżeli naprawdę wiesz co robisz! Na wszelki wypadek zrób sobie kopię bezpieczeństwa oraz co najważniejsze nie kombinuj!

Plik konfiguracyjny, jak już pisałem, to czyste ASCII. Wygląda on identycznie jak wszelkiego rodzaju skrypty, czyli wszystko jest komendą wykonywaną przez bibliotekę, za wyjątkiem znaków, które występują po średniku. Biblioteka mmu posiada sześć wbudowanych komend. Cała reszta użytych w pliku konfiguracyjnym rozkazów i dodatkowych komend musi znajdować się w specjalnym podkatalogu "mmu" stworzonym w katalogu LIBS:

Z racji, iż opis komend jest dosyć dobrze opisany w dokumentacji pozwolę sobie go tutaj pominąć. Jest to działka dla osób naprawdę zainteresowanych tematem. Gdyby jednak ktoś miał jakieś zapytania, proponuje kontaktować się bezpośrednio ze mną. Jeżeli próśb takich będzie dużo, to na pewno temat zostanie szerzej opisany na łamach PPA.

Teraz przejdziemy może do opisu poszczególnych programów zarządzających i wykorzystujących bibliotekę mmu.

MuForce

Na początek zajmiemy się właśnie tym programem. MuForce to program zastępczy dla słynnego Enforcera. Jego zadanie polega na obserwacji niedostępnych obszarów pamięci i informowaniu o tym wszelkiego rodzaju urządzenia/układy. Poinformowani zostajemy również i my. Otrzymujemy wtedy specjalny raport dotyczący próby przedostania się jakiejś procedury lub komendy w niedostępny obszar. W praktyce sprowadza się to do tego, że przy uruchomionym programie ustrzeżemy się pewnych niewytłumaczalnych "zwisów" systemu.

MuForce może zostać uruchomiony zarówno z Shella, jak i z Workbencha (z ikony). Najlepsze rezultaty daje jednak umieszczenie go zaraz po komendzie SetPatch w pliku Startup-Sequence. Przy okazji powinny być także wyłączone wszystkie programy typu Enforcer, czy CyberGuard. MuForce do odpowiedniej pracy potrzebuje przypisania odpowiednich parametrów, które mogą zostać wpisane z Shella lub w postaci tooltypów ikony. Parametry służą głównie do ustawień rodzajów raportów jakimi program będzie nas uraczał przy ewentualnych "niespodziankach". Są tam jednak parametry bardziej zaawanasowane łatające wiele funkcji tzw. Alert() oraz opcje ściśle określające na jakie rodzaje "zwisów" MuForce ma być szczególnie uczulony oraz co ma w takiej sytuacji czynić (dosyć użyteczne przy stosowaniu innych "patchy", których procedury łatające są widziane przez MuForce jako operacje niedozwolone (chociaż nie zawsze)). Program możemy w dowolnym momencie wyłączyć uruchamiając go ponownie z parametrem OFF. Uwaga! Osoby bawiące się w emulowanie Macintosha. Aby Shapeshifter oraz Fusion pracowały prawidłowo (czytaj: w ogóle pracowały) MuForce musi zostać uruchomiony z parametrem VALIDZERO.

Do ważniejszych parametrów można zaliczyć:

  • - QUIET - program po prostu robi swoje o niczym nas nie informując,
  • - TINY - nasz raport składa się tylko z jednej linii, z której (trzeba to powiedzieć) nic nie wynika,
  • - SMALL - raport będzie składał się z najważniejszych pozycji, które mogą zainteresować użytkownika (czyli nazwa programu, który zawinił, w jakim obszarze pamięci itp.),
  • - STACKCHECK - program będzie nas informował o każdorazowej próbie przekroczenia stosu. Aby wypróbować tę opcję proponuje uruchomić DoomAttacka bez uprzedniego założenia stosu o wielkości 200000. MuForce w piękny i zagmatwany sposób poinformuje nas o tym fakcie,
  • - DATESTAMP - opcja dosyć użyteczna. Do każdorazowego raportu będzie dołączana data i czas, kiedy to nastąpiło. Na screenach możecie zobaczyć MuForce'a pracującego bez tej opcji,
  • - DEADLY - MuForce staje się czuły praktycznie na jakiekolwiek zaburzenia (jeden program może ich wyświetlić nawet do kilku na raz),
  • - FSPACE - dla osób, których karty pozwalają adresować obszary pamięci $00F00000,
  • - VALIDZERO - już wspominałem o tej opcji. MuForce do poprawnego działania nie wymaga użycia tego parametru (a nawet nie jest wskazane jego użycie). Przy włączonym parametrze program nie sprawdza obszaru zerowego stronicy pamięci. W tym właśnie obszarze najczęściej zdarzają się jednak "zwisy". W takim razie po co ta opcja? Została ona stworzona z myślą o użytkownikach emulatorów Maca, gdyż MacOS przechowuje tutaj globalne dane.
  • - LED=x - przy pomocy tego parametru ustalamy jak długo ma trwać błysk ekranu w momencie "uderzenia". Wartość x standardowo wynosi 1. Jeżeli nie chcemy, aby ekran błyskał przy "uderzeniu" można wpisać tutaj wartość 0.
  • - FILE=x - opcja ta służy do sprecyzowania, gdzie mają być zapisywane raporty. Aby raport pojawił się w okienku MuForce wystarczy w miejsce x podać znaczek * (gwiazdka z klawiatury numerycznej lub SHIFT+8). Jeżeli chcemy, aby raporty pojawiały się w nowym okienku musimy podać jego parametry, np. CON:0/0/640/100/HIT/AUTO/WAIT. Wartość x możemy również zastąpić ścieżką dostępu do pliku na dysku twardym, czy dyskietce, lecz z racji, iż może się zdarzyć coś nieprzewidywanego niezalecane jest praktykowanie tej czynności.
  • - ON - opcja startująca program,
  • - OFF - opcja wyłączająca program
  • - WINDOW=x - parametr określający rozmiar okna, które się otworzy zaraz po starcie programu. Jako x można wpisać np. CON:0/0/640/100/MuForce/AUTO/CLOSE/WAIT. Opcja ta występuje przy każdym z niżej opisanych programów, z tym, że zamiast MuForce podajemy nazwę programu.


Szerszy opis parametrów można znaleźć w dokumentacji programu. Znaleźć tam również można dokładny opis raportu jakim raczy nas MuForce przy każdym "uderzeniu".

MuGuardianAngel

To drugi program wykorzystujący MMU. Jest to jednak pewnego rodzaju rozszerzenie do MuForce i powinien zostać uruchomiony zaraz po nim. Podczas gdy MuForce wykrywa tylko dostęp do niedostępnych regionów pamięci, MuGuardianAngel chroni również pamięć, która obecnie jest niezajęta (wolna) przed niepotrzebnym zapełnianiem lub dostępem w ogóle. W takiej sytuacji MuGuardianAngel poinformuje nas o tym w specjalnym raporcie.

MuGuardianAngel różni się znacznie od MuForce tym, że MuForce tylko wychwytuje ewentualne zakazane dostępy, podczas gdy MuGuardianAngel blokuje ich dalsze ewentualne poczynania. Jest to program zastępczy dla aż czterech innych: Guardian Angel, MungWall, MungList oraz MemSniff. Także, jeżeli posiadamy któryś z powyższych należy je czym prędzej wymienić na combo MuForce+MuGuardianAngel. Program ten łata również wiele funkcji systemowych.

Podobnie jak MuForce, MuGuardianAngel może zostać uruchomiony zarówno z Shella jak i z ikony. Posiada on również wiele parametrów pomagających w jego używaniu. Parametry, podobnie jak u MuForce, mogą zostać podane z Shella, jak również zostaną przez program odczytane z tooltypów ikony. Wszystkie dostępne parametry jak i rodzaje komunikatów wyświetlanych przez program zostały dokładnie opisane w dokumentacji.

Duet tych dwóch programów, przynajmniej dla mnie, jest bardzo pożyteczny. Przy jego pomocy udało mi się ustalić dlaczego mój Hippoplayer dziwnie się wiesza w momencie uruchamiania modułu w formacie MMD0, jeżeli wcześniej uruchomiony był moduł w formacie MMD1. Ponadto uniknąłem kilku nieprzyjemnych "zwisów" przy próbach odpalenia starszych produkcji scenowych (a zwłaszcza inter 64kB oraz 4kB) bezpośrednio z systemu. Pomimo usilnych prób, nie udało mi się zawiesić obydwu programów. Działają one stabilnie i nie powodują gryzienia się z innymi programami, których używam. Ponadto dało się zauważyć, iż systym stał się bardziej stabilny. Odbywa się to jednak kosztem prędkości, która spada o około 5-10%, a po ewentualnym "zwisie" nawet o 30% (szczególnie zauważalne przy odświeżaniu ekranu oraz wczytywaniu się ikon, ale znaczna część tego powodowana jest przez MuGuardianAngel, który stale monitoruje pamięć). Nie mniej jednak nie ujrzałem w trakcie kilkugodzinnego testu żadnego Debug Window informującego mnie, że jakaś aplikacja zawiesiła system. Zamiast tego otrzymywałem komunikat w okienku MuForce, a system pracował dalej bez żadnych problemów. W dodatku stan pamięci nie wykazywał większych zmian. W moim przypadku jest to wielkim wybawieniem, gdyż chyba nie muszę mówić jak bardzo denerwujące jest oglądanie inter i po prawie każdorazowym powrocie do systemu ujrzenie rameczki z "Suspend" i "Reboot" lub wciśnięcie nieuniknionego LAmiga+RAmiga+Ctrl, gdyż wskaźnik myszy zamarł w bezruchu albo niemożliwe jest uruchomienie czegokolwiek, bo ostatnio odpalona produkcja nie oddała zajętej pamięci...

Tak więc, podsumowując: MuForce+MuGuardianAngel to programy, w których jak do tej pory nie znalazłem wad. Gorąco polecam, zwłaszcza w sytuacjach, gdy uruchamiasz niepewny (dla systemu) soft lub bawisz się w oglądanie produkcji scenowych na słabszym procesorze (jak ja cierpię... :(

Uwaga! Wyłączając programy, najpierw wyłącz MuGuardianAngela, a dopiero później MuForce. W przeciwnym razie guru i nie ma przebacz...

MuSetCacheMode

Jest to malutki programik służący do ustalenia jak procesor powinien korzystać z jego wewnętrznych buforów, czyli cache, aby wszystko było kompatybilne z biblioteką mmu. Zazwyczaj nie ma potrzeby modyfikacji jakichkolwiek ustawień, zarówno programu jak i biblioteki mmu, aby program działał. Jednakże pewien rodzaj hardware'u, czy software'u może takiej modyfikacji wymagać. Program zastępuje działanie komendy SetCacheMode, która ma podobne działanie, ale nie jest w pełni kompatybilna z biblioteką mmu.

Tutaj wypadałoby wspomnieć czym jest "cache" i dlaczego jest taki ważny. Wszystkie procesory linii 68k, od 68020 wzwyż posiadają jeden lub dwa wewnętrznie wbudowane bufory danych, zwane "cache". Cache przechowuje najczęściej "odwiedzane" adresy pamięci. To z kolei zapobiega niepotrzebnemu odczytowi i zapisowi adresów pamięci nie dawno pobranych, a to w rezultacie zwiększa prędkość operacji wykonywanych przez procesor. Jednakże cała operacja "cache'owania" musi przebiegać z niezwykłą ostrożnością, z racji iż mamy tutaj do czynienia ze sprzętową częścią naszego procka. Cache może pracować w kilku trybach, które to właśnie możemy uaktywnić jako parametr MuSetCacheMode.

Oto parametry:
  • - ADDRESS=x - wartość x określa od jakiego miejsca ma zostać utworzony cache. Powinna ona zostać podana w sposób heksadecymalny rozpoczynający się od $ (SHIFT+4) lub od ciągu 0x, np. $00f80000 to to samo co 0x00f80000. Należy pamiętać, aby wartość x była podzielna przez rozmiar strony pamięci ustalony przez mmu.library. Rozmiar strony wynosi zazwyczaj $0400 (1K) na procesorach 68020/68030 oraz $1000 (4K) na procesorach 68040/68060. Ta opcja jest niezbędna do prawidłowego działania programu!
  • - SIZE=x - określamy rozmiar bloku pamięci dla którego zostanie dostosowany tryb cacheowania. Podobnie jak poprzednio x jest liczbą heksadecymalną rozpoczynającą się od znaku $ lub od ciągu 0x. Wartość x musi być również podzielna przez rozmiar strony pamięci.
  • - COPYBACK - ustawia cache w tryb COPYBACK. Opcja ta jest dostępna tylko na procesorach 68040 i 68060. Jej działanie polega na tym, że zapis do pamięci nie nastąpi od razu, lecz zostanie przechowany w cache'u tak długo, jak cache nie będzie potrzebny dla innych danych.
  • - WRITETHROUGH - ustawia cache w tryb WRITETHROUGH. Działanie polega na tym, że dane przejdą przez cache, gdzie zostaną dodane do już ulokowanych tam danych (dokonana się po prostu update cache) i zaraz potem powędrują do pamięci. Odczyt będzie jednak następował bezpośrednio z cache'a.
  • - CACHEINHIBIT - ustawia cache w tryb CACHEINHIBIT. Stronica pamięci nie będzie przechowywana w cache, lecz od razu powędruje do pamięci.
  • - NONSERIAL - ustawia cache w tryb NONSERIAL. Dostępny tylko dla procesorów 68040. Stronica pamięci nie jest przetrzymywana w cache, ale procesor może wykonać pewne "przetasowanie" pamięci, aby obszar do którego powędrowała stronica miał priorytet pierwszeństwa.
  • - IMPRECISE - ustawia cache w tryb IMPRECISE. Dostępny tylko dla procesorów 68060. Stronica nie będzie przetrzymywana w cache, ale procesor może przyspieszyć dostęp do pamięci, gdzie została ulokowana stronica używając specjalnego mechanizmu dostępu, nazwanego "sloppy", który nie pozwala na skorygowanie błędów szyny adresowej.
  • - ROM - zabezpiecza obszar pamięci przed zapisem,
  • - NOROM - zdejmuje zabezpieczenie,
  • - WRITEPROTECTED - zabezpiecza obszar pamięci przed zapisem, z tym, że każda próba zapisu będzie zauważana jako błąd, co np. MuForce zobrazuje informacją o ewentualnym "zwisie",
  • - NOWRITEPROTECTED - zdejmuje zabezpieczenie,
  • - VALID - odbezpiecza dostęp do regionu pamięci, który wcześniej był zabezpieczony (uznany jako Invalid) lub pusty (blank),
  • - INVALID - zabezpiecza region pamięci przed jakimkolwiek zapisem czy odczytem. Uwaga! Należy stosować tę opcję tylko wtedy, gdy MuForce został wcześniej uruchomiony,
  • - BLANK - określa obszar pamięci jako pusty.


MuMove4K

Ten malutki programik z kolei służy do przygotowania odpowiedniego obszaru pamięci dla programu MuFastZero. Powinien zostać uruchomiony jak najwcześniej, najlepiej zaraz po komendzie Setpatch. Jest on wręcz niezbędny w sytuacji, gdy chcemy przełożyć bibliotekę systemową exec.library oraz expansion.library z pamięci Chip do Fast. Sam proces przełożenia (przemieszczenia) odbywa się przy pomocy programu MuFastZero, jednak MuMove4K musi zostać uruchomiony jako pierwszy, aby sprawdzić czy taka alokacja jest w ogóle możliwa.

MuMove4K wykonuje nieomalże tę samą funkcję co PrepareEmul, program wymagany do uruchomienia ShapeShiftera. Programy te nie są jednak ze sobą kompatybilne (nie możemy używać ich jednocześnie), ale MuMove4K w połączeniu z MuFastZero umożliwiają nam to samo, a nawet i więcej, gdyż dostajemy dodatkowe przyspieszenie emulacji MacOS-a. MuMove4K, podobnie jak PrepareEmul, musi zresetować nasz system!

MuMove4K posiada następujące parametry:
  • - PREPAREEMUL - MuMove4K przejmuje rolę wspomnianego programu,
  • - PREPAREEMUL A1200 - w sytuacji, gdy pierwszy parametr nie działa (sytuacja wygląda identycznie przy komendzie PrepareEmul - nigdy nie wiadomo, które ustrojstwo zadziała na naszym sprzęcie).
  • - OFF - MuMove4K zresetuje system i usunie się z pamięci.
  • - IGNOREVERIFY - MuMove4K posiada inteligentny sposób na reset systemu: sprawdza, czy żadne z urządzeń zewnętrznych obecnie nie pracuje. Jeżeli tak jest, to po prostu nie uruchamia się. Opcja IGNOREVERIFY sprawia, że program nie sprawdza co poczynają sobie nasze twarde dyski,


MuFastZero

MuFastZero to program, który umożliwia przerzucenie przerwań wektorowych (vector base) z pamięci Chip do Fast. Zasadniczo program nie jest taki znowu niezbędny, gdyż takie przemieszczenie możliwe jest również bez używania MMU. Jednakże wychodzi to na dobre systemowi, jeżeli w pamięci Fast, to właśnie MMU stworzy ich kopie. Programik ten może zostać również wykorzystany do przerzucenia najważniejszych bibliotek systemowych (exec.library oraz expansion.library) do Fastu co również przyspiesza system. To jednakże wymaga użycia dodatkowego programu MuMove4K, który pomoże nam zaalokować odpowiedni obszar pamięci.

Oto parametry programu:
  • - ON - uaktywnia program
  • - OFF - zwalnia obszar pamięci, w którym stworzony był obraz przerwań wektorowych oraz biblioteki systemowe,
  • - FASTEXEC - MuFastZero próbuje przemieścić biblioteki wspomniane wyżej do pamięci Fast.
  • - FORCENATIVE - program, zaraz po starcie poinformuje nas, czy ten parametr jest wymagany. Jego działanie polega na tym, aby sprawdzić, czy jakiś inny program uruchomiony wcześniej, nie zrobił tej samej czynności, co MuFastZero.
  • - MOVEVBR=FASTVBR - przerzuca "exception vector base" do pamięci Fast.
  • - CLEARVBR - odwołuje powyższą (przydatne w wielu grach, które odmawiają współpracy z procesorami 68040/68060)


MuLink

MuLink to z kolei ukłon w kierunku developerów. Program ten uaktywnia ochronę pamięci przed zapisem dla wybranych części egzekutywnych. Do poprawnego działania wymaga programu MuOVLYMGR.

MuOVLYMGR

Ten program nie działa samodzielnie. Jest to plik binarny, który zawiera kod ochrony pamięci używany przez program MuLink.

MuFastROM

Jest to program służący do stworzenia lustrzanego odbicia ROMu w w pamięci Fast. Ma to na celu znaczne przyspieszenie całego systemu. Przerzucony do pamięci ROM jest zabezpieczony przed jakimkolwiek zapisem. MuFastROM jest programem zastępczym dla programów typu "CPU FastROM" oraz "SetCPU FastROM". Program uaktywnia się poprzez uruchomienie go z Shella z odpowiednim parametrem lub z ikony, z wpisanymi odpowiednimi tooltype'ami.

Najważniejsze parametry dostępny w MuFastROM:
  • - ON lub FASTROM - włączenie przerzutu ROMu do Fastu,
  • - OFF lub NOFASTROM - pamięć z obrazem ROMu przestaje działać jak ROM i jest znowu dostępna przez system,
  • - HEAD - MuFastRom lokuje nasz ROM w pamięci o najniższej wartości. "Fabrycznie" programik ustawiony jest tak, aby lokować ROM w najwyższych obszarach pamięci, co ma skutecznie zapobiegać fragmentacji.


Podsumowując, MuFastROM, na tle konkurencji w postaci MCP, czy BlizKicka wypada najlepiej. Opcje MCP dotyczące przerzutu ROMu są bardzo wolne (prędkość procesora spada prawie o 50% (test przeprowadzany na SysSpeedzie 2.6)), a BlizKick potrafi czasem "pogryźć się" z innymi programami.

MuFastChip

Program ten przyspiesza dostęp do pamięci Chip na procesorach 68040 i 68060. Dzieje się tak jednak tylko w sytuacji, gdy nowe biblioteki 68040.library i 68060.library nie mogą zostać użyte. W innej sytuacji rolę MuFastChip przejmuje samo MMU i nie wymaga to żadnej odgórnych działań ze strony użytkownika. Działanie programu opiera się na ustawieniu trybu cache jako IMPRECISE i NONSERIAL. Program powinien zostać umieszczony w WBStartup.

MuLockLib

Program ów, nie robi praktycznie nic poza tym, że uruchamia bibliotekę mmu.library i umieszcza ją w pamięci, gdzie zostaje "zakotwiczona". Uruchomienie programu ponownie, zwalnia "zakotwiczoną" bibliotekę.

MuScan

Celem działania tego programu jest wyświetlenie tablicy MMU. Program można wykorzystać w celu sprawdzenia funkcji działania wielu innych programów jak chociażby MuFastROM, czy MuFastZero. MuScan uruchamia się z parametrem, który jest ścieżką dostępu do pliku, gdzie takie informacje mogą się znaleźć. Jako kanał wyjścia (output) może zostać również podane okno Shella.

MuOmniScsiPatch

Ten patch sprawia, że urządzenia zewnętrzne, prawidłowo rozpoznają tablice MMU i prawidłowo przeprowadzają operację zmiany adresów logicznych na fizyczne. Instalacja łatki nie jest wymagana, ale jest zalecana.

MuEVD

To nie program, lecz zewnętrzny sterownik graficzny dla ShapeShiftera. Wykorzystuje on wszelkie dobrodziejstwa MMU. Umożliwia pracę w trybie ECS, AGA oraz P96/Cgfx na ekranach 1-, 2-, 4-, 8-, 15- i 24-bitowych (ten ostatni nie na AGA ani ECS, oczywiście). Umożliwia również emulację trybu HAM8 oraz wyświetlenie ekranu 15-bit HiColor na kościach AGA.

OSTATNIE SŁOWO

Przyszedł czas na podsumowanie. Praca z programami wykorzystującymi układ MMU oraz korzystającymi z biblioteki mmu.library w moim przypadku była bardzo pomyślna. Pakiet MuTools nie sprawia problemów, zarówno w sferze instalacyjno-konfiguracyjnej jak i w sferze wykorzystania. Pomimo iż są to łaty na system, są stabilne, nie "gryzą" się z resztą software'u, co sprawia, że zapominamy iż faktycznie są łatami i "hackami". Ich największą zaletą jest to, że odwołują się do konkretnego podzespołu naszej Amigi, który do tej pory leżał "odłogiem". Nie robią nic "w locie", lecz korzystają z zasobów hardware'u. Są po prostu zrobione z głową. Thomas Richter wpadł na doskonały pomysł, aby wszystko oprzeć na jednej konkretnej tablicy MMU. Z własnego doświadczenia mogę powiedzieć, że programy MuTools ani razu mnie nie zawiodły i jestem naprawdę zadowolony z faktu iż ich używam. Prędkość mojej 030/50 Mhz po zainstalowaniu tych małych pcheł nieco zmalała, ale stabilność znacznie wzrosła.

Cały pakiet MuTools oraz biblioteka mmu.library posiadają status freeware i można je ściągnąć z Aminetu (util/boot).

Wielokrotnie w artykule, po bardziej szczegółowe informacje, odwoływałem się do dokumentacji, zarówno samej biblioteki mmu, jak i programów z niej korzystających. Jak już jednak wspominałem, gdyby jednak pojawiły się głosy proszące o bardziej dogłębne przybliżenie kilku aspektów (głównie kwestia omówienia poszczególnych parametrów każdego z programów oraz konfiguracja mmu.library) to bardzo proszę o kontakt ze mną.

P.S. W zasadzie instalacja powyżej omówionego oprogramowania spowalnia nieco system. Oto najprostsza ze sztuczek jak go dopalić.

Wykonaj niewielką edycję pliku MMU-Configuration. Wystarczy w dowolnym miejscu wpisać CLEARTTX. Teraz trzeba zresetować komputer. Jeżeli widzisz przed sobą blat Workbencha to znaczy, że wszystko jest w porządku. Jeżeli jednak doświadczyłeś jakiegoś guru lub innego dziwnego objawu, czym prędzej usuń tę linię z pliku. Winę tutaj ponosi Twoją płyta główna lub karta turbo (a dokładniej slot, którymi są te dwie rzeczy połączone) i nic nie jest w stanie tego zmienić.

 głosów: 10   
dodaj komentarz
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem