|
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