Rev 881 |
Rev 985 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
//fsf_hierarchical.h
//====================================================================
// FFFFFFIII RRRRR SSTTTTTTT
// FF IIR RR SS
// FF IR SS
// FFFFFF RRRR SSSSST
// FF FI RRR SS
// FF II RRR SS
// FF IIIIIR RS
//
// FSF(FIRST Scheduling Framework)
// hierarchical scheduling management
//===================================================================
#include <time.h>
#include "fsf_basic_types.h"
#include "fsf_core.h"
#ifndef _FSF_HIERARCHICAL_H_
#define _FSF_HIERARCHICAL_H_
#define FSF_HIERARCHICAL_MODULE_SUPPORTED 1
//// The definition of this types is in fsf_basic_types.h
//
//// Scheduling policies
//typedef enum {FSF_FP, FSF_EDF, FSF_TABLE_DRIVEN, FSF_NONE}
// fsf_sched_policy_t;
//
//// Scheduling policy and parameters
//typedef struct {
// fsf_sched_policy_t policy;
// void * params;
//} fsf_sched_params_t;
//// The params member is a pointer to one of the
//// following:
//// FP: int (priority)
//// EDF: struct timespec (deadline)
//// TABLE_DRIVEN : struct fsf_table_driven_params_t
//
//
////Scheduling parameters for the table-driven policy (t.b.d)
//typedef struct {
// // list of target windows (t.b.d.)
// // deadline (for the API): end of september
//} fsf_table_driven_params_t;
//
//
////Initialization information for a scheduling policy
//typedef void * fsf_sched_init_info_t;
//// It shall be one of the following:
//// FP: none
//// EDF: none
//// TABLE_DRIVEN : struct timespec (schedule duration)
//
//fsf_init_local_scheduler: This call has the following effects:
// FP: none
// EDF: none
// TABLE_DRIVEN :
// Records the schedule duration, and starts the
// schedule at the time of the call. After the
// schedule duration has elapsed, the schedule in
// the table is repeated.
/*
[ERR@RETURNED:
FSF_ERR_BAD_ARGUMENT : if the value of the server argument is not in range,
or info is NULL
FSF_ERR_NOT_SCHEDULED_CALLING_THREAD : if the calling thread is not
scheduled under the FSF
FSF_ERR_INVALID_SCHEDULER_REPLY : the scheduler is wrong or not running
FSF_ERR_NOT_CONTRACTED_SERVER : if the server of the calling thread
has been cancelled or it is not valid
]
*/
int fsf_init_local_scheduler(
fsf_server_id_t server,
fsf_sched_init_info_t info);
// Constants for assigning default values
#define FSF_DEFAULT_SCHED_POLICY FSF_NONE
/////////////////////////////////////////////////
// CONTRACT PARAMETERS
////////////////////////////////////////////////
//fsf_set_contract_scheduling_policy: The operation updates the
//specified contract parameters object by setting its scheduling
//policy to the specified input parameter. The default policy is
//FSF_NONE, which means that only one thread may be bound to the
//server
/*
[ERR@RETURNED:
FSF_ERR_BAD_ARGUMENT : if sched_policy is not in range,
or contract is NULL
]
*/
int
fsf_set_contract_scheduling_policy
(fsf_contract_parameters_t *contract,
fsf_sched_policy_t sched_policy);
//fsf_get_contract_scheduling_policy: This operation obtains from the
//specified contract parameters object its scheduling policy, and
//copies it to the place pointed to by the corresponding input
//parameter.
/*
[ERR@RETURNED:
FSF_ERR_BAD_ARGUMENT : if sched_policy or contract are NULL
]
*/
int
fsf_get_contract_scheduling_policy
(const fsf_contract_parameters_t *contract,
fsf_sched_policy_t *sched_policy);
//fsf_create_local_thread: : This operation creates a thread and binds
//it to the specified server, which must have a policy different than
//FSF_NONE. The new thread is created with the arguments thread, attr,
//thread_code and arg as they are defined for the pthread_create()
//POSIX function call, and its local scheduling parameters are set to
//the value stored in the variable pointed to by sched_params, which
//must be compatible with the server's scheduling policy. Then, the
//function binds the created thread to the new server. The attr
//parameter is overwritten as necessary to introduce the adequate
//scheduling policy and priority, according to the preemption level
//given in the contract and the fsf_priority_map() function defined by
//the user.
/*
[ERR@RETURNED:
FSF_ERR_BAD_ARGUMENT : if the value of the server argument is not in range,
or sched_params is NULL
FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE : if the scheduling policy
in sched_params is not compatible to the server's one.
FSF_ERR_INTERNAL_ERROR : erroneous binding or malfunction of the FSF
main scheduler
FSF_ERR_NOT_CONTRACTED_SERVER : if the referenced server is not valid
FSF_ERR_SERVER_WORKLOAD_NOT_COMPATIBLE: if the kind of workload
of the server is FSF_OVERHEAD
It may also return any of the errors that may be returned by the
pthread_create()POSIX function call
]
*/
int
fsf_create_local_thread
(fsf_server_id_t server,
fsf_sched_params_t *sched_params,
pthread_t *thread,
pthread_attr_t *attr,
fsf_thread_code_t thread_code,
void *arg);
//fsf_bind_local_thread_to_server: This operation associates a thread
//with a server, which must have a policy different than FSF_NONE. The
//thread's local scheduling parameters are set to the value stored in
//the variable pointed to by sched_params, which must be compatible
//with the server's scheduling policy. After the call the thread
//starts consuming the server's budget and is executed according to
//the contract established for that server and to its scheduling
//policy. If the thread was already bound to another server, it is
//effectively unbound from it and bound to the specified one.
//Implementation dependent issue: In order to allow the usage of
//application defined schedulers, the given thread must not have the
//scheduling policy SCHED_APP and at the same time be attached to an
//application scheduler different than the fsf scheduler.
/*
[ERR@RETURNED:
FSF_ERR_BAD_ARGUMENT : if the server argument does not complain with
the expected format or valid range, the given thread does not exist,
or sched_params is NULL
FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE : if the scheduling policy
in sched_params is not compatible to the server's one.
FSF_ERR_INTERNAL_ERROR : erroneous binding or malfunction of the FSF
main scheduler
FSF_ERR_UNKNOWN_APPSCHEDULED_THREAD : if the thread is attached to
an application defined scheduler different than the fsf scheduler
FSF_ERR_NOT_CONTRACTED_SERVER : if the referenced server is not valid
FSF_ERR_SERVER_WORKLOAD_NOT_COMPATIBLE: if the kind of workload
of the server is FSF_OVERHEAD
]
*/
int
fsf_bind_local_thread_to_server
(fsf_server_id_t server,
pthread_t thread,
fsf_sched_params_t *sched_params);
// fsf_set_local_thread_sched_parameters: this function changes the
// local scheduling parameters of the thread to the value pointed to
// by sched_params. This value must be compatible with the scheduling
// policy of the server to which the thread is bound.
/*
[ERR@RETURNED:
FSF_ERR_BAD_ARGUMENT : if the given thread does not exist,
or sched_params is NULL
FSF_ERR_SCHED_POLICY_NOT_COMPATIBLE : if the thread is already bound
and the scheduling policy in sched_params is not compatible to the
one of the thread's server.
FSF_ERR_NOT_SCHEDULED_THREAD : if the given thread is not scheduled
under the FSF
FSF_ERR_INTERNAL_ERROR : erroneous binding or malfunction of the FSF
main scheduler
FSF_ERR_UNKNOWN_APPSCHEDULED_THREAD : if the thread is attached to
an application defined scheduler different than the fsf scheduler
FSF_ERR_NOT_CONTRACTED_SERVER : if the thread is bound and its server
is not valid
]
*/
int
fsf_set_local_thread_sched_parameters
(pthread_t thread,
const fsf_sched_params_t *sched_params);
// fsf_get_local_thread_sched_parameters: this function stores the
// local scheduling parameters of the specified thread in the variable
// pointed to by sched_params
/*
[ERR@RETURNED:
FSF_ERR_BAD_ARGUMENT : if sched_params is NULL or the thread does
not exist
FSF_ERR_NOT_SCHEDULED_THREAD : if the given thread is not scheduled
under the FSF
]
*/
int
fsf_get_local_thread_sched_parameters
(pthread_t thread,
fsf_sched_params_t *sched_params);
#endif // _FSF_HIERARCHICAL_H_