/** @defgroup m_datatypes_management_details Details on SIMIX datatypes
@ingroup m_datatypes_management*/
-typedef struct s_simdata_host *simdata_host_t;
+typedef struct s_smx_simdata_host *smx_simdata_host_t;
/** @brief Host datatype
@ingroup m_datatypes_management_details */
typedef struct s_smx_host {
char *name; /**< @brief host name if any */
- simdata_host_t simdata; /**< @brief simulator data */
+ smx_simdata_host_t simdata; /**< @brief simulator data */
void *data; /**< @brief user data */
} s_smx_host_t;
/** @brief Host datatype
/********************************** Action *************************************/
-typedef struct s_simdata_action *simdata_action_t;
+typedef struct s_smx_simdata_action *smx_simdata_action_t;
/** @brief Action datatype
@ingroup m_datatypes_management_details */
typedef struct s_smx_action {
char *name; /**< @brief action name if any */
- simdata_action_t simdata; /**< @brief simulator data */
+ smx_simdata_action_t simdata; /**< @brief simulator data */
+ xbt_fifo_t cond_list; /*< conditional variables that must be signaled when the action finish. */
+
void *data; /**< @brief user data */
} s_smx_action_t;
/* ****************************** Process *********************************** */
-typedef struct s_simdata_process *simdata_process_t;
+typedef struct s_smx_simdata_process *smx_simdata_process_t;
/** @brief Process datatype
@ingroup m_datatypes_management_details @{ */
typedef struct s_smx_process {
char *name; /**< @brief process name if any */
- simdata_process_t simdata; /**< @brief simulator data */
+ smx_simdata_process_t simdata; /**< @brief simulator data */
s_xbt_swag_hookup_t process_hookup;
s_xbt_swag_hookup_t synchro_hookup;
s_xbt_swag_hookup_t host_proc_hookup;
XBT_PUBLIC(void) SIMIX_action_set_priority(smx_action_t action, double priority);
XBT_PUBLIC(void) SIMIX_action_destroy(smx_action_t action);
XBT_PUBLIC(void) SIMIX_register_action_to_condition(smx_action_t action, smx_cond_t cond);
+XBT_PUBLIC(double) SIMIX_action_get_remains(smx_action_t action);
/*Not implemented yet */
XBT_PUBLIC(smx_action_t) SIMIX_action_parallel_execute(int workstation_nb,
/********************************** Host ************************************/
-typedef struct s_simdata_host {
+typedef struct s_smx_simdata_host {
void *host; /* SURF modeling */
xbt_swag_t process_list;
-} s_simdata_host_t;
+} s_smx_simdata_host_t;
/********************************* Simix Global ******************************/
/******************************* Process *************************************/
-typedef struct s_simdata_process {
+typedef struct s_smx_simdata_process {
smx_host_t host; /* the host on which the process is running */
xbt_context_t context; /* the context that executes the scheduler fonction */
int blocked;
smx_cond_t cond; /* cond on which the process is blocked */
int argc; /* arguments number if any */
char **argv; /* arguments table if any */
-} s_simdata_process_t;
+} s_smx_simdata_process_t;
typedef struct process_arg {
const char *name;
/********************************* Action **************************************/
-typedef struct s_simdata_action {
+typedef struct s_smx_simdata_action {
surf_action_t surf_action; /* SURF modeling of computation */
- xbt_fifo_t cond_list; /* conditional variables that must be signaled when the action finish. */
smx_host_t source;
-} s_simdata_action_t;
+} s_smx_simdata_action_t;
/* alloc structures */
smx_action_t act = xbt_new0(s_smx_action_t,1);
- act->simdata = xbt_new0(s_simdata_action_t,1);
- simdata_action_t simdata = act->simdata;
- simdata->cond_list = xbt_fifo_new();
+ act->simdata = xbt_new0(s_smx_simdata_action_t,1);
+ smx_simdata_action_t simdata = act->simdata;
+ act->cond_list = xbt_fifo_new();
/* initialize them */
act->name = xbt_strdup(name);
/* alloc structures */
smx_action_t act = xbt_new0(s_smx_action_t,1);
- act->simdata = xbt_new0(s_simdata_action_t,1);
- simdata_action_t simdata = act->simdata;
- simdata->cond_list = xbt_fifo_new();
+ act->simdata = xbt_new0(s_smx_simdata_action_t,1);
+ smx_simdata_action_t simdata = act->simdata;
+ act->cond_list = xbt_fifo_new();
/* initialize them */
simdata->source = host;
/* alloc structures */
smx_action_t act = xbt_new0(s_smx_action_t,1);
- act->simdata = xbt_new0(s_simdata_action_t,1);
- simdata_action_t simdata = act->simdata;
- simdata->cond_list = xbt_fifo_new();
+ act->simdata = xbt_new0(s_smx_simdata_action_t,1);
+ smx_simdata_action_t simdata = act->simdata;
+ act->cond_list = xbt_fifo_new();
/* initialize them */
simdata->source = host;
xbt_assert0((action != NULL), "Invalid parameter");
- xbt_assert1((xbt_fifo_size(action->simdata->cond_list)==0),
- "Conditional list not empty %d. There is a problem. Cannot destroy it now!", xbt_fifo_size(action->simdata->cond_list));
+ xbt_assert1((xbt_fifo_size(action->cond_list)==0),
+ "Conditional list not empty %d. There is a problem. Cannot destroy it now!", xbt_fifo_size(action->cond_list));
if(action->name) free(action->name);
- xbt_fifo_free(action->simdata->cond_list);
+ xbt_fifo_free(action->cond_list);
if(action->simdata->surf_action)
action->simdata->surf_action->resource_type->common_public->action_free(action->simdata->surf_action);
xbt_fifo_push(cond->actions,action);
}
+double SIMIX_action_get_remains(smx_action_t action)
+{
+ xbt_assert0((action != NULL), "Invalid parameter");
+ return action->simdata->surf_action->remains;
+}
/* List the process and their state */
INFO0("SIMIX: <process> on <host>: <status>.");
xbt_swag_foreach(process, simix_global->process_list) {
- simdata_process_t p_simdata = (simdata_process_t) process->simdata;
+ smx_simdata_process_t p_simdata = (smx_simdata_process_t) process->simdata;
// simdata_host_t h_simdata=(simdata_host_t)p_simdata->host->simdata;
char *who;
xbt_fifo_item_t _cursor;
DEBUG1("** %s failed **",smx_action->name);
- xbt_fifo_foreach(smx_action->simdata->cond_list,_cursor,cond,smx_cond_t) {
+ xbt_fifo_foreach(smx_action->cond_list,_cursor,cond,smx_cond_t) {
xbt_swag_foreach(process,cond->sleeping) {
DEBUG2("\t preparing to wake up %s on %s",
process->name, process->simdata->host->name);
}
SIMIX_cond_broadcast(cond);
/* remove conditional from action */
- xbt_fifo_remove(smx_action->simdata->cond_list,cond);
+ xbt_fifo_remove(smx_action->cond_list,cond);
}
}
xbt_fifo_item_t _cursor;
DEBUG1("** %s done **",smx_action->name);
- xbt_fifo_foreach(smx_action->simdata->cond_list,_cursor,cond,smx_cond_t) {
+ xbt_fifo_foreach(smx_action->cond_list,_cursor,cond,smx_cond_t) {
xbt_swag_foreach(process,cond->sleeping) {
DEBUG2("\t preparing to wake up %s on %s",
process->name, process->simdata->host->name);
}
SIMIX_cond_broadcast(cond);
/* remove conditional from action */
- xbt_fifo_remove(smx_action->simdata->cond_list,cond);
+ xbt_fifo_remove(smx_action->cond_list,cond);
}
}
}
void *workstation,
void *data)
{
- simdata_host_t simdata = xbt_new0(s_simdata_host_t,1);
+ smx_simdata_host_t simdata = xbt_new0(s_smx_simdata_host_t,1);
smx_host_t host = xbt_new0(s_smx_host_t,1);
s_smx_process_t proc;
*/
void __SIMIX_host_destroy(smx_host_t host)
{
- simdata_host_t simdata = NULL;
+ smx_simdata_host_t simdata = NULL;
xbt_assert0((host != NULL), "Invalid parameters");
smx_process_code_t code, void *data,
smx_host_t host, int argc, char **argv)
{
- simdata_process_t simdata = xbt_new0(s_simdata_process_t,1);
+ smx_simdata_process_t simdata = xbt_new0(s_smx_simdata_process_t,1);
smx_process_t process = xbt_new0(s_smx_process_t,1);
smx_process_t self = NULL;
void SIMIX_process_kill(smx_process_t process)
{
//int i;
- simdata_process_t p_simdata = process->simdata;
+ smx_simdata_process_t p_simdata = process->simdata;
//simdata_host_t h_simdata= p_simdata->host->simdata;
//int _cursor;
//smx_process_t proc = NULL;
*/
void SIMIX_process_suspend(smx_process_t process)
{
- simdata_process_t simdata = NULL;
+ smx_simdata_process_t simdata = NULL;
xbt_assert0(((process) && (process->simdata)), "Invalid parameters");
*/
void SIMIX_process_resume(smx_process_t process)
{
- simdata_process_t simdata = NULL;
+ smx_simdata_process_t simdata = NULL;
xbt_assert0(((process != NULL) && (process->simdata)), "Invalid parameters");
CHECK_HOST();
{
xbt_assert0( (action != NULL) && (cond != NULL), "Invalid parameters");
- xbt_fifo_push(action->simdata->cond_list,cond);
+ xbt_fifo_push(action->cond_list,cond);
}