1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- enum {
- Maxsteps = 200 * 100 * 2, /* 100 periods of 200 procs */
- /* Edf.flags field */
- Admitted = 0x01,
- Sporadic = 0x02,
- Yieldonblock = 0x04,
- Sendnotes = 0x08,
- Deadline = 0x10,
- Yield = 0x20,
- Extratime = 0x40,
- Infinity = ~0ULL,
- };
- typedef struct Edf Edf;
- struct Edf {
- /* time intervals */
- vlong D; /* Deadline */
- vlong Delta; /* Inherited deadline */
- vlong T; /* period */
- vlong C; /* Cost */
- vlong S; /* Slice: time remaining in this period */
- /* times */
- vlong r; /* (this) release time */
- vlong d; /* (this) deadline */
- vlong t; /* Start of next period, t += T at release */
- vlong s; /* Time at which this proc was last scheduled */
- /* for schedulability testing */
- vlong testDelta;
- int testtype; /* Release or Deadline */
- vlong testtime;
- Proc *testnext;
- /* other */
- ushort flags;
- Timer;
- /* Stats */
- vlong edfused;
- vlong extraused;
- vlong aged;
- ulong periods;
- ulong missed;
- };
- extern Lock edftestlock; /* for atomic admitting/expelling */
- #pragma varargck type "t" vlong
- #pragma varargck type "U" uvlong
- /* Interface: */
- Edf* edflock(Proc*);
- void edfunlock(void);
|