This is an old version from the tos.hyp. The new is on GitHub!

HomeAnhangAngabe der QuellenTOS Liste

16.6 Der PMMU-Funktionshandler

Der Funktionshandler ist über den PMMU-Cookie erreichbar, und wird von Programmen wie Outside oder VRAM angelegt. Der Aufruf des Handlers ist nur im Supervisor-Modus erlaubt, und geschieht über eine Funktionsnummer, die im Datenregister D0 abgelegt wird. Eventuelle Rückgabewerte finden sich ebenfalls in diesem Register wieder. Andere Prozessorregister werden nicht verändert.

Zur Zeit stehen die folgenden Funktionen zur Verfügung:

Wichtiger Hinweis: Diese Funktionen sind nur für einige wenige Programme aus dem Bereich der Systemsoftware von Bedeutung, und haben in Anwenderprogrammen nichts zu suchen.

Querverweis: Super   Supexec

16.6.1 ClearPageMode

Name: »ClearPageMode« - PMMU Modus für einen Bereich löschen.
Nummer: 2
Deklaration: ULONG ClearPageMode ( ULONG mode, ULONG start_address, ULONG length );
Beschreibung: Die Funktion löscht den PMMU-Modus für einen bestimmten Speicherbereich. Es gilt:

Parameter Bedeutung
mode Bit-Vektor analog SetPageMode
start_address Anfangsadresse des Speicherbereichs
length Länge des gewünschten Bereichs


Hinweis: Alle anderen Bits sind für zukünftige Zwecke reserviert. Ein Programm darf nur die Bits löschen, die es vorher selbst gesetzt hat.
Ergebnis: Die Funktion liefert bei fehlerfreier Ausführung den Wert Null zurück. Anderenfalls wird ein Wert zurückgeliefert, bei dem die Bits gesetzt sind, die nicht manipuliert werden konnten.
Gruppe: PMMU-Funktionshandler
Querverweis: GetHdv_inuse   GetPageSize   pmem_size   PMMUversion   SetPageMode   vmem_size

16.6.2 GetHdv_inuse

Name: »GetHdv_inuse« - Aktivität des Plattentreibers ermitteln.
Nummer: 4
Deklaration: UWORD *GetHdv_inuse ( VOID );
Beschreibung: Die Funktion ermöglicht es festzustellen, ob der Plattentreiber gerade dabei ist, eine Seite ein- oder auszuswappen.

Hinweis: Eine Überprüfung dieses Wortes muß erfolgen, bevor aus einer Interruptroutine heraus ein Zugriff auf das virtuelle RAM stattfindet. Der Plattentreiber darf nämlich nicht durch einen Zugriff auf eine nicht existente Speicherseite unterbrochen werden, falls gerade eine andere Seite ausgelagert wird. Ist das Statuswort ungleich Null, muß der Zugriff verschoben werden.
Ergebnis: Die Funktion liefert einen Zeiger auf das hdv_inuse-Wort zurück.
Gruppe: PMMU-Funktionshandler
Querverweis: ClearPageMode   GetPageSize   pmem_size   PMMUversion   SetPageMode   vmem_size

16.6.3 GetPageSize

Name: »GetPageSize« - Größe der Speicherseiten ermitteln.
Nummer: 3
Deklaration: ULONG GetPageSize ( VOID );
Beschreibung: Die Funktion ermittelt die aktuelle Größe einer Speicherseite.

Hinweis: Beim MC-68030 kann die Größe zwischen 256 Bytes und 32 Kbyte liegen.
Ergebnis: Die Funktion liefert Größe einer Speicherseite zurück.
Gruppe: PMMU-Funktionshandler
Querverweis: ClearPageMode   GetHdv_inuse   pmem_size   PMMUversion   SetPageMode   vmem_size

16.6.4 pmem_size

Name: »pmem_size« - Gesamtgröße des vom Speichermanagers verwalteten physikalischen Speichers ermitteln.
Nummer: 6
Deklaration: ULONG pmem_size ( VOID );
Beschreibung: Die Funktion ermittelt die Gesamtgröße des physikalischen Speichers, der vom Speichermanager verwaltet wird.

