Home TypdefinitionenTypdefinitionen MacVersionMacVersion Memory-Deskriptor (MD) in TOSMemory-Deskriptor (MD) in TOS

I.10 Memory-Control-Block (MCB) in MagiC

typedef struct
{
    int32_t mcb_magic;        /* 'ANDR' oder 'KROM' (letzter)    */
    int32_t mcb_len;          /* Nettolänge                      */
    int32_t mcb_owner;        /* Zeiger auf PD-Struktur          */
    int32_t mcb_prev;         /* vorh. Block oder NULL           */
    int8_t mcb_data[0];
} MCB;

Hinweis: Die Komponente mcb_magic besitzt den Wert 'KROM', falls kein weiterer MCB folgt, und anderenfalls den Wert 'ANDR'. Im letzteren Fall liegt der nächste MCB mcb_len Bytes hinter dem aktuellen MCB. Die Liste ist per mcb_prev rückwärts verkettet, was viele Operationen erheblich beschleunigt.

Bei allen Speicheroperationen wird immer die Komponente mcb_magic überprüft, und das System bei einem Fehler sofort angehalten. Beim Anhalten aufgrund eines Speicherfehlers werden die Adresse des fehlerhaften MCB sowie die Daten (4 Langworte) ausgegeben. Anschließend wird man gefragt, auf welches Laufwerk man einen Systemauszug (core dump) speichern möchte. Gibt man ein gültiges Laufwerk an, so wird der gesamte ST-Speicher von 0 bis phystop auf das Wurzelverzeichnis des angegebenen Laufwerks geschrieben, und zwar unter dem Namen "_sys_". Die Datei kann natürlich je nach ST-Modell bis zu 4 oder gar 16 MB lang werden.

Speicherresidente Programme (beenden sich über Ptermres) arbeiten jetzt im Gegensatz zu früher einfach nur so, daß die Blöcke nicht freigegeben werden, alle MCBs bleiben intakt und werden auch weiterhin benutzt (jedesmal, wenn man in die Menüleiste klickt, wird der freie Speicher ausgegeben, dazu wird die gesamte Liste einmal durchlaufen und dabei alle MCBs überprüft). Wer möchte, kann also speicherresidente Programme (oder auch Teile davon) nachträglich freigeben.

Querverweis: GEMDOS   MagiC   MD   Speicherverwaltung


Home TypdefinitionenTypdefinitionen MacVersionMacVersion Memory-Deskriptor (MD) in TOSMemory-Deskriptor (MD) in TOS