15,11 → 15,11 |
|
/** |
------------ |
CVS : $Id: cbs_ft.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $ |
CVS : $Id: cbs_ft.c,v 1.3 2002-11-11 08:14:22 pj Exp $ |
|
File: $File$ |
Revision: $Revision: 1.1.1.1 $ |
Last update: $Date: 2002-09-02 09:37:41 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2002-11-11 08:14:22 $ |
------------ |
|
This file contains the server CBS_FT |
65,7 → 65,6 |
/*+ Status used in the level +*/ |
#define CBS_FT_IDLE APER_STATUS_BASE /*+ waiting the activation +*/ |
#define CBS_FT_ZOMBIE APER_STATUS_BASE+1 /*+ waiting the period end +*/ |
#define CBS_FT_DELAY APER_STATUS_BASE+2 /*+ waiting the delay end +*/ |
|
/* structure of an element of the capacity queue */ |
struct cap_queue { |
141,7 → 140,7 |
new = (struct cap_queue *)kern_alloc(sizeof(struct cap_queue)); |
if (new == NULL) { |
kern_printf("\nNew cash_queue element failed\n"); |
kern_raise(XUNVALID_TASK, p); |
kern_raise(XINVALID_TASK, p); |
return -1; |
} |
new->next = NULL; |
242,7 → 241,7 |
/* If the budget is still less than 0, an exception is raised */ |
if (proc_table[p].avail_time <= 0) { |
kern_printf("\nnegative value for the budget!\n"); |
kern_raise(XUNVALID_TASK, p); |
kern_raise(XINVALID_TASK, p); |
return; |
} |
|
290,7 → 289,6 |
switch (status) { |
case CBS_FT_IDLE : return "CBS_FT_Idle"; |
case CBS_FT_ZOMBIE : return "CBS_FT_Zombie"; |
case CBS_FT_DELAY : return "CBS_FT_Delay"; |
default : return "CBS_FT_Unknown"; |
} |
} |
352,7 → 350,7 |
else { |
/* this situation cannot occur */ |
kern_printf("\nTrying to reactivate a primary task which is not IDLE!\n"); |
kern_raise(XUNVALID_TASK,p); |
kern_raise(XINVALID_TASK,p); |
} |
} |
|
435,7 → 433,7 |
|
/* we finally put the task in the FREE status */ |
proc_table[p].status = FREE; |
q_insertfirst(p,&freedesc); |
iq_insertfirst(p,&freedesc); |
|
|
/* and free the allocated bandwidth */ |
605,29 → 603,11 |
return 0; /* if the task p is chosen, it is always eligible */ |
} |
|
#ifdef __TEST1__ |
extern int testactive; |
extern struct timespec s_stime[]; |
extern TIME s_curr[]; |
extern TIME s_PID[]; |
extern int useds; |
#endif |
|
static void CBS_FT_task_dispatch(LEVEL l, PID p, int nostop) |
{ |
CBS_FT_level_des *lev = (CBS_FT_level_des *)(level_table[l]); |
level_table[ lev->scheduling_level ]-> |
guest_dispatch(lev->scheduling_level,p,nostop); |
|
#ifdef __TEST1__ |
if (testactive) |
{ |
TIMESPEC_ASSIGN(&s_stime[useds], &schedule_time); |
s_curr[useds] = proc_table[p].avail_time; |
s_PID[useds] = p; |
useds++; |
} |
#endif |
} |
|
static void CBS_FT_task_epilogue(LEVEL l, PID p) |
653,7 → 633,7 |
/* The budget must be greater than 0! */ |
if (proc_table[p].avail_time <= 0) { |
kern_printf("\nBackup task starting with exhausted budget\n"); |
kern_raise(XUNVALID_TASK, p); |
kern_raise(XINVALID_TASK, p); |
lev->CP[p] = 0; |
/* we kill the current activation */ |
level_table[ lev->scheduling_level ]-> |
679,7 → 659,7 |
|
if (lev->P_or_B[p] == BACKUP) { |
kern_printf("\nTrying to activate a BACKUP task!\n"); |
kern_raise(XUNVALID_TASK, p); |
kern_raise(XINVALID_TASK, p); |
} |
else { |
|
726,7 → 706,7 |
static void CBS_FT_task_insert(LEVEL l, PID p) |
{ |
printk("CBS_FT_task_insert\n"); |
kern_raise(XUNVALID_TASK,p); |
kern_raise(XINVALID_TASK,p); |
} |
|
|
733,7 → 713,7 |
static void CBS_FT_task_extract(LEVEL l, PID p) |
{ |
printk("CBS_FT_task_extract\n"); |
kern_raise(XUNVALID_TASK,p); |
kern_raise(XINVALID_TASK,p); |
} |
|
|
798,7 → 778,7 |
in a new release */ |
if (lev->P_or_B[p] == BACKUP) { |
kern_printf("\nKilling a BACKUP task!\n"); |
kern_raise(XUNVALID_TASK, p); |
kern_raise(XINVALID_TASK, p); |
return; |
} |
|
832,53 → 812,43 |
static void CBS_FT_task_sleep(LEVEL l, PID p) |
{ |
printk("CBS_FT_task_sleep\n"); |
kern_raise(XUNVALID_TASK,p); |
kern_raise(XINVALID_TASK,p); |
} |
|
|
static void CBS_FT_task_delay(LEVEL l, PID p, TIME usdelay) |
{ |
printk("CBS_FT_task_delay\n"); |
kern_raise(XUNVALID_TASK,p); |
} |
|
|
static int CBS_FT_guest_create(LEVEL l, PID p, TASK_MODEL *m) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); return 0; } |
{ kern_raise(XINVALID_GUEST,exec_shadow); return 0; } |
|
static void CBS_FT_guest_detach(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_dispatch(LEVEL l, PID p, int nostop) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_epilogue(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_activate(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_insert(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_extract(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_endcycle(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_end(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_sleep(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
{ kern_raise(XINVALID_GUEST,exec_shadow); } |
|
static void CBS_FT_guest_delay(LEVEL l, PID p,DWORD tickdelay) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
|
|
|
|
/* Registration functions */ |
|
/*+ Registration function: |
930,7 → 900,6 |
lev->l.task_endcycle = CBS_FT_task_endcycle; |
lev->l.task_end = CBS_FT_task_end; |
lev->l.task_sleep = CBS_FT_task_sleep; |
lev->l.task_delay = CBS_FT_task_delay; |
|
lev->l.guest_create = CBS_FT_guest_create; |
lev->l.guest_detach = CBS_FT_guest_detach; |
942,7 → 911,6 |
lev->l.guest_endcycle = CBS_FT_guest_endcycle; |
lev->l.guest_end = CBS_FT_guest_end; |
lev->l.guest_sleep = CBS_FT_guest_sleep; |
lev->l.guest_delay = CBS_FT_guest_delay; |
|
/* fill the CBS_FT descriptor part */ |
for (i=0; i<MAX_PROC; i++) { |