Subversion Repositories shark

Rev

Blame | Last modification | View Log | RSS feed

/*
 * Project: S.Ha.R.K.
 *
 * Coordinators:
 *   Giorgio Buttazzo    <giorgio@sssup.it>
 *   Paolo Gai           <pj@gandalf.sssup.it>
 *
 * Authors     :
 *   Paolo Gai           <pj@gandalf.sssup.it>
 *   Massimiliano Giorgi <massy@gandalf.sssup.it>
 *   Luca Abeni          <luca@gandalf.sssup.it>
 *   (see the web pages for full authors list)
 *
 * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
 *
 * http://www.sssup.it
 * http://retis.sssup.it
 * http://shark.sssup.it
 */


/**
 ------------
 CVS :        $Id: edfact.h,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $

 File:        $File$
 Revision:    $Revision: 1.1.1.1 $
 Last update: $Date: 2002-09-02 09:37:41 $
 ------------

 This file contains the server EDFACT (EDF with pending activations)

 Title:
   EDFACT

 Task Models Accepted:
   HARD_TASK_MODEL - Hard Tasks (only Periodic)
     wcet field and mit field must be != 0. They are used to set the wcet
       and period of the tasks.
     periodicity field can be only PERIODIC
     drel field is ignored
   
 Guest Models Accepted:
   JOB_TASK_MODEL - a single guest task activation
     Identified by an absolute deadline and a period.
     period field is ignored

 Description:
   This module schedule his tasks following the classic EDF scheme.
   The task guarantee is based on the factor utilization approach.
   The tasks scheduled are only periodic.
   All the task are put in a queue and the scheduling is based on the
   deadline value.
   NO GUARANTEE is performed on guest tasks. The guarantee must be performed
   by the level that inserts guest tasks in the EDF level.
   If a task miss a deadline a counter is incremented.
   If a task exausts the wcet a counter is incremented
   No ZOMBIE support!!!!!!

 Exceptions raised:
   XUNVALID_GUEST XUNVALID_TASK
     some primitives are not implemented:
     task_sleep, task_delay, guest_endcycle, guest_sleep, guest_delay

   XACTIVATION
     If a task is actiated through task_activate or guest_activate more than
     one time
     
 Restrictions & special features:
   - This level doesn't manage the main task.
   - At init time we have to specify:
       . guarantee check
          (when all task are created the system will check that the task_set
          will not use more than the available bandwidth)
   - A function to return the used bandwidth of the level is provided.
   - Functions to return and reset the nact, wcet and dline miss counters

**/


/*
 * Copyright (C) 2001 Paolo Gai
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */



#ifndef __EDFACT_H__
#define __EDFACT_H__

#include <ll/ll.h>
#include <kernel/config.h>
#include <sys/types.h>
#include <kernel/types.h>
#include <modules/codes.h>








/*+ flags... +*/
#define EDFACT_ENABLE_GUARANTEE      1  /*+ Task Guarantee enabled +*/
#define EDFACT_ENABLE_ALL            1

#define EDFACT_FAILED_GUARANTEE      8  /*+ used in the module, unsettabl
                                         in EDF_register_level... +*/





#define ELASTIC_HARD_PCLASS 0x0600                             

#define EDFACT_LEVELNAME        "EDFACT base"
#define EDFACT_LEVEL_CODE       166
#define EDFACT_LEVEL_VERSION    1


/*+ Registration function:
    int flags     Options to be used in this level instance...
+*/

void EDFACT_register_level(int flags);

/*+ Returns the used bandwidth of a level +*/
bandwidth_t EDFACT_usedbandwidth(LEVEL l);

/*+ returns respectively the number of dline, wcet or nact; -1 if error +*/
int EDFACT_get_dline_miss(PID p);
int EDFACT_get_wcet_miss(PID p);
int EDFACT_get_nact(PID p);

/*+ resets respectively the number of dline, wcet miss; -1 if error +*/
int EDFACT_reset_dline_miss(PID p);
int EDFACT_reset_wcet_miss(PID p);

#endif