set(EXTRA_DIST
include/xbt/win32_ucontext.h
+ src/bindings/java/MANIFEST.MF
src/include/instr/instr_interface.h
src/include/mc/datatypes.h
src/include/mc/mc.h
src/surf/trace_mgr.c
src/surf/workstation.c
src/surf/workstation_ptask_L07.c
+ src/surf/vm_workstation.c
src/xbt/xbt_sg_stubs.c
)
src/simix/smx_smurf.c
src/simix/smx_synchro.c
src/simix/smx_user.c
+ src/simix/smx_vm.c
)
set(SIMGRID_SRC
#* ****************************************************************************************** *#
set(SIMDAG_SRC
+ src/simdag/instr_sd_task.c
src/simdag/sd_daxloader.c
src/simdag/sd_global.c
src/simdag/sd_link.c
src/bindings/lua/simgrid_lua.h
)
+ set(JMSG_C_SRC
+ src/bindings/java/jmsg.c
+ src/bindings/java/jmsg.h
+ src/bindings/java/jmsg_comm.c
+ src/bindings/java/jmsg_comm.h
+ src/bindings/java/jmsg_file.c
+ src/bindings/java/jmsg_file.h
+ src/bindings/java/jmsg_host.c
+ src/bindings/java/jmsg_host.h
+ src/bindings/java/jmsg_process.c
+ src/bindings/java/jmsg_process.h
+ src/bindings/java/jmsg_rngstream.c
+ src/bindings/java/jmsg_rngstream.h
+ src/bindings/java/jmsg_synchro.c
+ src/bindings/java/jmsg_synchro.h
+ src/bindings/java/jmsg_task.c
+ src/bindings/java/jmsg_task.h
+ src/bindings/java/jmsg_vm.c
+ src/bindings/java/jmsg_vm.h
+ src/bindings/java/jxbt_utilities.c
+ src/bindings/java/jxbt_utilities.h
+ src/bindings/java/smx_context_cojava.c
+ src/bindings/java/smx_context_cojava.h
+ src/bindings/java/smx_context_java.c
+ src/bindings/java/smx_context_java.h
+ )
+
+ set(JMSG_JAVA_SRC
+ src/bindings/java/org/simgrid/msg/Comm.java
+ src/bindings/java/org/simgrid/msg/File.java
+ src/bindings/java/org/simgrid/msg/Host.java
+ src/bindings/java/org/simgrid/msg/HostFailureException.java
+ src/bindings/java/org/simgrid/msg/HostNotFoundException.java
+ src/bindings/java/org/simgrid/msg/JniException.java
+ src/bindings/java/org/simgrid/msg/Msg.java
+ src/bindings/java/org/simgrid/msg/MsgException.java
+ src/bindings/java/org/simgrid/msg/Mutex.java
+ src/bindings/java/org/simgrid/msg/NativeException.java
+ src/bindings/java/org/simgrid/msg/Process.java
+ src/bindings/java/org/simgrid/msg/ProcessKilledError.java
+ src/bindings/java/org/simgrid/msg/ProcessNotFoundException.java
+ src/bindings/java/org/simgrid/msg/RngStream.java
+ src/bindings/java/org/simgrid/msg/Task.java
+ src/bindings/java/org/simgrid/msg/TaskCancelledException.java
+ src/bindings/java/org/simgrid/msg/TimeoutException.java
+ src/bindings/java/org/simgrid/msg/TransferFailureException.java
+ src/bindings/java/org/simgrid/msg/VM.java
+ )
+
+ set(JTRACE_C_SRC
+ src/bindings/java/jtrace.c
+ src/bindings/java/jtrace.h
+ )
+
+ set(JTRACE_JAVA_SRC
+ src/bindings/java/org/simgrid/trace/Trace.java
+ )
+
+ if(HAVE_TRACING)
+ list(APPEND JMSG_C_SRC ${JTRACE_C_SRC})
+ else()
+ list(APPEND EXTRA_DIST ${JTRACE_C_SRC})
+ endif()
+
set(LUA_SRC
src/bindings/lua/lua_comm.c
src/bindings/lua/lua_host.c
)
set(EXAMPLES_CMAKEFILES_TXT
+ examples/java/bittorrent/CMakeLists.txt
examples/lua/CMakeLists.txt
examples/msg/CMakeLists.txt
examples/msg/actions/CMakeLists.txt
buildtools/Cmake/test_prog/prog_stackgrowth.c
buildtools/Cmake/test_prog/prog_stacksetup.c
buildtools/Cmake/test_prog/prog_thread_storage.c
- buildtools/Cmake/test_prog/prog_va_copy.c
buildtools/Cmake/test_prog/prog_vsnprintf.c
)
XBT_PUBLIC(void) simcall_host_execution_set_priority(smx_action_t execution, double priority);
XBT_PUBLIC(e_smx_state_t) simcall_host_execution_wait(smx_action_t execution);
+/******************************* VM simcalls ********************************/
+// Create the vm_workstation at the SURF level
+XBT_PUBLIC(void*) simcall_vm_ws_create(const char *name, smx_host_t host);
+XBT_PUBLIC(void*) simcall_get_vm_state(smx_host_t vm);
+XBT_PUBLIC(void) simcall_vm_start(smx_host_t vm);
+XBT_PUBLIC(void) simcall_vm_suspend(smx_host_t vm);
+XBT_PUBLIC(void) simcall_vm_destroy(smx_host_t vm);
/**************************** Process simcalls ********************************/
/* Constructor and Destructor */
int auto_restart);
XBT_PUBLIC(void) simcall_process_kill(smx_process_t process);
- XBT_PUBLIC(void) simcall_process_killall(void);
+ XBT_PUBLIC(void) simcall_process_killall(int reset_pid);
/* Process handling */
XBT_PUBLIC(void) simcall_process_cleanup(smx_process_t process);
XBT_PUBLIC(void) simcall_process_set_data(smx_process_t process, void *data);
XBT_PUBLIC(smx_host_t) simcall_process_get_host(smx_process_t process);
XBT_PUBLIC(const char *) simcall_process_get_name(smx_process_t process);
+ XBT_PUBLIC(int) simcall_process_get_PID(smx_process_t process);
+ XBT_PUBLIC(int) simcall_process_get_PPID(smx_process_t process);
XBT_PUBLIC(int) simcall_process_is_suspended(smx_process_t process);
XBT_PUBLIC(xbt_dict_t) simcall_process_get_properties(smx_process_t host);
XBT_PUBLIC(void) simcall_process_set_kill_time(smx_process_t process, double kill_time);
xbt_getpid = MSG_process_self_PID;
if (!msg_global) {
- s_msg_vm_t vm; // to compute the offset
+ // s_msg_vm_t vm; // to compute the offset
SIMIX_global_init(argc, argv);
#ifdef MSG_USE_DEPRECATED
msg_global->max_channel = 0;
#endif
- msg_global->PID = 1;
msg_global->sent_msg = 0;
msg_global->task_copy_callback = NULL;
msg_global->process_data_cleanup = NULL;
- msg_global->vms = xbt_swag_new(xbt_swag_offset(vm,all_vms_hookup));
+// msg_global->vms = xbt_swag_new(xbt_swag_offset(vm,all_vms_hookup));
/* initialization of the action module */
_MSG_action_init();
*/
int MSG_process_killall(int reset_PIDs)
{
- simcall_process_killall();
+ simcall_process_killall(reset_PIDs);
- if (reset_PIDs > 0) {
- msg_global->PID = reset_PIDs;
+ if (reset_PIDs > 0)
msg_global->session++;
- }
- return msg_global->PID;
+ return 0;
}
typedef struct simdata_process {
msg_host_t m_host; /* the host on which the process is running */
- int PID; /* used for debugging purposes */
- int PPID; /* The parent PID */
msg_host_t put_host; /* used for debugging purposes */
#ifdef MSG_USE_DEPRECATED
m_channel_t put_channel; /* used for debugging purposes */
int argc; /* arguments number if any */
msg_error_t last_errno; /* the last value returned by a MSG_function */
- msg_vm_t vm; /* virtual machine the process is in */
-
void* data; /* user data */
} s_simdata_process_t, *simdata_process_t;
#ifdef MSG_USE_DEPRECATED
int max_channel;
#endif
- int PID;
int session;
unsigned long int sent_msg; /* Total amount of messages sent during the simulation */
void (*task_copy_callback) (msg_task_t task, msg_process_t src, msg_process_t dst);
msg_global->process_data_cleanup(msg_proc->data);
}
- // remove the process from its virtual machine
- if (msg_proc->vm) {
- int pos = xbt_dynar_search(msg_proc->vm->processes,&smx_proc);
- xbt_dynar_remove_at(msg_proc->vm->processes,pos, NULL);
- }
-
// free the MSG process
xbt_free(msg_proc);
}
msg_process_t process;
/* Simulator data for MSG */
- simdata->PID = msg_global->PID++;
simdata->waiting_action = NULL;
simdata->waiting_task = NULL;
simdata->m_host = host;
simdata->data = data;
simdata->last_errno = MSG_OK;
- if (SIMIX_process_self()) {
- simdata->PPID = MSG_process_get_PID(MSG_process_self());
- } else {
- simdata->PPID = -1;
- }
-
- #ifdef HAVE_TRACING
- TRACE_msg_process_create(name, simdata->PID, simdata->m_host);
- #endif
/* Let's create the process: SIMIX may decide to start it right now,
* even before returning the flow control to us */
simcall_process_create(&process, name, code, simdata, sg_host_name(host), -1,
argc, argv, properties,0);
+ #ifdef HAVE_TRACING
+ TRACE_msg_process_create(name, simcall_process_get_PID(process), simdata->m_host);
+ #endif
+
if (!process) {
/* Undo everything we have just changed */
- msg_global->PID--;
xbt_free(simdata);
return NULL;
}
if (process == NULL) {
return 0;
}
-
- simdata_process_t simdata = simcall_process_get_data(process);
-
- return simdata != NULL ? simdata->PID : 0;
+ return simcall_process_get_PID(process);
}
/** \ingroup m_process_management
{
xbt_assert(process != NULL, "Invalid parameter");
- simdata_process_t simdata = simcall_process_get_data(process);
-
- return simdata->PPID;
+ return simcall_process_get_PPID(process);
}
/** \ingroup m_process_management
ACTION(SIMCALL_HOST_EXECUTION_GET_STATE, host_execution_get_state, WITH_ANSWER, TINT(result), TSPEC(execution, smx_action_t)) sep \
ACTION(SIMCALL_HOST_EXECUTION_SET_PRIORITY, host_execution_set_priority, WITH_ANSWER, TVOID(result), TSPEC(execution, smx_action_t), TDOUBLE(priority)) sep \
ACTION(SIMCALL_HOST_EXECUTION_WAIT, host_execution_wait, WITHOUT_ANSWER, TINT(result), TSPEC(execution, smx_action_t)) sep \
+ACTION(SIMCALL_VM_WS_CREATE, vm_ws_create, WITH_ANSWER, TPTR(result), TSTRING(name), TSPEC(phys_host, smx_host_t)) sep \
+ACTION(SIMCALL_VM_START, vm_start, WITHOUT_ANSWER, TVOID(result), TSPEC(ind_phys_host, smx_host_t)) sep \
+ACTION(SIMCALL_VM_SET_STATE, vm_set_state, WITHOUT_ANSWER, TVOID(result), TSPEC(ind_vm, smx_host_t), TINT(state)) sep \
+ACTION(SIMCALL_VM_GET_STATE, vm_get_state, WITH_ANSWER, TINT(result), TSPEC(ind_vm, smx_host_t)) sep \
+ACTION(SIMCALL_VM_DESTROY, vm_destroy, WITHOUT_ANSWER, TVOID(result), TSPEC(ind_vm, smx_host_t)) sep \
+ACTION(SIMCALL_VM_SUSPEND, vm_suspend, WITHOUT_ANSWER, TVOID(result), TSPEC(vm, smx_host_t)) sep \
+ACTION(SIMCALL_VM_SHUTDOWN, vm_shutdown, WITHOUT_ANSWER, TVOID(result), TSPEC(vm, smx_host_t)) sep \
ACTION(SIMCALL_PROCESS_CREATE, process_create, WITH_ANSWER, TVOID(result), TSPEC(process, smx_process_t*), TSTRING(name), TSPEC(code, xbt_main_func_t), TPTR(data), TSTRING(hostname), TDOUBLE(kill_time), TINT(argc), TSPEC(argv, char**), TSPEC(properties, xbt_dict_t), TINT(auto_restart)) sep \
ACTION(SIMCALL_PROCESS_KILL, process_kill, WITH_ANSWER, TVOID(result), TSPEC(process, smx_process_t)) sep \
- ACTION(SIMCALL_PROCESS_KILLALL, process_killall, WITH_ANSWER, TVOID(result)) sep \
+ ACTION(SIMCALL_PROCESS_KILLALL, process_killall, WITH_ANSWER, TVOID(result), TINT(reset_pid)) sep \
ACTION(SIMCALL_PROCESS_CLEANUP, process_cleanup, WITH_ANSWER, TVOID(result), TSPEC(process, smx_process_t)) sep \
ACTION(SIMCALL_PROCESS_CHANGE_HOST, process_change_host, WITH_ANSWER, TVOID(result), TSPEC(process, smx_process_t), TSPEC(dest, smx_host_t)) sep \
ACTION(SIMCALL_PROCESS_SUSPEND, process_suspend, WITHOUT_ANSWER, TVOID(result), TSPEC(process, smx_process_t)) sep \
ACTION(SIMCALL_PROCESS_RESUME, process_resume, WITH_ANSWER, TVOID(result), TSPEC(process, smx_process_t)) sep \
ACTION(SIMCALL_PROCESS_COUNT, process_count, WITH_ANSWER, TINT(result)) sep \
+ ACTION(SIMCALL_PROCESS_GET_PID, process_get_PID, WITH_ANSWER, TINT(result), TSPEC(process, smx_process_t)) sep \
+ ACTION(SIMCALL_PROCESS_GET_PPID, process_get_PPID, WITH_ANSWER, TINT(result), TSPEC(process, smx_process_t)) sep \
ACTION(SIMCALL_PROCESS_GET_DATA, process_get_data, WITH_ANSWER, TPTR(result), TSPEC(process, smx_process_t)) sep \
ACTION(SIMCALL_PROCESS_SET_DATA, process_set_data, WITH_ANSWER, TVOID(result), TSPEC(process, smx_process_t), TPTR(data)) sep \
ACTION(SIMCALL_PROCESS_GET_HOST, process_get_host, WITH_ANSWER, TSPEC(result, smx_host_t), TSPEC(process, smx_process_t)) sep \
return simcall_BODY_host_execution_wait(execution);
}
+
+/**
+ * \ingroup simix_vm_management
+ * \brief Returns a dict of the properties assigned to a host.
+ *
+ * \param host A host
+ * \return The properties of this host
+ */
+void* simcall_vm_ws_create(const char *name, smx_host_t phys_host){
+ return simcall_BODY_vm_ws_create(name, phys_host);
+}
+
+void simcall_vm_start(smx_host_t vm) {
+{
+ simcall_BODY_set_vm_state(vm, msg_vm_state_running);
+}
+
+void simcall_vm_suspend(smx_host_t vm)
+{
+ /* will jump to SIMIX_pre_vm_suspend */
+ simcall_BODY_vm_suspend(vm);
+}
+
+void simcall_vm_shutdown(smx_host_t vm)
+{
+ /* will jump to SIMIX_pre_vm_shutdown */
+ simcall_BODY_vm_shutdown(vm);
+}
+
+void simcall_vm_destroy(smx_host_t vm)
+{
+ /*
+ * simcall_BODY_ is defined in src/simix/smx_smurf_private.h.
+ * This function will jump to SIMIX_pre_vm_destroy.
+ **/
+ simcall_BODY_vm_destroy(vm);
+}
+
/**
* \ingroup simix_process_management
* \brief Creates and runs a new SIMIX process.
* \ingroup simix_process_management
* \brief Kills all SIMIX processes.
*/
- void simcall_process_killall(void)
+ void simcall_process_killall(int reset_pid)
{
- simcall_BODY_process_killall();
+ simcall_BODY_process_killall(reset_pid);
}
/**
return simcall_BODY_process_count();
}
+ /**
+ * \ingroup simix_process_management
+ * \brief Return the PID of a #smx_process_t.
+ * \param process a SIMIX process
+ * \return the PID of this process
+ */
+ int simcall_process_get_PID(smx_process_t process)
+ {
+ if (process == SIMIX_process_self()) {
+ /* avoid a simcall if this function is called by the process itself */
+ return SIMIX_process_get_PID(process);
+ }
+
+ return simcall_BODY_process_get_PID(process);
+ }
+
+ /**
+ * \ingroup simix_process_management
+ * \brief Return the parent PID of a #smx_process_t.
+ * \param process a SIMIX process
+ * \return the PID of this process parenrt
+ */
+ int simcall_process_get_PPID(smx_process_t process)
+ {
+ if (process == SIMIX_process_self()) {
+ /* avoid a simcall if this function is called by the process itself */
+ return SIMIX_process_get_PPID(process);
+ }
+
+ return simcall_BODY_process_get_PPID(process);
+ }
+
/**
* \ingroup simix_process_management
* \brief Return the user data of a #smx_process_t.