/shark/trunk/ports/first/first-contract.c |
---|
11,8 → 11,11 |
// S.Ha.R.K. Implementation |
//===================================================================== |
#include "fsf.h" |
#include "fsf_core.h" |
#include "fsf_server.h" |
#include "fsf_shared_objects.h" |
#include "fsf_hierarchical.h" |
#include "fsf_spare_capacity.h" |
#include <kernel/descr.h> |
#include <kernel/func.h> |
#include <pistar.h> |
154,10 → 157,10 |
{ |
if (!contract) return FSF_ERR_BAD_ARGUMENT; |
if ((d_equals_t==true && deadline != FSF_NULL_DEADLINE) || |
(d_equals_t==false && deadline == FSF_NULL_DEADLINE)) |
if ((d_equals_t==false && deadline != FSF_NULL_DEADLINE) || |
(d_equals_t==true && deadline == FSF_NULL_DEADLINE)) |
return FSF_ERR_BAD_ARGUMENT; |
if (deadline != FSF_NULL_DEADLINE && TIMESPEC_A_GT_B(deadline, &contract->period_max)) |
if (TIMESPEC_A_GT_B(deadline, &contract->period_max)) |
return FSF_ERR_BAD_ARGUMENT; |
contract->d_equals_t = d_equals_t; |
/shark/trunk/ports/first/server-task.c |
---|
34,7 → 34,7 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
* |
* CVS : $Id: server-task.c,v 1.13 2004-12-09 10:27:08 trimarchi Exp $ |
* CVS : $Id: server-task.c,v 1.12 2004-11-24 10:24:43 trimarchi Exp $ |
*/ |
#include "ll/i386/64bit.h" |
55,11 → 55,9 |
struct mess msg; |
fsf_renegotiation_status_t status; |
int wait_renegotiation=0; |
/* |
struct timespec next_act; |
struct timespec period; |
struct timespec act_time; |
*/ |
PORT rec,tra; |
rec = port_connect("CHANW",sizeof(struct mess),STREAM,READ); |
76,7 → 74,6 |
kern_printf("ADM"); |
#endif |
wait_renegotiation=0; |
//kern_printf("(REN %d)", msg.server); |
port_send(tra,&msg,BLOCK); |
//kern_gettime(&act_time); |
//fsf_get_budget_and_period(service_server,NULL,&period); |
120,46 → 117,8 |
continue; |
} |
break; |
case CHANGE_PARAMETER: |
{ |
fsf_contract_parameters_t new_contract; |
struct timespec period; |
struct timespec budget; |
int i=0; |
// this CASE change the quality and importance |
//fsf_initialize_contract(&new_contract); |
// find contract |
while(i<current_server) { |
if (server_list[i].server==msg.server) break; |
i++; |
} |
//kern_printf("(RCQI)"); |
NULL_TIMESPEC(&period); |
ADDUSEC2TIMESPEC(server_list[i].Tmax, &period); |
NULL_TIMESPEC(&budget); |
ADDUSEC2TIMESPEC(server_list[i].Cmin, &budget); |
fsf_set_contract_basic_parameters(&new_contract,&budget,&period,FSF_DEFAULT_WORKLOAD); |
NULL_TIMESPEC(&period); |
ADDUSEC2TIMESPEC(server_list[i].Tmin, &period); |
NULL_TIMESPEC(&budget); |
ADDUSEC2TIMESPEC(server_list[i].Cmax, &budget); |
fsf_set_contract_reclamation_parameters(&new_contract, &budget, &period, FSF_DEFAULT_GRANULARITY,NULL, |
msg.qi.quality,msg.qi.importance); |
if (server_list[i].d_equals_t == true) { |
NULL_TIMESPEC(&new_contract.deadline); |
new_contract.d_equals_t = true; |
} else { |
NULL_TIMESPEC(&period); |
ADDUSEC2TIMESPEC(server_list[i].deadline, &period); |
TIMESPEC_ASSIGN(&new_contract.deadline, &period); |
new_contract.d_equals_t = false; |
} |
if (renegotiate_contract(&new_contract, msg.server)==FSF_ERR_CONTRACT_REJECTED) |
msg.server=-1; |
} |
case CHANGE_PARAMETER: |
// this CASE change the quality and importance |
break; |
default : |
167,7 → 126,6 |
} |
// send response server is -1 if the operation fail |
//kern_printf("(msg server %d)", msg.server); |
port_send(tra,&msg,BLOCK); |
//kern_gettime(&act_time); |
//fsf_get_budget_and_period(service_server,NULL,&period); |
193,7 → 151,7 |
#ifdef FSF_DEBUG |
kern_printf("(1 - Q %ld T %ld)", server_list[i].actual_budget, server_list[i].actual_period); |
#endif |
if (server_list[i].d_equals_t == true) |
if (server_list[i].d_equals_t == false) |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, T, T); |
else |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, T, server_list[i].deadline); |
206,7 → 164,7 |
kern_printf("(2 - Q %ld T %ld)", server_list[i].actual_budget, server_list[i].actual_period); |
#endif |
if (server_list[i].d_equals_t == true) |
if (server_list[i].d_equals_t == false) |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, server_list[i].Tmin, server_list[i].Tmin); |
else |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, server_list[i].Tmin, server_list[i].deadline); |
/shark/trunk/ports/first/first-server.c |
---|
139,7 → 139,7 |
break; |
} |
if (contract->d_equals_t == true) { |
if (contract->d_equals_t == false) { |
*budget = SERVER_setbudget(fsf_server_level, |
TIMESPEC2USEC(&(contract->budget_min)), |
TIMESPEC2USEC(&(contract->period_max)), |
204,8 → 204,6 |
T=TIMESPEC2USEC(&contract->period_min); |
Q=TIMESPEC2USEC(&contract->budget_max); |
server_list[i].Cmax=Q; |
mul32div32to32(MAX_BANDWIDTH,Q,T,server_list[current_server].Umax); |
T=TIMESPEC2USEC(&contract->period_min); |
220,12 → 218,12 |
mul32div32to32(MAX_BANDWIDTH,Q,T,server_list[i].Umin); |
server_list[i].U=server_list[i].Umin; |
if (contract->d_equals_t == true) { |
if (contract->d_equals_t == false) { |
server_list[i].deadline = 0; |
server_list[i].d_equals_t = true; |
server_list[i].d_equals_t = false; |
} else { |
server_list[i].deadline = TIMESPEC2USEC(&contract->deadline);; |
server_list[i].d_equals_t = false; |
server_list[i].d_equals_t = true; |
} |
server_list[i].Qs = contract->quality; |
296,7 → 294,6 |
server_list[i].U=server_list[i+1].Umin; |
server_list[i].Umax=server_list[i+1].Umax; |
server_list[i].Cmin=server_list[i+1].Cmin; |
server_list[i].Cmax=server_list[i+1].Cmax; |
server_list[i].Tmin=server_list[i+1].Tmin; |
server_list[i].Tmax=server_list[i+1].Tmax; |
server_list[i].Qs=server_list[i+1].Qs; |
339,9 → 336,6 |
// send response server is -1 if the operation fail |
m.type=CHANGE_PARAMETER; |
m.server=server; |
m.qi.quality = new_quality; |
m.qi.importance = new_importance; |
//memmove(&m.contract,contract, sizeof(fsf_contract_parameters_t)); |
port_send(channel[1],&m,BLOCK); |
353,7 → 347,7 |
//*server=m.server; |
return 0; |
} |
905,7 → 899,7 |
kern_printf("(1 - Q %ld T %ld)", server_list[i].actual_budget, server_list[i].actual_period); |
#endif |
if (server_list[i].d_equals_t == true) |
if (server_list[i].d_equals_t == false) |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, T, T); |
else |
adjust_SERVER_budget(server_list[i].server,server_list[i].Cmin, T, server_list[i].deadline); |
918,7 → 912,7 |
kern_printf("(2 - Q %ld T %ld)", server_list[i].actual_budget, server_list[i].actual_period); |
#endif |
if (server_list[i].d_equals_t == true) |
if (server_list[i].d_equals_t == false) |
adjust_SERVER_budget(server_list[i].server,Q, server_list[i].Tmin, server_list[i].Tmin); |
else |
adjust_SERVER_budget(server_list[i].server,Q, server_list[i].Tmin, server_list[i].deadline); |
961,13 → 955,13 |
#ifdef FSF_DEBUG |
int temp; |
kern_printf("(RC)"); |
kern_printf("(Recalculate contract)"); |
#endif |
/* The current bandwidth is the min bandwidth */ |
current_bandwidth=SERVER_return_bandwidth(fsf_server_level); |
#ifdef FSF_DEBUG |
kern_printf("(SER%d)", current_server); |
kern_printf("(nserver %d)", current_server); |
#endif |
//kern_printf("(CS:%d)", current_server); |
do { |
984,7 → 978,7 |
} |
#ifdef FSF_DEBUG |
kern_printf("(TQ%d)", Qt); |
kern_printf("(Total Quality %d)", Qt); |
#endif |
isok=1; |
for (i=0; i<current_server; i++) { |
1003,7 → 997,7 |
#ifdef FSF_DEBUG |
mul32div32to32(server_list[i].U,100, MAX_BANDWIDTH, temp); |
kern_printf("(SER %d BW %d)", server_list[i].server, temp); |
kern_printf("(Server %d bw %d)", server_list[i].server, temp); |
#endif |
} |
} |
1018,19 → 1012,18 |
fsf_server_id_t server) |
{ |
struct mess msg; |
struct mess message; |
// send response server is -1 if the operation fail |
msg.type=RENEGOTIATE_CONTRACT; |
memmove(&msg.contract,new_contract, sizeof(fsf_contract_parameters_t)); |
msg.server = server; |
//kern_printf("(REN %d)", server); |
port_send(channel[1],&msg,BLOCK); |
message.type=RENEGOTIATE_CONTRACT; |
memmove(&message.contract,new_contract, sizeof(fsf_contract_parameters_t)); |
message.server = server; |
port_receive(channel[0], &msg, BLOCK); |
port_send(channel[1],&message,BLOCK); |
//kern_printf("(REN %d)", msg.server); |
if (msg.server==-1) return FSF_ERR_CONTRACT_REJECTED; |
port_receive(channel[0], &message, BLOCK); |
if (message.server==-1) return FSF_ERR_CONTRACT_REJECTED; |
return 0; |
} |
1042,18 → 1035,18 |
union sigval sig_value) |
{ |
struct mess msg; |
struct mess message; |
// send response server is -1 if the operation fail |
msg.type=REQUEST_RENEGOTIATE_CONTRACT; |
memmove(&msg.contract,new_contract, sizeof(fsf_contract_parameters_t)); |
msg.server = server; |
message.type=REQUEST_RENEGOTIATE_CONTRACT; |
memmove(&message.contract,new_contract, sizeof(fsf_contract_parameters_t)); |
message.server = server; |
port_send(channel[1],&msg,BLOCK); |
port_send(channel[1],&message,BLOCK); |
port_receive(channel[0], &msg, BLOCK); |
port_receive(channel[0], &message, BLOCK); |
if (msg.server==-1) return FSF_ERR_CONTRACT_REJECTED; |
if (message.server==-1) return FSF_ERR_CONTRACT_REJECTED; |
return 0; |
} |
/shark/trunk/ports/first/makefile |
---|
10,7 → 10,7 |
OBJS_PATH = $(BASE)/ports/first |
FIRST = first-contract.o first-server.o first-sync.o server-task.o \ |
FIRST = first-contract.o first-server.o first-sync.o server-task.o first-error.o \ |
./modules/grubstar.o ./modules/posixstar.o \ |
./modules/edfstar.o ./modules/cbsstar.o ./modules/rmstar.o \ |
./modules/nonestar.o ./modules/pistar.o |
/shark/trunk/ports/first/include/fsf_service_task.h |
---|
50,7 → 50,6 |
bandwidth_t U; // actual bandwidth |
bandwidth_t Umin; // min bandwidth |
bandwidth_t Umax; // max bandwidth |
TIME Cmax; |
TIME Cmin; |
TIME Tmin; |
TIME Tmax; |
/shark/trunk/ports/first/include/message.h |
---|
40,7 → 40,7 |
#ifndef __MESSAGE_H__ |
#define __MESSAGE_H__ |
typedef enum { |
typedef enum message_type { |
NO_TYPE=-1, |
NEGOTIATE_CONTRACT, |
RENEGOTIATE_CONTRACT, |
50,19 → 50,12 |
NUM_MESSAGE, |
} message_type; |
typedef struct qual_imp { |
int importance; |
int quality; |
} qual_imp; |
typedef struct mess { |
message_type type; |
fsf_contract_parameters_t contract; |
fsf_server_id_t server; |
union { |
fsf_contract_parameters_t contract; |
qual_imp qi; |
} |
} mess; |