•  Back 
  •  Main 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : FreeMiNT für absolute Anfänger
Author      : Draco (draco@atari.org)
Version     : mint.stg (9/1/2001)
Subject     : MiNT
Nodes       : 73
Index Size  : 2258
HCP-Version : 3
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : 
@help       : 
@options    : -i -s +zz -t4 -d10
@width      : 75
View Ref-FileSpeicherschutz

FreeMiNT hat, und das ist unter Unices normal, aber neu für TOS-
Systeme, ein Konzept, um den Speicherbereich eines Programmes
gegen unerlaubte "Eindringlinge" zu schützen. Solche Eindringlinge
sind üblicherweise andere Programme, die aufgrund ihrer eigenen Fehler
"Amok laufen".

Der Hardware-Speicherschutz wird auf der Ebene der CPU und auf einer
"pro Prozess"-Grundlage implementiert, so daß Speicher, den ein
Prozess nicht angefordert hat, für diesen Prozess als ungültig
angesehen wird. Man tut, als ob solcher Speicher nicht existiert, und
erst zu existieren beginnt, nachdem ihn der Prozess vom System durch
einen Aufruf von Mxalloc() anfordert, entweder implizit oder explizit.
Der Speicherschutz dient dazu, einen fehlerhaften Prozess daran zu
hindern, andere parallel laufende Programme oder sogar das System
selbst zu zerstören. So lautet zumindest die Theorie.

In der Praxis muß FreeMiNT, außer Un*x-Software laufen zu lassen,
welche normalerweise völlig kompatibel mit Speicherschutz ist, auch
zu TOS-Programmen kompatibel sein. Entweder fehlen dem TOS einige
Möglichkeiten, die für Programme notwendig sind, oder dem
Programmierer fehlt bestimmtes Wissen, um nette Programme zu
schreiben, jedenfalls gibt es eine ganze Menge von TOS-Programmen, die
dazu neigen, in den Supervisor-Modus zu wechseln und Dinge zu tun, die
sich der Systemkontrolle entziehen. Ein solches Verhalten ist unter
TOS völlig in Ordnung, erzeugt jedoch unter FreeMiNT das Risiko eines
Konflikts mit den Schutzmechanismen für die Systemressourcen - und
FreeMiNT muß, um TOS-Programmen gegenüber generell kompatibel zu sein,
dieses Verhalten zulassen und sich auf die Annahme verlassen, daß die
Software im Allgemeinen "weiß, was sie tut". Falls sie das nicht weiß,
gibt es möglicherweise keine Chance auf Wiederherstellung.

Glücklicherweise implementiert FreeMiNT den Speicherschutz auf eine
Weise, die einige Benutzereinstellungen erlaubt. Die Art, wie der
Speicherbereich des Programmes geschützt werden kann, wird im
Kopfbereich ('Header') der binären Programmdatei kodiert. Es gibt vier
"Ebenen" oder Betriebsarten der Implementierung des Schutzes:

Private(privat)
In diesem Modus wird der Speicherbereich des Programmes sehr
restriktiv geschützt: Außer dem Programm selbst und dem Betriebssystem
darf niemand auf den vom Programm reservierten Bereich zugreifen.
Selbst Interrupt-Handler, die von dem Programm selbst installiert
wurden, dürfen das nicht tun! Das ist der voreingestellte Schutzmodus
und die meisten Programme arbeiten darunter recht gut.

Private/Readable(privat/lesbar)
Hier ist der Schutz weniger restriktiv: noch immer darf niemand (außer
dem Programm selbst und dem Betriebssystem) in den Bereich des
Programmes schreiben, aber jedermann darf sicher Daten daraus lesen.
Dieser Modus sollte für Programme eingestellt werden, die das
AV-Protokoll benutzen, aber nicht mit Rücksicht auf den Speicherschutz
geschrieben sind. ST Guide ist ein gutes (schlechtes) Beispiel dafür.

