123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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 {
- /* All times in µs */
- /* time intervals */
- long D; /* Deadline */
- long Delta; /* Inherited deadline */
- long T; /* period */
- long C; /* Cost */
- long S; /* Slice: time remaining in this period */
- /* times (only low-order bits of absolute time) */
- long r; /* (this) release time */
- long d; /* (this) deadline */
- long t; /* Start of next period, t += T at release */
- long s; /* Time at which this proc was last scheduled */
- /* for schedulability testing */
- long testDelta;
- int testtype; /* Release or Deadline */
- long testtime;
- Proc *testnext;
- /* other */
- ushort flags;
- Timer;
- /* Stats */
- long edfused;
- long extraused;
- long aged;
- ulong periods;
- ulong missed;
- };
- extern Lock edftestlock; /* for atomic admitting/expelling */
- #pragma varargck type "t" long
- #pragma varargck type "U" uvlong
- /* Interface: */
- Edf* edflock(Proc*);
- void edfunlock(void);
|