]> rtime.felk.cvut.cz Git - frescor/frsh-include.git/blob - frsh_memory_management.h
Update transaction API
[frescor/frsh-include.git] / frsh_memory_management.h
1 // -----------------------------------------------------------------------
2 //  Copyright (C) 2006 - 2009 FRESCOR consortium partners:
3 //
4 //    Universidad de Cantabria,              SPAIN
5 //    University of York,                    UK
6 //    Scuola Superiore Sant'Anna,            ITALY
7 //    Kaiserslautern University,             GERMANY
8 //    Univ. Politécnica  Valencia,           SPAIN
9 //    Czech Technical University in Prague,  CZECH REPUBLIC
10 //    ENEA                                   SWEDEN
11 //    Thales Communication S.A.              FRANCE
12 //    Visual Tools S.A.                      SPAIN
13 //    Rapita Systems Ltd                     UK
14 //    Evidence                               ITALY
15 //
16 //    See http://www.frescor.org for a link to partners' websites
17 //
18 //           FRESCOR project (FP6/2005/IST/5-034026) is funded
19 //        in part by the European Union Sixth Framework Programme
20 //        The European Union is not liable of any use that may be
21 //        made of this code.
22 //
23 //
24 //  based on previous work (FSF) done in the FIRST project
25 //
26 //   Copyright (C) 2005  Mälardalen University, SWEDEN
27 //                       Scuola Superiore S.Anna, ITALY
28 //                       Universidad de Cantabria, SPAIN
29 //                       University of York, UK
30 //
31 //   FSF API web pages: http://marte.unican.es/fsf/docs
32 //                      http://shark.sssup.it/contrib/first/docs/
33 //
34 //   This file is part of FRSH (FRescor ScHeduler)
35 //
36 //  FRSH is free software; you can redistribute it and/or modify it
37 //  under terms of the GNU General Public License as published by the
38 //  Free Software Foundation; either version 2, or (at your option) any
39 //  later version.  FRSH is distributed in the hope that it will be
40 //  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
41 //  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
42 //  General Public License for more details. You should have received a
43 //  copy of the GNU General Public License along with FRSH; see file
44 //  COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
45 //  Cambridge, MA 02139, USA.
46 //
47 //  As a special exception, including FRSH header files in a file,
48 //  instantiating FRSH generics or templates, or linking other files
49 //  with FRSH objects to produce an executable application, does not
50 //  by itself cause the resulting executable application to be covered
51 //  by the GNU General Public License. This exception does not
52 //  however invalidate any other reasons why the executable file might be
53 //  covered by the GNU Public License.
54 // -----------------------------------------------------------------------
55 //frsh_memory_management.h
56
57 //==============================================
58 //  ******** *******    ********  **      **
59 //  **///// /**////**  **//////  /**     /**
60 //  **      /**   /** /**        /**     /**
61 //  ******* /*******  /********* /**********
62 //  **////  /**///**  ////////** /**//////**
63 //  **      /**  //**        /** /**     /**
64 //  **      /**   //** ********  /**     /**
65 //  //       //     // ////////   //      // 
66 //
67 // FRSH(FRescor ScHeduler), pronounced "fresh"
68 //==============================================
69
70 #ifndef _FRSH_MEMORY_MANAGEMENT_H_
71 #define _FRSH_MEMORY_MANAGEMENT_H_
72
73 #include "frsh_core_types.h"
74
75
76 #define FRSH_MEMORY_MANAGEMENT_SUPPORTED 1
77
78 FRSH_CPP_BEGIN_DECLS
79
80 /**
81  * @file frsh_memory_management.h
82  **/
83
84 /**
85  * @defgroup memmanagement Memory Management
86  *
87  * This module provides the types and the functions to add memory
88  * management support to FRSH contracts.
89  *
90  * @{
91  *
92  **/
93
94 /**
95  * frsh_contract_set_min_memory()
96  *
97  * This function specifies in the contract the minimum
98  * memory needed by the application.
99  *
100  * @param[in] min_memory  Minimum needed memory in bytes.
101  * @param[in] max_memory  Maximum needed memory in bytes.
102  * @param  contract   Contract, in-out argument.
103  *
104  * @return 0 if no error \n
105  *     FRSH_ERR_BAD_ARGUMENT if min_memory <0
106  * 
107  **/
108 int frsh_contract_set_min_memory(size_t min_memory,
109                                   frsh_contract_t *contract);
110
111 /**
112  * frsh_contract_get_min_memory()
113  *
114  * This function gets the minimum memory parameter from the contract.
115  *
116  * @param[in] contract Contract object
117  * @param[out] min_memory  Placeholder for the minimum required
118  *                         memory.
119  *
120  * @return 0 if no error \n
121  *      FRSH_ERR_BAD_ARGUMENT if one of the pointers is NULL
122  **/
123 int frsh_contract_get_min_memory(const frsh_contract_t *contract,
124                                   size_t *min_memory);
125
126 // frsh_contract_set_max_memory() is new 
127 // frsh_contract_get_max_memory() is new
128
129 /**
130  * frsh_contract_set_max_memory()
131  *
132  * This function specifies in the contract the minimum
133  * memory needed by the application.
134  *
135  * @param[in] max_memory  Maximum needed memory in bytes.
136  * @param  contract   Contract, in-out argument.
137  *
138  *     FRSH_ERR_BAD_ARGUMENT if min_memory > max_memory
139  * 
140  **/
141 int frsh_contract_set_max_memory(size_t max_memory,
142                                   frsh_contract_t *contract);
143
144
145 /**
146  * frsh_contract_get_max_memory()
147  *
148  * This function gets the maximum memory parameter from the contract.
149  *
150  * @param[in] contract Contract object
151  * @param[out] max_memory  Placeholder for the maximum required
152  *                         memory.
153  *
154  * @return 0 if no error \n
155  *      FRSH_ERR_BAD_ARGUMENT if one of the pointers is NULL
156  **/
157 int frsh_contract_get_max_memory(const frsh_contract_t *contract,
158                                   size_t *max_memory);
159
160
161 /**
162  * frsh_vres_get_memory_info()
163  *
164  * This function gives us the runtime info of memory usage and
165  * reservation.
166  *
167  * @param[in] vres_id Identifier of vres
168  * @param[out] mem_allocated Memory currently allocated to the vres
169  * @param[out] mem_budget Total pool of memory reserved for the vres
170  *             (until next renegotiation).
171  *
172  * @return 0 if no error \n
173  *      FRSH_ERR_BAD_ARGUMENT if one of the pointers is NULL
174  **/ 
175 int frsh_vres_get_memory_info(frsh_vres_id_t vres_id,
176                               size_t *mem_allocated,
177                               size_t *mem_budget);
178
179
180 /**
181  * frsh_vres_memalloc()
182  *
183  * This function reserves some memory from the memory to this virtual
184  * resource. 
185  *
186  * @param[in] vres_id Identifier of vres.
187  * @param[in] Number of bytes
188  * @param[out] Valid pointer for the allocation
189  *
190  * @return 0 if no error \n
191  *      FRSH_ERR_BAD_ARGUMENT if the area pointer is NULL
192  *      FRSH_ERR_OUT_OF_BUDGET if no budget is available
193  **/
194 int frsh_vres_malloc(frsh_vres_id_t vres_id,
195                      size_t num_bytes,
196                      void **area);
197
198 /**
199  * frsh_vres_memfree()
200  *
201  * This function returns the previously allocated memory area for this
202  * virtual_resource to the main memory.
203  *
204  * @param[in] vres_id Identifier of vres.
205  * @param[in] area    Memory area to return
206  *
207  * @return 0 if no error \n
208  *      FRSH_ERR_BAD_ARGUMENT if the area pointer is NULL
209  **/
210 int frsh_vres_memfree(frsh_vres_id_t vres_id,
211                       void *area);
212
213
214
215
216 /*@}*/
217
218 FRSH_CPP_END_DECLS
219
220 #endif      /* !FRSH_MEMORY_MANAGEMENT_H_ */