Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix surf_usage
[simgrid.git] / src / surf / workstation.hpp
1 #include "surf.hpp"
2 #include "storage.hpp"
3 #include "cpu.hpp"
4 #include "network.hpp"
5
6 #ifndef WORKSTATION_HPP_
7 #define WORKSTATION_HPP_
8
9 /***********
10  * Classes *
11  ***********/
12
13 class WorkstationModel;
14 typedef WorkstationModel *WorkstationModelPtr;
15
16 class WorkstationCLM03;
17 typedef WorkstationCLM03 *WorkstationCLM03Ptr;
18
19 class WorkstationCLM03Lmm;
20 typedef WorkstationCLM03Lmm *WorkstationCLM03LmmPtr;
21
22 class WorkstationAction;
23 typedef WorkstationAction *WorkstationActionPtr;
24
25 /*FIXME:class WorkstationActionLmm;
26 typedef WorkstationActionLmm *WorkstationActionLmmPtr;*/
27
28 /*********
29  * Tools *
30  *********/
31 extern WorkstationModelPtr surf_workstation_model;
32
33 /*********
34  * Model *
35  *********/
36 class WorkstationModel : public Model {
37 public:
38   WorkstationModel(string name): Model(name) {};
39   WorkstationModel();
40   ~WorkstationModel();
41   void parseInit(sg_platf_host_cbarg_t host);
42   WorkstationCLM03Ptr createResource(string name);
43   double shareResources(double now);
44   void updateActionsState(double now, double delta);
45
46   ActionPtr executeParallelTask(int workstation_nb,
47                                         void **workstation_list,
48                                         double *computation_amount,
49                                         double *communication_amount,
50                                         double rate);
51  xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst);
52  ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate);
53 };
54
55 /************
56  * Resource *
57  ************/
58
59 class WorkstationCLM03 : virtual public Resource {
60 public:
61   WorkstationCLM03(WorkstationModelPtr model, const char* name, xbt_dict_t properties, xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu);
62
63   void updateState(tmgr_trace_event_t event_type, double value, double date);
64
65   ActionPtr execute(double size);
66   ActionPtr sleep(double duration);
67   e_surf_resource_state_t getState();
68
69   int getCore();
70   double getSpeed(double load);
71   double getAvailableSpeed();
72
73   xbt_dict_t getProperties();
74
75   StoragePtr findStorageOnMountList(const char* storage);
76   ActionPtr open(const char* mount, const char* path);
77   ActionPtr close(surf_file_t fd);
78   int unlink(surf_file_t fd);
79   ActionPtr ls(const char* mount, const char *path);
80   size_t getSize(surf_file_t fd);
81   ActionPtr read(void* ptr, size_t size, surf_file_t fd);
82   ActionPtr write(const void* ptr, size_t size, surf_file_t fd);
83   bool isUsed();
84   //bool isShared();
85   xbt_dynar_t p_storage;
86   RoutingEdgePtr p_netElm;
87   CpuPtr p_cpu;
88   NetworkCm02LinkPtr p_network;
89 };
90
91 class WorkstationCLM03Lmm : public WorkstationCLM03, public ResourceLmm {
92 public:
93   WorkstationCLM03Lmm(WorkstationModelPtr model, const char* name, xbt_dict_t props): WorkstationCLM03(model, name, props, NULL, NULL, NULL){};
94   e_surf_resource_state_t getState();
95 };
96
97 /**********
98  * Action *
99  **********/
100 class WorkstationAction : virtual public Action {
101 public:
102   WorkstationAction(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {};
103 };
104
105 class WorkstationActionLmm : public ActionLmm, public WorkstationAction {
106 public:
107   WorkstationActionLmm(ModelPtr model, double cost, bool failed): ActionLmm(model, cost, failed), WorkstationAction(model, cost, failed) {};
108 };
109
110
111 #endif /* WORKSTATION_HPP_ */