mxProzess.h


/*
 * mxProzess.h
 *
 * ====================================================================================================================
 * Das Modul mxProzess stellt die Operationen, die zum Verwalten von Prozessen
 * benoetigt werden, zur Verfuegung.
 * ====================================================================================================================
 */

#ifndef __mxProzess__
#define __mxProzess__

#include "mxStrukturen.h"
#include "mxKernStruk.h"
#include "mxListe.h"

/************
** Defines **
************/
#define cSupervisorBit 13

/***************
** Prototypen **
***************/
tProzessNummer ProzessAnmelden(void);
/* Belegt einen freien Prozess-Verwaltungs-Block fuer einen neu zu startenden
 * Prozess. Falls kein Block mehr frei ist, wird in <ProzessNummer> 0
 * zurueckgegeben, sonst die Nummer des Prozesses.
 */

void *BenutzerUmgebungHerstellen(void *UserStackEnde, void *RuecksprungAdresse, tString Kommando, tString ArgZeile);
/* Erzeugt die Benutzerumgebung auf dem User-Stack, die die Prozessargumente argc/argv
 * und die Ruecksprungadresse aus dem Prozess enthaelt.
 * Rueckgabewert ist der resultierende USP.
 */

tProzessUmgebung *UmgebungHerstellen(void *KernStackEnde, void *aUserStackZeiger, void *StartAdresse);
/* Erzeugt eine leere Prozessumgebung auf dem Stack
 */

void ProzessStarten(tProzessNummer ProzessNummer, void *KernStackZeiger, void *UserStackZeiger,
		    void *StartAdresse, int Zeitscheibe, tString Kommando, tString ArgZeile);
/* Initialisiert anhand der uebergebenen Werte die Prozessumgebung sowie den
 * Prozess-Verwaltungs-Block des Prozesses mit Nummer <ProzessNummer>.
 * <KernStackZeiger> und <UserStackZeiger> sind die hoechsten Adressen der
 * als Stack zu verwendenden Speicherbereiche, <StartAdresse> ist die Adresse,
 * ab der der Prozess loslaufen soll, <Zeitscheibe> gibt an, wieviele
 * Uhren-Ticks der Prozess hintereinander laufen darf, <Kommando> soll der Name
 * des Prozesses sein (jedenfalls in einer spaeteren Ausbaustufe),
 * und <ArgZeile> enthaelt moegliche Kommandozeilenargumente.
 */

int BeendenVorbereiten(tProzessNummer ProzessNummer);
/* Ueberprueft, ob ein Prozess terminiert werden kann, und gibt die Antwort
 * in ok zurueck. Es gibt mehrere Gruende, warum ein Prozess gerade nicht
 * terminiert werden kann :
 *   - er wird bereits von einem anderen Prozess terminiert:
 *       falls der aufrufende Prozess gleich dem zu terminierenden Prozess
 *       ist, kehrt er nie mehr aus der Prozedur zurueck, denn er hat ja
 *       nichts mehr zu tun.
 *   - der zu terminierende Prozess laeuft gerade im System-Modus:
 *       da ein Prozess, der sich gerade im Kern befindet, nicht terminiert
 *       werden darf, wird er nur als zu terminieren markiert, und er
 *       terminiert sich selbst, wenn er das naechste Mal in den Benutzer-Modus
 *       zurueckwechseln wuerde.
 */

void ProzessBeenden(tProzessNummer ProzessNummer);
/* Sorgt dafuer, dass der Prozess mit Nummer <ProzessNummer> nicht mehr
 * gestartet wird. Sein Prozess-Verwaltungs-Block ist weiterhin belegt.
 */

void ProzessAbmelden(tProzessNummer ProzessNummer);
/* Gibt den vom Prozess mit Nummer <ProzessNummer> belegten
 * Prozess-Verwaltungs-Block wieder frei.
 */

int IstAbgeschossen(tProzessNummer ProzessNummer);
/* Gibt an, ob der Prozess mit Nummer <ProzessNummer> von einem anderen
 * Prozess abgeschossen wurde, waehrend er selbst noch im System-Modus
 * lief.
 */

int HatStackUeberlauf(void);
/* Gibt an, ob der laufende Prozess einen Ueberlauf des User-Stacks
 * verursacht hat.
 */

void ProzessInformationen(tProzessInformation Infos[]);
/* Liefert in <Infos> Informationen ueber die Zustaende aller Prozesse.
 */

int InitProzess(void);
/* Init fuer das Modul mxProzess */

#endif


Bei Problemen mit der Seite bitte eine Mail an Marek
Converted with C2HTML V0.669 by Iluvatar
Prozeßdatenverarbeitung