Super(super)
Die vollständige Bezeichnung lautet "Supervisor accessible"
(Zugriff möglich für Supervisor): Auf den Bereich des Programmes darf
von niemandem (wieder, außer von dem Programm selbst und dem
Betriebssystem) zugegriffen werden, solange der "Eindringling" im
'User'-Modus der CPU läuft. Jeglicher Code, der im Supervisor-Modus
läuft (wie zum Beispiel ein Interrupt-Handler), kann jedoch auf den
Speicherbereich des Programmes frei zugreifen. Sie sollten diesen
Modus für Software wählen, die eigene Interrupt-Handler installiert.
Der MOD-Player Dump! ist ein gutes Beispiel.

Global(global)
Man kann diesen Modus einstellen, falls ein Programm in keiner der
vorher erwähnten Betriebsarten läuft. Der Bereich des Programmes wird
nicht geschützt und jeder kann frei auf ihn zugreifen.

Allgemein gibt es drei übliche Arten, wie ein Programm den
Speicherschutz verletzt:

1) es versucht, auf Speicher zuzugreifen, der einem anderen Programm
   gehört. Die Systemmeldung, die darauf erscheint, erwähnt eine
   Speicherverletzung vom "Typ privat". Paradoxerweise muß das
   Programm, das auf diese Art beendet wurde, gar nicht schuld sein.
   Falls Sie zum Beispiel bemerken, daß Ihr Desktop mit
   Speicherverletzung "Typ privat" beendet wird, während Sie mit
   *.hyp-Dateien herumgespielt haben, sollten Sie nicht den
   Schutzstatus des Desktops, sondern - Sie haben es sicher schon
   erraten - den des st-guide.app ändern.

2) es versucht, auf Speicher zuzugreifen, der niemandem gehört.
   Das wird "Speicherverletzung Typ Frei" genannt. Das machen
   üblicherweise GFA BASIC-Programme, aber auch das gerade erwähnte
   kann ein Beispiel sein, wenn es darum geht, Farbbilder, die in
   einem Hypertext eingebettet sind, darzustellen. Das bedeutet, daß
   im Programm ein Fehler liegt, und wir können zu diesem Zeitpunkt
   nicht viel unternehmen (außer dem Autor zu veranlassen, den Fehler
   zu beheben).

3) es verursacht einen totalen Systemcrash. Beispiele sind: der Pure
   Debugger, X-Boot III oder der Dump! MOD-Player. Paradoxerweise
   kann das am einfachsten zu lösen sein, wie bei den angeführten
   Programmen - es reicht, den Schutzstatus auf "Supervisor" zu
   stellen.
   Die neuesten Versionen von FreeMiNT sind ein bißchen pingeliger,
   versuchen, ein Auge auf solchen Programmen zu behalten und den
   Benutzer (Sie) zu warnen, wenn es wahrscheinlich wird, daß die
   weitere Ausführung des Programmes das System beschädigt. Leider ist
   es nicht immer möglich, zu entdecken, daß ein Programm sich
   daranmacht, schlimme Dinge zu tun.

Mit dem Desktop Thing können Sie versuchen, den Schutzstatus eines
Programmes zu ändern und sein Verhalten zu testen. Als Regel kann
gelten, daß Sie alles so lassen wie es ist, falls ein Programm mit dem
"Privat"-Status funktioniert. Falls nicht, sollten Sie als nächstes
auf "Lesbar" wechseln, dann "Super" und zuletzt "Global".

Falls das Programm noch immer nicht funktioniert, könnte Sie noch
einen Versuch ohne Speicherschutz ans Ziel bringen. Trotzdem wollen
wir Ihnen nahelegen, das System im geschützten Modus zu betreiben
(wenn das nicht völlig inakzeptabel für Sie ist).

HINWEIS:
Der Speicherschutzmechanismus arbeitet nur auf Maschinen mit 68030-
oder neueren Prozessoren.