Hinweis: Diese Funktion steht erst ab Version 1.01 des PMMU-Cookies zur Verfügung.
Ergebnis: Die Funktion liefert die genannte Größe zurück.
Gruppe: PMMU-Funktionshandler
Querverweis: ClearPageMode   GetHdv_inuse   GetPageSize   PMMUversion   SetPageMode   vmem_size

16.6.5 PMMUversion

Name: »PMMUversion« - ermittelt die Versionsnummer des Handlers
Nummer: 0
Deklaration: UWORD PMMUversion ( VOID );
Beschreibung: Die Funktion ermittelt die Versionsnummer des PMMU-Handlers. Dabei wird in den Bits 8..15 die Version, und in den Bits 0..7 die Revision abgelegt. Ein Wert von 0x102 steht demnach für Version 1.02
Ergebnis: Die Funktion liefert die Versionsnummer des Handlers im o.g. Format zurück.
Gruppe: PMMU-Funktionshandler
Querverweis: ClearPageMode   GetHdv_inuse   GetPageSize   pmem_size   SetPageMode   vmem_size

16.6.6 SetPageMode

Name: »SetPageMode« - PMMU Modus für einen Bereich setzen.
Nummer: 1
Deklaration: ULONG SetPageMode ( ULONG mode, ULONG start_address, ULONG length );
Beschreibung: Die Funktion setzt den PMMU-Modus für einen bestimmten Speicherbereich. Es gilt:
Parameter Bedeutung
   
mode Modus als Bit-Vektor
Bit 0 = SwapInhabit
Der Speicherbereich wird nicht ausgelagert.
Bit 1 = WriteProtect
Der Speicherbereich wird schreibgeschützt; Schreibversuche führen zu einem Busfehler.
Bit 2 = Used
Der Speicherbereich wird als benutzt gekennzeichnet. Hierdurch erhält er temporär eine höhere Priorität, und wird vorerst nicht ausgelagert.
Bit 3 = Modified
Der Speicherbereich wird als verändert markiert. Dadurch wird dieser Bereich auf jeden Fall auf die Platte geschrieben, bevor neue Daten an seine physikalische Adresse eingelesen werden.
Bit 4 = CacheInhabit
Die Prozessor-Caches werden für den angegebenen Bereich abgeschaltet.
start_address Anfangsadresse des Speicherbereichs
length Länge des gewünschten Bereichs


Hinweis: Die restlichen Bits sind reserviert und müssen auf Null gesetzt werden. Für die virtuelle Speicherverwaltung ist in erster Linie das SwapInhabit-Bit von Bedeutung, da es die Möglichkeit bietet, bestimmte Speicherbereiche gegen Auslagern abzusichern.

Beim Schreibschützen von Speicherbereichen ist unbedingt zu beachten, daß der Speicher in Seiten unterteilt ist, die die kleinste Einheit für einen Schreibschutz darstellen. Es muß sichergestellt werden, daß sich der Schreibschutz nicht auch auf einen Bereich erstreckt, der nicht geschützt werden darf, weil er beispielsweise nicht zum eigenen Programm gehört.
Ergebnis: Die Funktion liefert bei fehlerfreier Ausführung den Wert Null zurück. Anderenfalls wird ein Wert zurückgeliefert, bei dem die Bits gesetzt sind, die nicht manipuliert werden konnten.
Gruppe: PMMU-Funktionshandler
Querverweis: ClearPageMode   GetHdv_inuse   GetPageSize   pmem_size   PMMUversion   vmem_size

16.6.7 vmem_size

Name: »vmem_size« - Gesamtgröße des virtuellen Speichers erfragen.
Nummer: 5
Deklaration: ULONG vmem_size ( VOID );
Beschreibung: Die Funktion ermittelt die Gesamtgröße des virtuellen Speichers.
Ergebnis: Die Funktion liefert die genannte Größe zurück.
Gruppe: PMMU-Funktionshandler
Querverweis: ClearPageMode   GetHdv_inuse   GetPageSize   pmem_size   PMMUversion   SetPageMode

HomeAnhangAngabe der QuellenTOS Liste