Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Initialize variables.
[simgrid.git] / src / surf / workstation_interface.hpp
1 #include "surf_interface.hpp"
2 #include "storage_interface.hpp"
3 #include "cpu_interface.hpp"
4 #include "network_interface.hpp"
5
6 #ifndef SURF_WORKSTATION_INTERFACE_HPP_
7 #define SURF_WORKSTATION_INTERFACE_HPP_
8
9 /***********
10  * Classes *
11  ***********/
12
13 class WorkstationModel;
14 typedef WorkstationModel *WorkstationModelPtr;
15
16 class Workstation;
17 typedef Workstation *WorkstationPtr;
18
19 class WorkstationLmm;
20 typedef WorkstationLmm *WorkstationLmmPtr;
21
22 class WorkstationAction;
23 typedef WorkstationAction *WorkstationActionPtr;
24
25 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);
39   WorkstationModel();
40   ~WorkstationModel();
41   virtual void adjustWeightOfDummyCpuActions();
42
43   virtual ActionPtr executeParallelTask(int workstation_nb,
44                                         void **workstation_list,
45                                         double *computation_amount,
46                                         double *communication_amount,
47                                         double rate)=0;
48  virtual xbt_dynar_t getRoute(WorkstationPtr src, WorkstationPtr dst)=0;
49  virtual ActionPtr communicate(WorkstationPtr src, WorkstationPtr dst, double size, double rate)=0;
50
51  CpuModelPtr p_cpuModel;
52 };
53
54 /************
55  * Resource *
56  ************/
57
58 class Workstation : virtual public Resource {
59 public:
60   Workstation(){};
61   Workstation(xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu);
62
63   xbt_dict_t getProperties();
64
65   virtual ActionPtr execute(double size)=0;
66   virtual ActionPtr sleep(double duration)=0;
67
68   virtual int getCore();
69   virtual double getSpeed(double load);
70   virtual double getAvailableSpeed();
71   virtual double getCurrentPowerPeak();
72   virtual double getPowerPeakAt(int pstate_index);
73   virtual int getNbPstates();
74   virtual void setPowerPeakAt(int pstate_index);
75   virtual double getConsumedEnergy();
76
77   virtual StoragePtr findStorageOnMountList(const char* storage);
78   virtual xbt_dict_t getStorageList();
79   virtual ActionPtr open(const char* mount, const char* path);
80   virtual ActionPtr close(surf_file_t fd);
81   virtual int unlink(surf_file_t fd);
82   virtual ActionPtr ls(const char* mount, const char *path);
83   virtual sg_size_t getSize(surf_file_t fd);
84   virtual ActionPtr read(surf_file_t fd, sg_size_t size);
85   virtual ActionPtr write(surf_file_t fd, sg_size_t size);
86   virtual xbt_dynar_t getInfo( surf_file_t fd);
87   virtual sg_size_t fileTell(surf_file_t fd);
88   virtual sg_size_t getFreeSize(const char* name);
89   virtual sg_size_t getUsedSize(const char* name);
90   virtual int fileSeek(surf_file_t fd, sg_size_t offset, int origin);
91
92   xbt_dynar_t p_storage;
93   RoutingEdgePtr p_netElm;
94   CpuPtr p_cpu;
95   NetworkLinkPtr p_network;
96
97   xbt_dynar_t getVms();
98
99   /* common with vm */
100   void getParams(ws_params_t params);
101   void setParams(ws_params_t params);
102   s_ws_params_t p_params;
103 };
104
105 class WorkstationLmm : virtual public Workstation, public ResourceLmm {
106 public:
107   WorkstationLmm() {};
108 };
109
110 /**********
111  * Action *
112  **********/
113 class WorkstationAction : virtual public Action {
114 public:
115   WorkstationAction() {};
116 };
117
118 class WorkstationActionLmm : public ActionLmm, public WorkstationAction {
119 public:
120   WorkstationActionLmm(): ActionLmm(), WorkstationAction() {};
121 };
122
123
124 #endif /* SURF_WORKSTATION_INTERFACE_HPP_ */