Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1246 → Rev 1247

/demos/trunk/loader/event_gen.h
File deleted
/demos/trunk/loader/newloader.c
File deleted
/demos/trunk/loader/nload.h
0,0 → 1,37
/* Generic Struct for loader task */
 
#include "lconst.h" //Constant definition for loader and linux parser
 
struct loader_task {
 
char name[20]; //Task name
int task_type; //Tast type (OS,CT,BT)
int contract; //Contract number
int local_scheduler; //Local scheduler for the task
int number; //How many copies of this task
int group; //Group number
struct timespec deadline; //Task deadline
struct timespec wcet; //Task wcet
int act_number; //Number of activations precalcolated
int act_current; //Actual activation number
 
struct timespec *act; //Activation list
struct timespec *exec; //Execution time list
 
};
 
struct loader_contract {
 
int number; //Contract number
struct timespec cmin;
struct timespec tmax;
struct timespec cmax;
struct timespec tmin;
int workload;
int local_scheduler;
int server; //Server number linked to this contract
 
};
 
/demos/trunk/loader/shark.h
2,7 → 2,7
#define SHARK_H
 
#include "kernel/kern.h"
#include "event_gen.h"
#include "nload.h"
 
int calibrate_cycle();
void start_simulation();
/demos/trunk/loader/makefile
7,12 → 7,12
endif
include $(BASE)/config/config.mk
 
PROGS = newloader
PROGS = nload
 
include $(BASE)/config/example.mk
 
newloader:
make -f $(SUBMAKE) APP=newloader INIT= OTHEROBJS="fsfinit.o initfile.o shark.o eventc.o" OTHERINCL= SHARKOPT="__OLDCHAR__ __FIRST__"
nload:
make -f $(SUBMAKE) APP=nload INIT= OTHEROBJS="fsfinit.o initfile.o shark.o eventc.o" OTHERINCL= SHARKOPT="__OLDCHAR__ __FIRST__"
gcc -o lread.o -c lread.c
gcc -o lparser.o -c lparser.c
gcc -o event_gen event_gen.c lparser.o lread.o
/demos/trunk/loader/nload.c
0,0 → 1,190
/* FSF Loader
*
* Load and run a specific set of tasks/contracts
*
* This is the system indipendent part
*
* Giacomo Guidi <giacomo@gandalf.sssup.it>
* Michael Timarchi <trimarchi@gandalf.sssup.it>
*
*/
 
#include <kernel/kern.h> //Shark dependent header, it's used only for TASK_OUTPUT debug
 
#include "fsf_contract.h" //Framework main header
#include "func.h" //Generic function definitions
 
/* Activate task output debug */
#define TASK_OUTPUT
 
int cal_cycles = 0; //Calibration const, it converts usec in cycles
struct timespec zero_time; //Zero time of the simulation
extern struct loader_task loader_task_list[]; //Loader task array
extern int total_loader_task; //Loader task number
 
/* OS: Oneshot Task:
begin
- execution
end
*/
void *oneshot_task(void *arg)
{
long long i,exec_cycles = 0;
struct loader_task *l = (struct loader_task *)(arg);
char tmp[20];
 
#ifdef TASK_OUTPUT
sprintf(tmp,"[ONESHOT]");
printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
#endif
 
exec_cycles = (long long)(TIMESPEC2USEC(&l->exec[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
for (i=0;i<exec_cycles;i++)
__asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
"cpuid\n\t"
:::"eax","ebx","ecx","edx");
return NULL;
}
 
/* CT: Cyclical Task:
begin
while (1) {
- execution
- end_cycle
}
end (never end)
*/
void *periodic_task(void *arg)
{
long long i,exec_cycles = 0;
int act = 0;
struct loader_task *l = (struct loader_task *)(arg);
char tmp[20];
 
while(1) {
 
#ifdef TASK_OUTPUT
sprintf(tmp,"C[%06d]",act);
printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
#endif
exec_cycles = (long long)(TIMESPEC2USEC(&l->exec[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
for (i=0;i<exec_cycles;i++)
__asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
"cpuid\n\t"
:::"eax","ebx","ecx","edx");
generic_task_endcycle();
act++;
}
return NULL;
}
 
/* BT: Background Task:
begin
while (1) {
- execution
}
end (never end)
*/
void *back_task(void *arg)
{
long long i,exec_cycles = 0;
int act = 0;
struct loader_task *l = (struct loader_task *)(arg);
char tmp[20];
 
while(1) {
 
#ifdef TASK_OUTPUT
sprintf(tmp,"B[%06d]",act);
printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
#endif
exec_cycles = (long long)(TIMESPEC2USEC(&l->exec[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
for (i=0;i<exec_cycles;i++)
__asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
"cpuid\n\t"
:::"eax","ebx","ecx","edx");
act++;
}
return NULL;
}
 
/* Task create */
/* this function create the task struct in memory */
void loader_task_create()
{
 
struct loader_task *current = loader_task_list;
int i=0, k=0;
 
while (k <total_loader_task) {
k++;
for (i=0; i < current->number; i++) {
pthread_t j;
int err = 0;
switch(current->task_type) {
case PAR_TASK_OS:
err = generic_create_thread(generic_get_server_from_contract(current->contract),&j,NULL,
oneshot_task,(void *)current,generic_get_task_model(current));
break;
case PAR_TASK_BT:
err = generic_create_thread(generic_get_server_from_contract(current->contract),&j,NULL,
back_task,(void *)current,generic_get_task_model(current));
break;
case PAR_TASK_CT:
err = generic_create_thread(generic_get_server_from_contract(current->contract),&j,NULL,
periodic_task,(void *)current,generic_get_task_model(current));
break;
}
if (err) {
printf("Error fsf task creating\n");
generic_end_simulation();
}
}
 
current = &loader_task_list[k];
 
}
printf("Created %d loader tasks\n",k);
 
}
 
/* Main Function */
int start_environment()
{
 
struct timespec total = {20,0};
generic_calibrate_cycle();
 
generic_fsfinit();
 
loader_task_create();
 
generic_start_simulation();
 
generic_set_simulation_time(&total);
 
return 0;
 
}