53 lines
1.5 KiB
C
53 lines
1.5 KiB
C
/* process.h - Define administration types and functions
|
|
*
|
|
* This file is to be included by implementors of the higher
|
|
* level routines
|
|
*
|
|
*/
|
|
#include "parco.h"
|
|
|
|
#ifndef ptrdiff /* This type must be able to hold a pointer difference */
|
|
#define ptrdiff int /* Define as long int if necessary */
|
|
#endif
|
|
|
|
#define nil 0
|
|
void *alloc(), free();
|
|
|
|
typedef ptrdiff wordsize, identification;
|
|
|
|
wordsize top_size();
|
|
int top_save();
|
|
void top_load(); /* Primitives */
|
|
|
|
struct procgroup;
|
|
|
|
struct process {
|
|
struct process *next; /* Next process in the same group */
|
|
struct procgroup *down; /* Process group running under this process */
|
|
void *stack; /* Pointer to the saved stack top */
|
|
identification id; /* Coroutine identification */
|
|
};
|
|
|
|
#define init_between __i_b__ /* These names are hidden */
|
|
#define save_between __s_b__
|
|
#define load_betweens __l_b__
|
|
#define delete_between __d_b__
|
|
|
|
void init_between(), save_between(), load_betweens(), delete_between();
|
|
|
|
struct procgroup {
|
|
struct process **active;/* Active process within this group */
|
|
struct procgroup *up; /* The group that this group belongs to */
|
|
struct process *first; /* List of processes belonging to this group */
|
|
void *s_brk; /* Point where the stack is split */
|
|
void *between; /* Stack space between s_brk and up->s_brk */
|
|
};
|
|
|
|
#define group __grp__ /* Ignore this please */
|
|
#define highest_group __hgrp__
|
|
|
|
extern struct procgroup *group; /* Current running group */
|
|
extern struct procgroup *highest_group; /* highest group that has been seen
|
|
* while searching for a process
|
|
*/
|