/unsupported/trunk/crunch/load/step3.c |
---|
0,0 → 1,476 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: step3.c,v 1.1 2004-07-05 14:17:15 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:15 $ |
------------ |
**/ |
/* |
* Copyright (C) 2000 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 |
* |
*/ |
#include "kernel/kern.h" |
#include "string.h" |
#include "ll/i386/x-dos.h" |
#include "modules/rr.h" |
#include "modules/dummy.h" |
#include "modules/edf.h" |
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include "drivers/keyb.h" |
#include "ctype.h" |
#include "tune.h" |
int ending=0; |
// Patterns |
#define MAX_PATTERN 10000 |
int max_pattern = 0; |
TIME pattern_t[MAX_PATTERN]; |
TIME pattern_period[MAX_PATTERN]; |
TIME pattern_wcet[MAX_PATTERN]; |
TIME pattern_iter[MAX_PATTERN]; |
TIME pattern_value[MAX_PATTERN]; |
TIME pattern_penalty[MAX_PATTERN]; |
// Random load |
int max_random = 0; |
TIME random_t[MAX_PATTERN]; |
TIME random_reldline[MAX_PATTERN]; |
TIME random_wcet[MAX_PATTERN]; |
int random_value[MAX_PATTERN]; |
int random_penalty[MAX_PATTERN]; |
// Bad load |
int max_bad = 0; |
TIME bad_t[MAX_PATTERN]; |
TIME bad_reldline[MAX_PATTERN]; |
TIME bad_wcet[MAX_PATTERN]; |
int bad_value[MAX_PATTERN]; |
int bad_penalty[MAX_PATTERN]; |
#define WCET_SLACK 500 |
void tune_pattern(void) |
{ |
int i,w; |
for (i=0; i<max_pattern; i++) { |
place(0,15); |
cprintf("Tuning index %d/%d.\n",i,max_pattern); |
if (i>0 && pattern_wcet[i]==pattern_wcet[i-1]) |
pattern_iter[i] = pattern_iter[i-1]; |
else { |
w = (pattern_wcet[i]*80)/100-WCET_SLACK; |
// if (w>pattern_wcet[i]-WCET_SLACK) w=pattern_wcet[i]-WCET_SLACK; |
pattern_iter[i] = tune_CPU_speed(w); |
} |
} |
} |
// Shape modification |
#define DEFAULT_SHIFT 1000000 |
#define MAX_SHAPE 1000 |
bandwidth_t shape_B[MAX_SHAPE]; |
TIME shape_T[MAX_SHAPE]; |
int max_shape; |
// this function creates a set if tasks (1 or 2) that comes at random |
// time, with random values and random wcet. |
#define MAX_PERIOD 2998 |
void generate_random_load(void) |
{ |
int current_time = DEFAULT_SHIFT; |
while (current_time<shape_T[max_shape-1]*1000000) { |
random_t[max_random] = current_time; |
random_reldline[max_random] = rand()%MAX_PERIOD*1000+2; |
random_wcet[max_random] = rand()%(random_reldline[max_random]-1000)+1000; |
random_value[max_random] = rand()%101; |
random_penalty[max_random] = rand()%101; |
if (rand()%2) |
current_time += random_reldline[max_random] + 100000; |
max_random++; |
} |
} |
#define MAX_VALUE_REL_DLINE 3000000 |
#define SUBTASKS 10 |
#define SUBSUBTASKS 30 |
void generate_bad_load(void) |
{ |
int i,j,k; |
bandwidth_t freeB; |
TIME t,l; |
int subtasks, rdline; |
for (i=1; i < max_shape; i++) { |
//length of the period with the same max bandwidth |
l = (shape_T[i]-shape_T[i-1])* 1000000; |
freeB = MAX_BANDWIDTH - shape_B[i-1]; |
t = shape_T[i-1]*1000000 + DEFAULT_SHIFT; |
if (l/SUBTASKS > MAX_VALUE_REL_DLINE) { |
subtasks = l/MAX_VALUE_REL_DLINE; |
rdline = MAX_VALUE_REL_DLINE; |
} |
else { |
subtasks = SUBTASKS; |
rdline = l/SUBTASKS; |
} |
for (j=0; j<subtasks; j++) { |
// create the first "big" task |
bad_t[max_bad] = t; |
bad_reldline[max_bad] = rdline; |
bad_wcet[max_bad] = (int)(((double)freeB/(double)MAX_BANDWIDTH)*bad_reldline[max_bad]); |
bad_value[max_bad] = 80; |
bad_penalty[max_bad] = 90; |
max_bad++; |
// create the small subtasks!! |
for (k=0; k<SUBSUBTASKS; k++) { |
bad_t[max_bad] = t; |
bad_reldline[max_bad] = rdline/SUBSUBTASKS; |
bad_wcet[max_bad] = (int)(((double)freeB/(double)MAX_BANDWIDTH)*bad_reldline[max_bad]); |
bad_value[max_bad] = 100/SUBSUBTASKS; |
bad_penalty[max_bad] = 200/SUBSUBTASKS; |
max_bad++; |
t += rdline/SUBSUBTASKS; |
} |
} |
} |
} |
#define INSERT_RANDOM 1 |
#define INSERT_BAD 2 |
// This function merges the random load and the bad_load into the pattern! |
// This function subsumes that the two arrays are ordered by time. |
void generate_pattern(void) |
{ |
int random_i, bad_i; |
int todo = 0; |
random_i = 0; |
bad_i = 0; |
while (!(random_i == max_random && bad_i == max_bad)) { |
if (random_i < max_random) { |
// there are random available |
if (bad_i < max_bad) |
// random and bad available |
if (random_t[random_i] < bad_t[bad_i]) |
todo = INSERT_RANDOM; |
else |
todo = INSERT_BAD; |
else |
// only random |
todo = INSERT_RANDOM; |
} |
else |
// only bad available |
todo = INSERT_BAD; |
if (todo == INSERT_RANDOM) { |
pattern_t[max_pattern] = random_t[random_i]; |
pattern_period[max_pattern] = random_reldline[random_i]; |
pattern_wcet[max_pattern] = random_wcet[random_i]; |
pattern_value[max_pattern] = random_value[random_i]; |
pattern_penalty[max_pattern] = random_penalty[random_i]; |
max_pattern++; |
random_i++; |
} |
else { |
pattern_t[max_pattern] = bad_t[bad_i]; |
pattern_period[max_pattern] = bad_reldline[bad_i]; |
pattern_wcet[max_pattern] = bad_wcet[bad_i]; |
pattern_value[max_pattern] = bad_value[bad_i]; |
pattern_penalty[max_pattern] = bad_penalty[bad_i]; |
max_pattern++; |
bad_i++; |
} |
} |
} |
// Read/Write part |
#define FILEBUF_DIM 10000 |
/* This is the buffer used by read_myfile */ |
char myfilebuf[FILEBUF_DIM]; |
/* This is the number of bytes read by read_myfile */ |
int myfilebuf_length; |
/* the buffer b is scannedc to search for numbers |
at the first non-number the function stops */ |
int geti(char *b, int *pos, int maxpos) |
{ |
int res = 0; |
// skip first chars |
while (!isdigit(b[*pos])) { |
(*pos)++; |
if (*pos == maxpos) return -1; // Error!!! |
} |
// read the numbers |
do { |
res = (res * 10) + b[*pos] - '0'; |
(*pos)++; |
} while (isdigit(b[*pos])); |
return res; |
} |
void parse_shape(void) |
{ |
int curr_filepos = 0; |
int i = 0; |
// read the number of tasks into the data file |
max_shape = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
if (max_shape == -1) { |
cprintf("Error parsing shape.dat file...\n"); |
sys_end(); |
} |
for (i=0; i<max_shape; i++) { |
// read the seven datas |
shape_T[i] = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
shape_B[i] = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
// check the last one for an error |
if (shape_B[i] == -1) { |
cprintf("Error parsing shape %d...\n",i); |
sys_end(); |
} |
} |
} |
void read_shapes(void) |
{ |
char name[]="shape.dat"; |
/* DOS file descriptor */ |
DOS_FILE *f; |
/* Error code */ |
int err; |
/* open the DOS file for reading (you can specify only "r" or "w") */ |
f = DOS_fopen(name,"r"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening %s...\n", err, name); |
myfilebuf_length = 0; |
return; |
} |
/* read up to 1000 chars */ |
myfilebuf_length = DOS_fread(&myfilebuf,1,FILEBUF_DIM,f); |
/* check for errors */ |
err = DOS_error(); |
cprintf("Read %d bytes from %s...\n", myfilebuf_length, name); |
if (err) { |
cprintf("Error %d reading %s...\n", err, name); |
myfilebuf_length = 0; |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/* This function write myfile.out (up to 30 chars) */ |
void write_vpattern(void *arg) |
{ |
DOS_FILE *f; /* DOS file descriptor */ |
int err=0; /* Error code */ |
int writtenbytes = 0; /* number of files written */ |
char buf[100]; |
int i; |
/* open the DOS file for writing (you can specify only "r" or "w") */ |
f = DOS_fopen("vpattern.dat","w"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening hpattern.dat...\n", err); |
return; |
} |
sprintf(buf,"%d\r\n",max_pattern); |
writtenbytes += DOS_fwrite(buf,1,strlen(buf),f); |
for (i=0; i<max_pattern; i++) { |
sprintf(buf,"%ld %ld %ld %ld %ld %ld\r\n", |
pattern_t[i], |
pattern_period[i], |
pattern_wcet[i], |
pattern_iter[i], |
pattern_value[i], |
pattern_penalty[i]); |
writtenbytes += DOS_fwrite(buf,1,strlen(buf),f); |
/* check for errors */ |
err = DOS_error(); |
if (err) break; |
} |
cprintf("Written %d bytes into vpattern.dat...\n", writtenbytes); |
if (err) { |
cprintf("Error %d writing vpattern.dat...\n", err); |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
void read_myfile(void); |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
EDF_register_level(EDF_ENABLE_ALL); |
RR_register_level(RRTICK, RR_MAIN_NO, mb); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
SEM_register_module(); |
read_shapes(); |
return TICK; |
} |
NRT_TASK_MODEL keyb_model; |
TASK __init__(void *arg) |
{ |
KEYB_PARMS kparms = BASE_KEYB; |
HARTPORT_init(); |
nrt_task_default_model(keyb_model); |
nrt_task_def_system(keyb_model); |
nrt_task_def_nokill(keyb_model); |
keyb_def_task(kparms,(TASK_MODEL *)&keyb_model); |
KEYB_init(&kparms); |
set_exchandler_grx(); |
srand(sys_gettime(NULL)); |
clear(); |
sys_atrunlevel(write_vpattern, NULL, RUNLEVEL_AFTER_EXIT); |
parse_shape(); |
// random load... |
generate_random_load(); |
// a big task and a lot of small tasks that uses 2*(MAX_BANDWIDTH-shape) |
generate_bad_load(); |
// mixes the two loads |
generate_pattern(); |
tune_pattern(); |
return (void *)0; |
} |
// never called!!! |
int main() |
{ |
return 0; |
} |
/unsupported/trunk/crunch/load/step1b.c |
---|
0,0 → 1,34 |
/* |
Step 1b: Generation of the Shape of the hard periodic load |
--------------------------------------------------------- |
This is a variant for the step1. It simply produces a constant periodic |
load. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#define MAX_BANDWIDTH 0xFFFFFFFF |
int x; |
int x_total[1000], x_B[1000]; |
int main() |
{ |
unsigned length; |
unsigned i; |
scanf("%d",&length); |
srand(time(0)); |
printf("2\n"); |
i=(MAX_BANDWIDTH/100)*(rand()%90); |
printf("0 %u\n",i); |
printf("%u 0\n",length); |
fprintf(stderr,"Bandwidth=%f",((double)i)/MAX_BANDWIDTH); |
return 0; |
} |
/unsupported/trunk/crunch/load/step4.c |
---|
0,0 → 1,189 |
/* |
* step 3: generation of the configuration file for CRUNCH |
*/ |
#include <stdio.h> |
// Patterns |
#define MAX_PATTERN 10000 |
int max_hpattern = 0; |
int hpattern_t[MAX_PATTERN]; |
int hpattern_period[MAX_PATTERN]; |
int hpattern_wcet[MAX_PATTERN]; |
int hpattern_iter[MAX_PATTERN]; |
int hpattern_index=0; |
int max_vpattern = 0; |
int vpattern_t[MAX_PATTERN]; |
int vpattern_period[MAX_PATTERN]; |
int vpattern_wcet[MAX_PATTERN]; |
int vpattern_iter[MAX_PATTERN]; |
int vpattern_value[MAX_PATTERN]; |
int vpattern_penalty[MAX_PATTERN]; |
int vpattern_index=0; |
// Data structores needed for crunch |
#define MAX_CRUNCH 10000 |
int crunch_max = 0; |
int crunch_t[MAX_CRUNCH]; |
int crunch_type[MAX_CRUNCH]; |
int crunch_dline[MAX_CRUNCH]; |
int crunch_wcet[MAX_CRUNCH]; |
int crunch_iterations[MAX_CRUNCH]; |
int crunch_value[MAX_CRUNCH]; |
int crunch_penalty[MAX_CRUNCH]; |
void read_hpattern(char *); |
void read_vpattern(char *); |
void merge_dat(void); |
void write_dat(void); |
int main(int argc, char **argv) |
{ |
if (argc != 3) { |
fprintf(stderr,"Usage: step4 hpattern.dat vpattern.dat\n\n"); |
exit(0); |
} |
read_hpattern(argv[1]); |
read_vpattern(argv[2]); |
merge_dat(); |
write_dat(); |
return 0; |
} |
/* |
* |
* Reading/Writing patterns |
* |
*/ |
/* |
* This function read from a file written in the format of |
* hpattern.dat, and fills the internal pattern data structure. |
*/ |
void read_hpattern(char *name) |
{ |
int i; |
FILE *f; |
f = fopen(name,"r"); |
fscanf(f,"%d", &max_hpattern); |
for (i=0; i<max_hpattern; i++) { |
fscanf(f,"%d %d %d %d", &hpattern_t[i], &hpattern_period[i], |
&hpattern_wcet[i], &hpattern_iter[i]); |
// printf("Hard %d %d %d %d\n", hpattern_t[i], hpattern_period[i], |
// hpattern_wcet[i], hpattern_iter[i]); |
} |
} |
/* |
* This function read from a file written in the format of |
* vpattern.dat, and fills the internal pattern data structure. |
*/ |
void read_vpattern(char *name) |
{ |
int i; |
FILE *f; |
f = fopen(name,"r"); |
fscanf(f,"%d", &max_vpattern); |
for (i=0; i<max_vpattern; i++) { |
fscanf(f,"%d %d %d %d %d %d", |
&vpattern_t[i], &vpattern_period[i], |
&vpattern_wcet[i], &vpattern_iter[i], |
&vpattern_value[i], &vpattern_penalty[i]); |
// printf("Value %d %d %d %d %d %d\n", vpattern_t[i], vpattern_period[i], |
// vpattern_wcet[i], vpattern_iter[i], |
// vpattern_value[i], vpattern_penalty[i]); |
} |
} |
#define INSERT_V 1 |
#define INSERT_H 2 |
void merge_dat(void) |
{ |
int h_i, v_i; |
int todo = 0; |
h_i = 0; |
v_i = 0; |
while (!(h_i == max_hpattern && v_i == max_vpattern)) { |
if (h_i < max_hpattern) |
// there are h available |
if (v_i < max_vpattern) |
// random and bad available |
if (vpattern_t[v_i] < hpattern_t[h_i]) |
todo = INSERT_V; |
else |
todo = INSERT_H; |
else |
// only H |
todo = INSERT_H; |
else |
// only bad available |
todo = INSERT_V; |
if (todo == INSERT_V) { |
crunch_t[crunch_max] = vpattern_t[v_i]; |
crunch_type[crunch_max] = 1; |
crunch_dline[crunch_max] = vpattern_period[v_i]; |
crunch_wcet[crunch_max] = vpattern_wcet[v_i]; |
crunch_iterations[crunch_max] = vpattern_iter[v_i]; |
crunch_value[crunch_max] = vpattern_value[v_i]; |
crunch_penalty[crunch_max] = vpattern_penalty[v_i]; |
crunch_max++; |
v_i++; |
} |
else { |
crunch_t[crunch_max] = hpattern_t[h_i]; |
crunch_type[crunch_max] = 0; |
crunch_dline[crunch_max] = hpattern_period[h_i]; |
crunch_wcet[crunch_max] = hpattern_wcet[h_i]; |
crunch_iterations[crunch_max] = hpattern_iter[h_i]; |
crunch_value[crunch_max] = 0; |
crunch_penalty[crunch_max] = 0; |
crunch_max++; |
h_i++; |
} |
} |
} |
void write_dat(void) |
{ |
int i; |
printf("%d\n", crunch_max); |
for (i=0; i<crunch_max; i++) |
printf("%d %d %d %d %d %d %d\n", |
crunch_t[i], crunch_type[i], crunch_dline[i], crunch_wcet[i], |
crunch_iterations[i], crunch_value[i], crunch_penalty[i]); |
} |
/unsupported/trunk/crunch/load/step2b.c |
---|
0,0 → 1,456 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: step2b.c,v 1.1 2004-07-05 14:17:15 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:15 $ |
------------ |
**/ |
/* |
* Copyright (C) 2000 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 |
* |
*/ |
#include "kernel/kern.h" |
#include "string.h" |
#include "ll/i386/x-dos.h" |
#include "modules/rr.h" |
#include "modules/dummy.h" |
#include "modules/edf.h" |
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include "drivers/keyb.h" |
#include "ctype.h" |
#include "tune.h" |
int ending=0; |
// Patterns |
#define MAX_PATTERN 10000 |
int max_pattern = 0; |
TIME pattern_t[MAX_PATTERN]; |
TIME pattern_period[MAX_PATTERN]; |
TIME pattern_wcet[MAX_PATTERN]; |
TIME pattern_iter[MAX_PATTERN]; |
void record_pattern(TIME t, TIME period, TIME wcet) |
{ |
pattern_t[max_pattern] = t; |
pattern_period[max_pattern] = period; |
pattern_wcet[max_pattern] = wcet; |
max_pattern++; |
} |
#define WCET_SLACK 500 |
void tune_pattern(void) |
{ |
int i,w; |
for (i=0; i<max_pattern; i++) { |
w = (pattern_wcet[i]*80)/100-WCET_SLACK; |
// if (w>pattern_wcet[i]-WCET_SLACK) w=pattern_wcet[i]-WCET_SLACK; |
if (w<0) w=WCET_SLACK/2; |
pattern_iter[i] = tune_CPU_speed(w); |
} |
} |
// Shape modification |
#define DEFAULT_SHIFT 1000000 |
#define MAX_SHAPE 1000 |
bandwidth_t shape=0; // current shape threshold |
int current_shape = 0; |
bandwidth_t shape_B[MAX_SHAPE]; |
TIME shape_T[MAX_SHAPE]; |
int max_shape; |
void shape_event(void *arg) |
{ |
shape = shape_B[0]; |
} |
void end_event(void *arg) |
{ |
ending = 1; |
} |
void start_shape(void) |
{ |
struct timespec t; |
NULL_TIMESPEC(&t); |
kern_cli(); |
kern_event_post(&t,shape_event,NULL); |
ADDUSEC2TIMESPEC(DEFAULT_SHIFT,&t); |
kern_event_post(&t,end_event,NULL); |
kern_sti(); |
} |
// Hard task |
#define ASTER_LIM 80 |
void *hard_task(void *arg) |
{ |
int j, x, y; |
char s[2]; |
struct timespec t; |
int b; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC((DEFAULT_SHIFT*2)/3,&t); |
b = TIMESPEC_A_LT_B(&proc_table[exec_shadow].request_time,&t); |
do { |
x = 0; |
y = rand() % 6 + 3; |
s[0] = '*'; s[1] = 0; |
while (x < ASTER_LIM) { |
for (j=0; j<50; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
task_endcycle(); |
puts_xy(x,y,WHITE," "); |
x++; |
} |
} while (b && !ending); |
return (void *)0; |
} |
#define MAX_PERIOD 100 |
// Load creation |
void *create_load(void *arg) |
{ |
PID p; |
HARD_TASK_MODEL m; |
TIME period = 0; |
TIME wcet = 0; |
int x; // adaptive bandwidth... |
int counter=0; |
char buf[100]; |
hard_task_default_model(m); |
x = MAX_PERIOD/3; |
place(0,11); |
// waiting for the start time :-) |
while (sys_gettime(NULL)<DEFAULT_SHIFT/2); |
while (1) { |
sprintf(buf,"Shape: %5.3f Band: %5.3f period: %10ld wcet: %10ld Time: %d", |
(double)shape/(double)MAX_BANDWIDTH, |
(double)EDF_usedbandwidth(0)/(double)MAX_BANDWIDTH, |
period, wcet, sys_gettime(NULL)/1000000); |
puts_xy(0,10,WHITE,buf); |
period = (x+rand() % (MAX_PERIOD-x+1))*1000; |
wcet = rand()%1000 * (period/1500); |
if ((MAX_BANDWIDTH/period)*wcet > shape - EDF_usedbandwidth(0)) |
wcet = (shape - EDF_usedbandwidth(0))/period; |
if (wcet < period/40) wcet=period/40; |
if (wcet < 500) wcet=500; |
if (EDF_usedbandwidth(0) + (MAX_BANDWIDTH/period)*wcet < shape) { |
hard_task_def_mit(m, period); |
hard_task_def_wcet(m, wcet); |
p = task_create("hard_task",hard_task,&m,NULL); |
if (p == -1) { |
x += rand()%10-4; |
} |
else { |
record_pattern(sys_gettime(NULL),period,wcet); |
cprintf("%d ",++counter); |
task_activate(p); |
x *= 3; |
x /= 4; |
} |
if (x<MAX_PERIOD/3) x = MAX_PERIOD/3; |
if (x > MAX_PERIOD) x = MAX_PERIOD; |
} |
if (ending) return (void *)0; |
} |
} |
// Read/Write part |
#define FILEBUF_DIM 10000 |
/* This is the buffer used by read_myfile */ |
char myfilebuf[FILEBUF_DIM]; |
/* This is the number of bytes read by read_myfile */ |
int myfilebuf_length; |
/* the buffer b is scannedc to search for numbers |
at the first non-number the function stops */ |
int geti(char *b, int *pos, int maxpos) |
{ |
int res = 0; |
// skip first chars |
while (!isdigit(b[*pos])) { |
(*pos)++; |
if (*pos == maxpos) return -1; // Error!!! |
} |
// read the numbers |
do { |
res = (res * 10) + b[*pos] - '0'; |
(*pos)++; |
} while (isdigit(b[*pos])); |
return res; |
} |
void parse_shape(void) |
{ |
int curr_filepos = 0; |
int i = 0; |
// read the number of tasks into the data file |
max_shape = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
if (max_shape == -1) { |
cprintf("Error parsing shape.dat file...\n"); |
sys_end(); |
} |
for (i=0; i<max_shape; i++) { |
// read the seven datas |
shape_T[i] = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
shape_B[i] = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
// check the last one for an error |
if (shape_B[i] == -1) { |
cprintf("Error parsing shape %d...\n",i); |
sys_end(); |
} |
} |
} |
void read_shapes(void) |
{ |
char name[]="shape.dat"; |
/* DOS file descriptor */ |
DOS_FILE *f; |
/* Error code */ |
int err; |
/* open the DOS file for reading (you can specify only "r" or "w") */ |
f = DOS_fopen(name,"r"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening %s...\n", err, name); |
myfilebuf_length = 0; |
return; |
} |
/* read up to 1000 chars */ |
myfilebuf_length = DOS_fread(&myfilebuf,1,FILEBUF_DIM,f); |
/* check for errors */ |
err = DOS_error(); |
cprintf("Read %d bytes from %s...\n", myfilebuf_length, name); |
if (err) { |
cprintf("Error %d reading %s...\n", err, name); |
myfilebuf_length = 0; |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/* This function write myfile.out (up to 30 chars) */ |
void write_hpattern(void *arg) |
{ |
DOS_FILE *f; /* DOS file descriptor */ |
int err=0; /* Error code */ |
int writtenbytes = 0; /* number of files written */ |
char buf[100]; |
int i; |
/* open the DOS file for writing (you can specify only "r" or "w") */ |
f = DOS_fopen("hpattern.dat","w"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening hpattern.dat...\n", err); |
return; |
} |
sprintf(buf,"%d\r\n",max_pattern); |
writtenbytes += DOS_fwrite(buf,1,strlen(buf),f); |
for (i=0; i<max_pattern; i++) { |
sprintf(buf,"%ld %ld %ld %ld\r\n", pattern_t[i], pattern_period[i], |
pattern_wcet[i], pattern_iter[i]); |
writtenbytes += DOS_fwrite(buf,1,strlen(buf),f); |
/* check for errors */ |
err = DOS_error(); |
if (err) break; |
} |
cprintf("Written %d bytes into hpattern.dat...\n", writtenbytes); |
if (err) { |
cprintf("Error %d writing hpattern.dat...\n", err); |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
void read_myfile(void); |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
EDF_register_level(EDF_ENABLE_ALL); |
RR_register_level(RRTICK, RR_MAIN_NO, mb); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
SEM_register_module(); |
read_shapes(); |
return TICK; |
} |
NRT_TASK_MODEL keyb_model; |
TASK __init__(void *arg) |
{ |
NRT_TASK_MODEL nrt; |
KEYB_PARMS kparms = BASE_KEYB; |
HARTPORT_init(); |
nrt_task_default_model(keyb_model); |
nrt_task_def_system(keyb_model); |
nrt_task_def_nokill(keyb_model); |
keyb_def_task(kparms,(TASK_MODEL *)&keyb_model); |
KEYB_init(&kparms); |
set_exchandler_grx(); |
nrt_task_default_model(nrt); |
srand(sys_gettime(NULL)); |
clear(); |
sys_atrunlevel(write_hpattern, NULL, RUNLEVEL_AFTER_EXIT); |
parse_shape(); |
start_shape(); |
task_activate(task_create("create_load",create_load,&nrt,NULL)); |
cputs("\nWaiting the end of the periodic tasks...\n"); |
while (task_counter != 1); |
// the task create_load preempt __init__ until all is finished! |
tune_pattern(); |
return (void *)0; |
} |
// never called!!! |
int main() |
{ |
return 0; |
} |
/unsupported/trunk/crunch/load/baby.bat |
---|
0,0 → 1,6 |
echo %1 > length.dat |
make |
make runstep1b |
x step2b |
x step3 |
make runstep4 |
/unsupported/trunk/crunch/load/120_1/shape.dat |
---|
0,0 → 1,9 |
8 |
0 3350074416 |
18 3178275728 |
23 0 |
48 3049426712 |
57 1202590816 |
73 1932735240 |
101 987842456 |
120 0 |
/unsupported/trunk/crunch/load/120_1/length.dat |
---|
0,0 → 1,0 |
120 |
/unsupported/trunk/crunch/load/120_1/crunch.dat |
---|
0,0 → 1,1004 |
1003 |
1000000 1 3600000 792000 837402 80 90 |
1000000 1 180000 39600 41185 5 10 |
1000000 1 948002 482431 509820 73 73 |
1000000 1 1005002 667004 705086 61 21 |
1000081 0 43000 24668 25390 0 0 |
1000252 0 90000 9846 9692 0 0 |
1000415 0 88000 4730 4290 0 0 |
1000578 0 69000 1978 1378 0 0 |
1180000 1 180000 39600 41182 5 10 |
1360000 1 180000 39600 41182 5 10 |
1540000 1 180000 39600 41182 5 10 |
1720000 1 180000 39600 41182 5 10 |
1900000 1 180000 39600 41182 5 10 |
2080000 1 180000 39600 41182 5 10 |
2105002 1 424002 113189 119082 85 64 |
2260000 1 180000 39600 41183 5 10 |
2440000 1 180000 39600 41183 5 10 |
2620000 1 180000 39600 41183 5 10 |
2629004 1 2690002 1271063 1344382 17 41 |
2800000 1 180000 39600 41195 5 10 |
2980000 1 180000 39600 41195 5 10 |
3160000 1 180000 39600 41195 5 10 |
3340000 1 180000 39600 41195 5 10 |
3520000 1 180000 39600 41195 5 10 |
3700000 1 180000 39600 41195 5 10 |
3880000 1 180000 39600 41195 5 10 |
4060000 1 180000 39600 41195 5 10 |
4240000 1 180000 39600 41195 5 10 |
4420000 1 180000 39600 41195 5 10 |
4483146 0 56000 30821 31902 0 0 |
4483299 0 95000 2375 1799 0 0 |
4600000 1 3600000 792000 837447 80 90 |
4600000 1 180000 39600 41180 5 10 |
4780000 1 180000 39600 41180 5 10 |
4960000 1 180000 39600 41180 5 10 |
5140000 1 180000 39600 41180 5 10 |
5320000 1 180000 39600 41180 5 10 |
5419006 1 2084002 157190 165589 94 29 |
5500000 1 180000 39600 41181 5 10 |
5680000 1 180000 39600 41181 5 10 |
5860000 1 180000 39600 41181 5 10 |
6040000 1 180000 39600 41181 5 10 |
6220000 1 180000 39600 41181 5 10 |
6400000 1 180000 39600 41181 5 10 |
6580000 1 180000 39600 41181 5 10 |
6589722 0 73000 2440 1867 0 0 |
6760000 1 180000 39600 41181 5 10 |
6940000 1 180000 39600 41181 5 10 |
7120000 1 180000 39600 41181 5 10 |
7300000 1 180000 39600 41181 5 10 |
7480000 1 180000 39600 41181 5 10 |
7603008 1 2663002 2506134 2651322 24 42 |
7660000 1 180000 39600 41183 5 10 |
7840000 1 180000 39600 41183 5 10 |
8020000 1 180000 39600 41183 5 10 |
8128465 0 79000 3360 2840 0 0 |
8200000 1 3600000 792000 837400 80 90 |
8200000 1 180000 39600 41177 5 10 |
8290324 0 99000 5582 5190 0 0 |
8290508 0 95000 3268 2742 0 0 |
8290649 0 82000 2050 1455 0 0 |
8380000 1 180000 39600 41177 5 10 |
8560000 1 180000 39600 41177 5 10 |
8740000 1 180000 39600 41177 5 10 |
8920000 1 180000 39600 41177 5 10 |
9019208 0 44000 17226 17509 0 0 |
9019362 0 67000 11010 10934 0 0 |
9100000 1 180000 39600 41177 5 10 |
9280000 1 180000 39600 41177 5 10 |
9460000 1 180000 39600 41177 5 10 |
9640000 1 180000 39600 41177 5 10 |
9820000 1 180000 39600 41177 5 10 |
10000000 1 180000 39600 41177 5 10 |
10180000 1 180000 39600 41177 5 10 |
10360000 1 180000 39600 41177 5 10 |
10366010 1 1902002 1718177 1817503 36 33 |
10540000 1 180000 39600 41182 5 10 |
10720000 1 180000 39600 41182 5 10 |
10900000 1 180000 39600 41182 5 10 |
11080000 1 180000 39600 41182 5 10 |
11260000 1 180000 39600 41182 5 10 |
11440000 1 180000 39600 41182 5 10 |
11620000 1 180000 39600 41182 5 10 |
11800000 1 3600000 792000 837396 80 90 |
11800000 1 180000 39600 41183 5 10 |
11980000 1 180000 39600 41183 5 10 |
12160000 1 180000 39600 41183 5 10 |
12178420 0 71000 1962 1361 0 0 |
12340000 1 180000 39600 41183 5 10 |
12368012 1 2920002 1675238 1772061 10 5 |
12368012 1 2569002 2400619 2539657 51 88 |
12502801 0 71000 1775 1163 0 0 |
12520000 1 180000 39600 41183 5 10 |
12583376 0 87000 22852 23462 0 0 |
12583532 0 85000 7178 6879 0 0 |
12583737 0 86000 2150 1560 0 0 |
12583941 0 67000 2090 1497 0 0 |
12700000 1 180000 39600 41183 5 10 |
12880000 1 180000 39600 41183 5 10 |
13060000 1 180000 39600 41183 5 10 |
13240000 1 180000 39600 41183 5 10 |
13420000 1 180000 39600 41183 5 10 |
13600000 1 180000 39600 41183 5 10 |
13780000 1 180000 39600 41183 5 10 |
13960000 1 180000 39600 41183 5 10 |
14140000 1 180000 39600 41183 5 10 |
14320000 1 180000 39600 41183 5 10 |
14446422 0 71000 10026 9895 0 0 |
14500000 1 180000 39600 41183 5 10 |
14527606 0 68000 4236 3766 0 0 |
14680000 1 180000 39600 41183 5 10 |
14860000 1 180000 39600 41183 5 10 |
14932727 0 88000 2200 1614 0 0 |
15037014 1 480002 45079 46999 43 49 |
15037014 1 857002 734926 776975 26 80 |
15040000 1 180000 39600 41198 5 10 |
15220000 1 180000 39600 41198 5 10 |
15400000 1 3600000 792000 837401 80 90 |
15400000 1 180000 39600 41197 5 10 |
15580000 1 180000 39600 41197 5 10 |
15760000 1 180000 39600 41197 5 10 |
15940000 1 180000 39600 41197 5 10 |
15985597 0 88000 2200 1613 0 0 |
15994016 1 1629002 830859 878529 98 10 |
15994016 1 2582002 350306 370027 27 13 |
15994016 1 2190002 13750 13833 59 86 |
16120000 1 180000 39600 41182 5 10 |
16300000 1 180000 39600 41182 5 10 |
16309389 0 78000 3885 3396 0 0 |
16480000 1 180000 39600 41182 5 10 |
16660000 1 180000 39600 41182 5 10 |
16840000 1 180000 39600 41182 5 10 |
17020000 1 180000 39600 41182 5 10 |
17200000 1 180000 39600 41182 5 10 |
17380000 1 180000 39600 41182 5 10 |
17560000 1 180000 39600 41182 5 10 |
17740000 1 180000 39600 41182 5 10 |
17920000 1 180000 39600 41182 5 10 |
17929489 0 72000 2886 2338 0 0 |
18011034 0 76000 1900 1296 0 0 |
18100000 1 180000 39600 41182 5 10 |
18253873 0 83000 2075 1481 0 0 |
18280000 1 180000 39600 41182 5 10 |
18284018 1 1352002 323167 341261 72 41 |
18460000 1 180000 39600 41192 5 10 |
18640000 1 180000 39600 41192 5 10 |
18820000 1 180000 39600 41192 5 10 |
19000000 1 1000000 260000 274465 80 90 |
19000000 1 50000 13000 13044 5 10 |
19050000 1 50000 13000 13044 5 10 |
19100000 1 50000 13000 13044 5 10 |
19150000 1 50000 13000 13044 5 10 |
19200000 1 50000 13000 13044 5 10 |
19250000 1 50000 13000 13044 5 10 |
19300000 1 50000 13000 13044 5 10 |
19350000 1 50000 13000 13044 5 10 |
19400000 1 50000 13000 13044 5 10 |
19450000 1 50000 13000 13044 5 10 |
19468581 0 100000 2531 1962 0 0 |
19468751 0 100000 2500 1931 0 0 |
19500000 1 50000 13000 13044 5 10 |
19549816 0 76000 1900 1296 0 0 |
19550000 1 50000 13000 13044 5 10 |
19600000 1 50000 13000 13044 5 10 |
19630450 0 90000 4680 4237 0 0 |
19630616 0 87000 10826 10738 0 0 |
19630857 0 72000 5658 5272 0 0 |
19650000 1 50000 13000 13044 5 10 |
19700000 1 50000 13000 13044 5 10 |
19736020 1 1031002 556354 588001 46 94 |
19750000 1 50000 13000 13040 5 10 |
19800000 1 50000 13000 13040 5 10 |
19850000 1 50000 13000 13040 5 10 |
19900000 1 50000 13000 13040 5 10 |
19950000 1 50000 13000 13040 5 10 |
20000000 1 1000000 260000 274439 80 90 |
20000000 1 50000 13000 13045 5 10 |
20035654 0 76000 4440 3983 0 0 |
20050000 1 50000 13000 13045 5 10 |
20100000 1 50000 13000 13045 5 10 |
20150000 1 50000 13000 13045 5 10 |
20197501 0 91000 4920 4490 0 0 |
20197668 0 100000 4608 4159 0 0 |
20197835 0 69000 3810 3316 0 0 |
20200000 1 50000 13000 13045 5 10 |
20250000 1 50000 13000 13045 5 10 |
20300000 1 50000 13000 13045 5 10 |
20350000 1 50000 13000 13045 5 10 |
20400000 1 50000 13000 13045 5 10 |
20450000 1 50000 13000 13045 5 10 |
20500000 1 50000 13000 13045 5 10 |
20550000 1 50000 13000 13045 5 10 |
20600000 1 50000 13000 13045 5 10 |
20650000 1 50000 13000 13045 5 10 |
20700000 1 50000 13000 13045 5 10 |
20750000 1 50000 13000 13045 5 10 |
20800000 1 50000 13000 13045 5 10 |
20850000 1 50000 13000 13045 5 10 |
20867022 1 2040002 1743982 1844825 6 60 |
20900000 1 50000 13000 13040 5 10 |
20950000 1 50000 13000 13040 5 10 |
21000000 1 1000000 260000 274448 80 90 |
21000000 1 50000 13000 13039 5 10 |
21050000 1 50000 13000 13039 5 10 |
21100000 1 50000 13000 13039 5 10 |
21150000 1 50000 13000 13039 5 10 |
21200000 1 50000 13000 13039 5 10 |
21250000 1 50000 13000 13039 5 10 |
21300000 1 50000 13000 13039 5 10 |
21350000 1 50000 13000 13039 5 10 |
21400000 1 50000 13000 13039 5 10 |
21450000 1 50000 13000 13039 5 10 |
21500000 1 50000 13000 13039 5 10 |
21550000 1 50000 13000 13039 5 10 |
21600000 1 50000 13000 13039 5 10 |
21650000 1 50000 13000 13039 5 10 |
21700000 1 50000 13000 13039 5 10 |
21750000 1 50000 13000 13039 5 10 |
21800000 1 50000 13000 13039 5 10 |
21850000 1 50000 13000 13039 5 10 |
21900000 1 50000 13000 13039 5 10 |
21950000 1 50000 13000 13039 5 10 |
22000000 1 1000000 260000 274457 80 90 |
22000000 1 50000 13000 13040 5 10 |
22050000 1 50000 13000 13040 5 10 |
22060859 0 80000 2000 1401 0 0 |
22100000 1 50000 13000 13040 5 10 |
22150000 1 50000 13000 13040 5 10 |
22200000 1 50000 13000 13040 5 10 |
22250000 1 50000 13000 13040 5 10 |
22300000 1 50000 13000 13040 5 10 |
22350000 1 50000 13000 13040 5 10 |
22400000 1 50000 13000 13040 5 10 |
22450000 1 50000 13000 13040 5 10 |
22500000 1 50000 13000 13040 5 10 |
22550000 1 50000 13000 13040 5 10 |
22600000 1 50000 13000 13040 5 10 |
22627458 0 89000 2693 2135 0 0 |
22627625 0 61000 1525 899 0 0 |
22650000 1 50000 13000 13040 5 10 |
22700000 1 50000 13000 13040 5 10 |
22750000 1 50000 13000 13040 5 10 |
22800000 1 50000 13000 13040 5 10 |
22850000 1 50000 13000 13040 5 10 |
22900000 1 50000 13000 13040 5 10 |
22950000 1 50000 13000 13040 5 10 |
23000000 1 1000000 260000 274422 80 90 |
23000000 1 50000 13000 13044 5 10 |
23007024 1 1133002 142298 149839 9 7 |
23007024 1 2695002 1986655 2101611 80 90 |
23050000 1 50000 13000 13039 5 10 |
23100000 1 50000 13000 13039 5 10 |
23113818 0 92000 2300 1719 0 0 |
23150000 1 50000 13000 13039 5 10 |
23200000 1 50000 13000 13039 5 10 |
23250000 1 50000 13000 13039 5 10 |
23300000 1 50000 13000 13039 5 10 |
23350000 1 50000 13000 13039 5 10 |
23400000 1 50000 13000 13039 5 10 |
23450000 1 50000 13000 13039 5 10 |
23500000 1 50000 13000 13039 5 10 |
23550000 1 50000 13000 13039 5 10 |
23600000 1 50000 13000 13039 5 10 |
23650000 1 50000 13000 13039 5 10 |
23700000 1 50000 13000 13039 5 10 |
23750000 1 50000 13000 13039 5 10 |
23761532 0 67000 1675 1058 0 0 |
23800000 1 50000 13000 13039 5 10 |
23850000 1 50000 13000 13039 5 10 |
23900000 1 50000 13000 13039 5 10 |
23950000 1 50000 13000 13039 5 10 |
24000000 1 5000000 5000000 5290375 80 90 |
24000000 1 250000 250000 263870 5 10 |
24250000 1 250000 250000 263870 5 10 |
24500000 1 250000 250000 263870 5 10 |
24750000 1 250000 250000 263870 5 10 |
25000000 1 250000 250000 263870 5 10 |
25250000 1 250000 250000 263870 5 10 |
25500000 1 250000 250000 263870 5 10 |
25750000 1 250000 250000 263870 5 10 |
25802026 1 924002 184480 194489 12 93 |
25802026 1 2922002 1647630 1742829 22 27 |
25802026 1 700002 388710 410581 55 10 |
25802026 1 1494002 1108734 1172599 89 98 |
26000000 1 250000 250000 263860 5 10 |
26250000 1 250000 250000 263860 5 10 |
26500000 1 250000 250000 263860 5 10 |
26750000 1 250000 250000 263860 5 10 |
27000000 1 250000 250000 263860 5 10 |
27250000 1 250000 250000 263860 5 10 |
27396028 1 1904002 741039 783489 68 19 |
27500000 1 250000 250000 263833 5 10 |
27750000 1 250000 250000 263833 5 10 |
28000000 1 250000 250000 263833 5 10 |
28250000 1 250000 250000 263833 5 10 |
28500000 1 250000 250000 263833 5 10 |
28750000 1 250000 250000 263833 5 10 |
29000000 1 5000000 5000000 5290414 80 90 |
29000000 1 250000 250000 263787 5 10 |
29250000 1 250000 250000 263787 5 10 |
29400030 1 2202002 1966810 2080616 55 79 |
29500000 1 250000 250000 263787 5 10 |
29750000 1 250000 250000 263787 5 10 |
30000000 1 250000 250000 263787 5 10 |
30250000 1 250000 250000 263787 5 10 |
30500000 1 250000 250000 263787 5 10 |
30750000 1 250000 250000 263787 5 10 |
31000000 1 250000 250000 263787 5 10 |
31250000 1 250000 250000 263787 5 10 |
31500000 1 250000 250000 263787 5 10 |
31702032 1 2763002 1822616 1928016 17 40 |
31750000 1 250000 250000 263835 5 10 |
32000000 1 250000 250000 263835 5 10 |
32250000 1 250000 250000 263835 5 10 |
32500000 1 250000 250000 263835 5 10 |
32750000 1 250000 250000 263835 5 10 |
33000000 1 250000 250000 263835 5 10 |
33250000 1 250000 250000 263835 5 10 |
33500000 1 250000 250000 263835 5 10 |
33750000 1 250000 250000 263835 5 10 |
34000000 1 5000000 5000000 5290416 80 90 |
34000000 1 250000 250000 263865 5 10 |
34250000 1 250000 250000 263865 5 10 |
34500000 1 250000 250000 263865 5 10 |
34565034 1 102002 48188 50269 33 46 |
34565034 1 2031002 1109806 1173704 98 60 |
34750000 1 250000 250000 263874 5 10 |
35000000 1 250000 250000 263874 5 10 |
35250000 1 250000 250000 263874 5 10 |
35500000 1 250000 250000 263874 5 10 |
35750000 1 250000 250000 263874 5 10 |
36000000 1 250000 250000 263874 5 10 |
36250000 1 250000 250000 263874 5 10 |
36500000 1 250000 250000 263874 5 10 |
36696036 1 1613002 1175317 1243026 55 42 |
36750000 1 250000 250000 263874 5 10 |
37000000 1 250000 250000 263874 5 10 |
37250000 1 250000 250000 263874 5 10 |
37500000 1 250000 250000 263874 5 10 |
37750000 1 250000 250000 263874 5 10 |
38000000 1 250000 250000 263874 5 10 |
38250000 1 250000 250000 263874 5 10 |
38409038 1 44002 19554 19973 88 66 |
38500000 1 250000 250000 263860 5 10 |
38553040 1 2042002 1261616 1334391 55 56 |
38750000 1 250000 250000 263839 5 10 |
39000000 1 5000000 5000000 5290365 80 90 |
39000000 1 250000 250000 263794 5 10 |
39250000 1 250000 250000 263794 5 10 |
39500000 1 250000 250000 263794 5 10 |
39750000 1 250000 250000 263794 5 10 |
40000000 1 250000 250000 263794 5 10 |
40250000 1 250000 250000 263794 5 10 |
40500000 1 250000 250000 263794 5 10 |
40695042 1 2321002 1709360 1808167 96 26 |
40750000 1 250000 250000 263884 5 10 |
41000000 1 250000 250000 263884 5 10 |
41250000 1 250000 250000 263884 5 10 |
41500000 1 250000 250000 263884 5 10 |
41750000 1 250000 250000 263884 5 10 |
42000000 1 250000 250000 263884 5 10 |
42250000 1 250000 250000 263884 5 10 |
42500000 1 250000 250000 263884 5 10 |
42750000 1 250000 250000 263884 5 10 |
43000000 1 250000 250000 263884 5 10 |
43116044 1 1508002 328958 347400 100 7 |
43116044 1 2053002 165947 174853 53 58 |
43250000 1 250000 250000 263790 5 10 |
43500000 1 250000 250000 263790 5 10 |
43750000 1 250000 250000 263790 5 10 |
44000000 1 5000000 5000000 5290418 80 90 |
44000000 1 250000 250000 263808 5 10 |
44250000 1 250000 250000 263808 5 10 |
44500000 1 250000 250000 263808 5 10 |
44750000 1 250000 250000 263808 5 10 |
45000000 1 250000 250000 263808 5 10 |
45250000 1 250000 250000 263808 5 10 |
45269046 1 217002 173624 182999 26 19 |
45500000 1 250000 250000 263833 5 10 |
45586048 1 2506002 1214577 1284576 30 21 |
45586048 1 279002 62021 64904 88 1 |
45750000 1 250000 250000 263891 5 10 |
45965050 1 587002 531557 561798 13 24 |
45965050 1 1808002 930618 984045 34 28 |
46000000 1 250000 250000 263790 5 10 |
46250000 1 250000 250000 263790 5 10 |
46500000 1 250000 250000 263790 5 10 |
46750000 1 250000 250000 263790 5 10 |
47000000 1 250000 250000 263790 5 10 |
47250000 1 250000 250000 263790 5 10 |
47500000 1 250000 250000 263790 5 10 |
47750000 1 250000 250000 263790 5 10 |
47873052 1 1739002 311765 329190 82 63 |
48000000 1 250000 250000 263808 5 10 |
48250000 1 250000 250000 263808 5 10 |
48500000 1 250000 250000 263808 5 10 |
48750000 1 250000 250000 263808 5 10 |
49000000 1 1800000 522000 551654 80 90 |
49000000 1 90000 26100 26907 5 10 |
49000040 0 96000 49280 51422 0 0 |
49000208 0 75000 14750 14896 0 0 |
49090000 1 90000 26100 26907 5 10 |
49180000 1 90000 26100 26907 5 10 |
49270000 1 90000 26100 26907 5 10 |
49360000 1 90000 26100 26907 5 10 |
49450000 1 90000 26100 26907 5 10 |
49540000 1 90000 26100 26907 5 10 |
49630000 1 90000 26100 26907 5 10 |
49712054 1 1826002 1038627 1098393 4 17 |
49712054 1 6002 3398 2881 58 90 |
49712054 1 2705002 86154 90468 13 43 |
49720000 1 90000 26100 26899 5 10 |
49810000 1 90000 26100 26899 5 10 |
49900000 1 90000 26100 26899 5 10 |
49990000 1 90000 26100 26899 5 10 |
50080000 1 90000 26100 26899 5 10 |
50170000 1 90000 26100 26899 5 10 |
50260000 1 90000 26100 26899 5 10 |
50350000 1 90000 26100 26899 5 10 |
50440000 1 90000 26100 26899 5 10 |
50530000 1 90000 26100 26899 5 10 |
50620000 1 90000 26100 26899 5 10 |
50710000 1 90000 26100 26899 5 10 |
50800000 1 1800000 522000 551668 80 90 |
50800000 1 90000 26100 26907 5 10 |
50890000 1 90000 26100 26907 5 10 |
50980000 1 90000 26100 26907 5 10 |
51070000 1 90000 26100 26907 5 10 |
51160000 1 90000 26100 26907 5 10 |
51250000 1 90000 26100 26907 5 10 |
51340000 1 90000 26100 26907 5 10 |
51430000 1 90000 26100 26907 5 10 |
51520000 1 90000 26100 26907 5 10 |
51610000 1 90000 26100 26907 5 10 |
51700000 1 90000 26100 26907 5 10 |
51790000 1 90000 26100 26907 5 10 |
51880000 1 90000 26100 26907 5 10 |
51970000 1 90000 26100 26907 5 10 |
52060000 1 90000 26100 26907 5 10 |
52150000 1 90000 26100 26907 5 10 |
52240000 1 90000 26100 26907 5 10 |
52330000 1 90000 26100 26907 5 10 |
52420000 1 90000 26100 26907 5 10 |
52510000 1 90000 26100 26907 5 10 |
52517056 1 1748002 1410488 1491893 20 18 |
52600000 1 1800000 522000 551647 80 90 |
52600000 1 90000 26100 26901 5 10 |
52690000 1 90000 26100 26901 5 10 |
52780000 1 90000 26100 26901 5 10 |
52870000 1 90000 26100 26901 5 10 |
52960000 1 90000 26100 26901 5 10 |
53050000 1 90000 26100 26901 5 10 |
53140000 1 90000 26100 26901 5 10 |
53230000 1 90000 26100 26901 5 10 |
53320000 1 90000 26100 26901 5 10 |
53410000 1 90000 26100 26901 5 10 |
53500000 1 90000 26100 26901 5 10 |
53590000 1 90000 26100 26901 5 10 |
53680000 1 90000 26100 26901 5 10 |
53770000 1 90000 26100 26901 5 10 |
53860000 1 90000 26100 26901 5 10 |
53950000 1 90000 26100 26901 5 10 |
54040000 1 90000 26100 26901 5 10 |
54130000 1 90000 26100 26901 5 10 |
54220000 1 90000 26100 26901 5 10 |
54310000 1 90000 26100 26901 5 10 |
54365058 1 150002 103582 108873 65 28 |
54365058 1 2224002 360929 381223 65 26 |
54400000 1 1800000 522000 551690 80 90 |
54400000 1 90000 26100 26898 5 10 |
54490000 1 90000 26100 26898 5 10 |
54580000 1 90000 26100 26898 5 10 |
54670000 1 90000 26100 26898 5 10 |
54760000 1 90000 26100 26898 5 10 |
54850000 1 90000 26100 26898 5 10 |
54940000 1 90000 26100 26898 5 10 |
55030000 1 90000 26100 26898 5 10 |
55075318 0 99000 8532 8312 0 0 |
55075483 0 70000 6779 6459 0 0 |
55120000 1 90000 26100 26898 5 10 |
55210000 1 90000 26100 26898 5 10 |
55300000 1 90000 26100 26898 5 10 |
55390000 1 90000 26100 26898 5 10 |
55480000 1 90000 26100 26898 5 10 |
55570000 1 90000 26100 26898 5 10 |
55660000 1 90000 26100 26898 5 10 |
55750000 1 90000 26100 26898 5 10 |
55840000 1 90000 26100 26898 5 10 |
55930000 1 90000 26100 26898 5 10 |
56020000 1 90000 26100 26898 5 10 |
56110000 1 90000 26100 26898 5 10 |
56200000 1 1800000 522000 551656 80 90 |
56200000 1 90000 26100 26909 5 10 |
56290000 1 90000 26100 26909 5 10 |
56380000 1 90000 26100 26909 5 10 |
56470000 1 90000 26100 26909 5 10 |
56560000 1 90000 26100 26909 5 10 |
56650000 1 90000 26100 26909 5 10 |
56689060 1 1158002 1083915 1146315 18 71 |
56740000 1 90000 26100 26899 5 10 |
56776117 0 99000 39534 41127 0 0 |
56776287 0 47000 4216 3745 0 0 |
56776453 0 90000 2250 1666 0 0 |
56830000 1 90000 26100 26899 5 10 |
56920000 1 90000 26100 26899 5 10 |
57010000 1 90000 26100 26899 5 10 |
57100000 1 90000 26100 26899 5 10 |
57190000 1 90000 26100 26899 5 10 |
57280000 1 90000 26100 26899 5 10 |
57370000 1 90000 26100 26899 5 10 |
57460000 1 90000 26100 26899 5 10 |
57550000 1 90000 26100 26899 5 10 |
57640000 1 90000 26100 26899 5 10 |
57730000 1 90000 26100 26899 5 10 |
57820000 1 90000 26100 26899 5 10 |
57910000 1 90000 26100 26899 5 10 |
57947062 1 856002 462631 488882 51 81 |
58000000 1 3200000 2304000 2437427 80 90 |
58000000 1 160000 115200 121166 5 10 |
58160000 1 160000 115200 121166 5 10 |
58320000 1 160000 115200 121166 5 10 |
58480000 1 160000 115200 121166 5 10 |
58640000 1 160000 115200 121166 5 10 |
58800000 1 160000 115200 121166 5 10 |
58903064 1 855002 663196 701079 32 81 |
58960000 1 160000 115200 121203 5 10 |
59120000 1 160000 115200 121203 5 10 |
59280000 1 160000 115200 121203 5 10 |
59440000 1 160000 115200 121203 5 10 |
59600000 1 160000 115200 121203 5 10 |
59760000 1 160000 115200 121203 5 10 |
59858066 1 2848002 1930317 2041981 61 33 |
59858066 1 2867002 1697032 1795106 63 60 |
59858066 1 1168002 437978 462780 2 35 |
59858066 1 2067002 1079046 1141152 22 7 |
59858066 1 1476002 1039252 1099044 42 35 |
59920000 1 160000 115200 121161 5 10 |
60080000 1 160000 115200 121161 5 10 |
60240000 1 160000 115200 121161 5 10 |
60400000 1 160000 115200 121161 5 10 |
60560000 1 160000 115200 121161 5 10 |
60720000 1 160000 115200 121161 5 10 |
60880000 1 160000 115200 121161 5 10 |
61040000 1 160000 115200 121161 5 10 |
61200000 1 3200000 2304000 2437449 80 90 |
61200000 1 160000 115200 121164 5 10 |
61360000 1 160000 115200 121164 5 10 |
61434068 1 1096002 936145 989908 94 93 |
61434068 1 32002 30918 31996 1 31 |
61520000 1 160000 115200 121172 5 10 |
61566070 1 1328002 840830 889053 94 57 |
61566070 1 558002 381573 403050 50 49 |
61566070 1 2257002 872000 922068 76 61 |
61566070 1 826002 477837 504938 78 87 |
61680000 1 160000 115200 121206 5 10 |
61840000 1 160000 115200 121206 5 10 |
62000000 1 160000 115200 121206 5 10 |
62160000 1 160000 115200 121206 5 10 |
62320000 1 160000 115200 121206 5 10 |
62480000 1 160000 115200 121206 5 10 |
62492072 1 2468002 2087746 2208592 42 17 |
62640000 1 160000 115200 121176 5 10 |
62800000 1 160000 115200 121176 5 10 |
62960000 1 160000 115200 121176 5 10 |
63120000 1 160000 115200 121176 5 10 |
63280000 1 160000 115200 121176 5 10 |
63440000 1 160000 115200 121176 5 10 |
63600000 1 160000 115200 121176 5 10 |
63760000 1 160000 115200 121176 5 10 |
63920000 1 160000 115200 121176 5 10 |
64080000 1 160000 115200 121176 5 10 |
64240000 1 160000 115200 121176 5 10 |
64400000 1 3200000 2304000 2437408 80 90 |
64400000 1 160000 115200 121174 5 10 |
64560000 1 160000 115200 121174 5 10 |
64720000 1 160000 115200 121174 5 10 |
64795164 0 99000 12147 12140 0 0 |
64795332 0 82000 8262 8025 0 0 |
64795497 0 82000 2961 2418 0 0 |
64880000 1 160000 115200 121174 5 10 |
65040000 1 160000 115200 121174 5 10 |
65060074 1 1997002 747316 790126 21 70 |
65200000 1 160000 115200 121174 5 10 |
65360000 1 160000 115200 121174 5 10 |
65520000 1 160000 115200 121174 5 10 |
65680000 1 160000 115200 121174 5 10 |
65840000 1 160000 115200 121174 5 10 |
66000000 1 160000 115200 121174 5 10 |
66160000 1 160000 115200 121174 5 10 |
66320000 1 160000 115200 121174 5 10 |
66480000 1 160000 115200 121174 5 10 |
66640000 1 160000 115200 121174 5 10 |
66800000 1 160000 115200 121174 5 10 |
66960000 1 160000 115200 121174 5 10 |
67120000 1 160000 115200 121174 5 10 |
67157076 1 1549002 658208 695808 7 71 |
67280000 1 160000 115200 121204 5 10 |
67440000 1 160000 115200 121204 5 10 |
67600000 1 3200000 2304000 2437443 80 90 |
67600000 1 160000 115200 121169 5 10 |
67760000 1 160000 115200 121169 5 10 |
67920000 1 160000 115200 121169 5 10 |
68080000 1 160000 115200 121169 5 10 |
68240000 1 160000 115200 121169 5 10 |
68400000 1 160000 115200 121169 5 10 |
68560000 1 160000 115200 121169 5 10 |
68720000 1 160000 115200 121169 5 10 |
68806078 1 348002 307802 325017 24 26 |
68806078 1 987002 116089 122151 29 49 |
68880000 1 160000 115200 121203 5 10 |
69040000 1 160000 115200 121203 5 10 |
69200000 1 160000 115200 121203 5 10 |
69360000 1 160000 115200 121203 5 10 |
69520000 1 160000 115200 121203 5 10 |
69680000 1 160000 115200 121203 5 10 |
69840000 1 160000 115200 121203 5 10 |
69893080 1 1128002 266659 281501 37 88 |
69893080 1 2255002 1966070 2079803 25 77 |
69893080 1 2531002 2112468 2234698 1 56 |
70000000 1 160000 115200 121206 5 10 |
70160000 1 160000 115200 121206 5 10 |
70320000 1 160000 115200 121206 5 10 |
70480000 1 160000 115200 121206 5 10 |
70640000 1 160000 115200 121206 5 10 |
70800000 1 3200000 2304000 2437423 80 90 |
70800000 1 160000 115200 121214 5 10 |
70960000 1 160000 115200 121214 5 10 |
71120000 1 160000 115200 121214 5 10 |
71280000 1 160000 115200 121214 5 10 |
71437416 0 68000 5175 4760 0 0 |
71437573 0 66000 5284 4876 0 0 |
71440000 1 160000 115200 121214 5 10 |
71600000 1 160000 115200 121214 5 10 |
71760000 1 160000 115200 121214 5 10 |
71920000 1 160000 115200 121214 5 10 |
72080000 1 160000 115200 121214 5 10 |
72240000 1 160000 115200 121214 5 10 |
72400000 1 160000 115200 121214 5 10 |
72524082 1 74002 28416 29351 75 57 |
72524082 1 1369002 944728 999039 95 55 |
72524082 1 2658002 564240 596380 65 1 |
72524082 1 2880002 344142 363445 23 79 |
72524082 1 1667002 485209 512765 8 23 |
72524082 1 1833002 835588 883515 48 19 |
72560000 1 160000 115200 121166 5 10 |
72720000 1 160000 115200 121166 5 10 |
72814272 0 99000 5372 4968 0 0 |
72814559 0 90000 3320 2798 0 0 |
72814724 0 85000 2125 1534 0 0 |
72880000 1 160000 115200 121166 5 10 |
73040000 1 160000 115200 121166 5 10 |
73200000 1 160000 115200 121166 5 10 |
73360000 1 160000 115200 121166 5 10 |
73520000 1 160000 115200 121166 5 10 |
73680000 1 160000 115200 121166 5 10 |
73840000 1 160000 115200 121166 5 10 |
74000000 1 5600000 3080000 3258634 80 90 |
74000000 1 280000 154000 162257 5 10 |
74000039 0 78000 6968 6659 0 0 |
74000182 0 71000 5344 4941 0 0 |
74280000 1 280000 154000 162257 5 10 |
74457084 1 790002 786572 831626 45 80 |
74560000 1 280000 154000 162219 5 10 |
74840000 1 280000 154000 162219 5 10 |
75120000 1 280000 154000 162219 5 10 |
75347086 1 41002 30969 32062 43 90 |
75347086 1 336002 63459 66448 34 22 |
75400000 1 280000 154000 162216 5 10 |
75680000 1 280000 154000 162216 5 10 |
75783088 1 1291002 1008318 1066323 31 64 |
75783088 1 2106002 1883656 1992568 43 77 |
75783088 1 1976002 1845195 1951881 84 39 |
75783088 1 2721002 1377766 1457252 78 89 |
75783088 1 281002 202534 213573 69 46 |
75960000 1 280000 154000 162225 5 10 |
76164090 1 1742002 1186725 1255082 94 22 |
76240000 1 280000 154000 162220 5 10 |
76520000 1 280000 154000 162220 5 10 |
76783641 0 82000 4878 4447 0 0 |
76783809 0 88000 2200 1613 0 0 |
76800000 1 280000 154000 162220 5 10 |
76945487 0 73000 4987 4561 0 0 |
77080000 1 280000 154000 162220 5 10 |
77360000 1 280000 154000 162220 5 10 |
77640000 1 280000 154000 162220 5 10 |
77920000 1 280000 154000 162220 5 10 |
78006092 1 506002 369708 390537 96 47 |
78200000 1 280000 154000 162210 5 10 |
78480000 1 280000 154000 162210 5 10 |
78612094 1 1664002 1052871 1113424 69 16 |
78760000 1 280000 154000 162272 5 10 |
79040000 1 280000 154000 162272 5 10 |
79320000 1 280000 154000 162272 5 10 |
79600000 1 5600000 3080000 3258608 80 90 |
79600000 1 280000 154000 162274 5 10 |
79699818 0 60000 1500 872 0 0 |
79751258 0 66000 1650 1031 0 0 |
79751418 0 70000 4093 3615 0 0 |
79880000 1 280000 154000 162274 5 10 |
80104634 0 73000 2655 2094 0 0 |
80160000 1 280000 154000 162274 5 10 |
80318239 0 70000 6018 5654 0 0 |
80376096 1 2455002 239185 252431 18 83 |
80376096 1 2060002 1651940 1747402 83 73 |
80440000 1 280000 154000 162262 5 10 |
80720000 1 280000 154000 162262 5 10 |
80833353 0 78000 4576 4127 0 0 |
81000000 1 280000 154000 162262 5 10 |
81280000 1 280000 154000 162262 5 10 |
81560000 1 280000 154000 162262 5 10 |
81840000 1 280000 154000 162262 5 10 |
82120000 1 280000 154000 162262 5 10 |
82400000 1 280000 154000 162262 5 10 |
82536098 1 1593002 899992 951670 49 86 |
82536098 1 2902002 1003444 1061128 19 69 |
82680000 1 280000 154000 162221 5 10 |
82858607 0 82000 3982 3499 0 0 |
82858755 0 75000 1875 1269 0 0 |
82960000 1 280000 154000 162221 5 10 |
83240000 1 280000 154000 162221 5 10 |
83425728 0 87000 3058 2520 0 0 |
83425935 0 68000 1700 1084 0 0 |
83520000 1 280000 154000 162221 5 10 |
83800000 1 280000 154000 162221 5 10 |
83912035 0 78000 1950 1349 0 0 |
84080000 1 280000 154000 162221 5 10 |
84360000 1 280000 154000 162221 5 10 |
84560013 0 74000 1850 1243 0 0 |
84640000 1 280000 154000 162221 5 10 |
84920000 1 280000 154000 162221 5 10 |
85097318 0 93000 2325 1746 0 0 |
85200000 1 5600000 3080000 3258645 80 90 |
85200000 1 280000 154000 162274 5 10 |
85421481 0 80000 3236 2709 0 0 |
85480000 1 280000 154000 162274 5 10 |
85538100 1 1686002 10299 10182 35 84 |
85538100 1 2046002 1842815 1949385 89 71 |
85760000 1 280000 154000 162218 5 10 |
85988355 0 98000 4637 4190 0 0 |
85988562 0 78000 3220 2692 0 0 |
86017733 0 98000 2450 1877 0 0 |
86017880 0 85000 2125 1534 0 0 |
86040000 1 280000 154000 162218 5 10 |
86320000 1 280000 154000 162218 5 10 |
86600000 1 280000 154000 162218 5 10 |
86880000 1 280000 154000 162218 5 10 |
87151424 0 75000 3564 3056 0 0 |
87160000 1 280000 154000 162218 5 10 |
87440000 1 280000 154000 162218 5 10 |
87684102 1 950002 46646 48639 1 93 |
87684102 1 1675002 693268 732923 54 19 |
87720000 1 280000 154000 162265 5 10 |
88000000 1 280000 154000 162265 5 10 |
88280000 1 280000 154000 162265 5 10 |
88560000 1 280000 154000 162265 5 10 |
88840000 1 280000 154000 162265 5 10 |
88933839 0 68000 2509 1940 0 0 |
88934080 0 89000 2225 1640 0 0 |
89120000 1 280000 154000 162265 5 10 |
89400000 1 280000 154000 162265 5 10 |
89459104 1 768002 168011 177085 51 84 |
89459104 1 2652002 1318274 1394333 41 33 |
89500800 0 84000 2627 2065 0 0 |
89680000 1 280000 154000 162216 5 10 |
89960000 1 280000 154000 162216 5 10 |
90230127 0 93000 2325 1745 0 0 |
90240000 1 280000 154000 162216 5 10 |
90472780 0 90000 2637 2074 0 0 |
90472975 0 86000 2150 1560 0 0 |
90520000 1 280000 154000 162216 5 10 |
90554060 0 76000 1900 1296 0 0 |
90800000 1 5600000 3080000 3258650 80 90 |
90800000 1 280000 154000 162225 5 10 |
91080000 1 280000 154000 162225 5 10 |
91360000 1 280000 154000 162225 5 10 |
91640000 1 280000 154000 162225 5 10 |
91901533 0 87000 2175 1586 0 0 |
91920000 1 280000 154000 162225 5 10 |
92200000 1 280000 154000 162225 5 10 |
92211106 1 145002 129480 136278 81 5 |
92306606 0 89000 2784 2231 0 0 |
92306959 0 73000 1825 1216 0 0 |
92456108 1 1380002 1124915 1189676 23 1 |
92480000 1 280000 154000 162289 5 10 |
92630418 0 84000 2100 1507 0 0 |
92760000 1 280000 154000 162289 5 10 |
92903116 0 69000 1725 1111 0 0 |
93040000 1 280000 154000 162289 5 10 |
93226690 0 94000 2790 2237 0 0 |
93320000 1 280000 154000 162289 5 10 |
93600000 1 280000 154000 162289 5 10 |
93880000 1 280000 154000 162289 5 10 |
93926444 0 73000 3916 3427 0 0 |
93936110 1 2777002 1595969 1688155 57 47 |
93955802 0 40000 1000 343 0 0 |
94160000 1 280000 154000 162225 5 10 |
94440000 1 280000 154000 162225 5 10 |
94441907 0 86000 2488 1918 0 0 |
94720000 1 280000 154000 162225 5 10 |
95000000 1 280000 154000 162225 5 10 |
95280000 1 280000 154000 162225 5 10 |
95560000 1 280000 154000 162225 5 10 |
95840000 1 280000 154000 162225 5 10 |
96120000 1 280000 154000 162225 5 10 |
96143345 0 66000 2986 2443 0 0 |
96304847 0 99000 2475 1904 0 0 |
96400000 1 5600000 3080000 3258652 80 90 |
96400000 1 280000 154000 162214 5 10 |
96680000 1 280000 154000 162214 5 10 |
96710173 0 86000 2150 1561 0 0 |
96813112 1 1458002 1103572 1167136 50 37 |
96813112 1 1168002 718904 760013 50 63 |
96960000 1 280000 154000 162218 5 10 |
97195858 0 97000 2425 1851 0 0 |
97240000 1 280000 154000 162218 5 10 |
97439161 0 92000 2300 1719 0 0 |
97520000 1 280000 154000 162218 5 10 |
97762836 0 92000 2300 1719 0 0 |
97763243 0 71000 2191 1603 0 0 |
97800000 1 280000 154000 162218 5 10 |
98080000 1 280000 154000 162218 5 10 |
98081114 1 2107002 1959110 2072468 4 99 |
98081114 1 1347002 1195722 1264606 57 34 |
98081114 1 1987002 1254103 1326407 22 50 |
98220054 0 73000 1825 1216 0 0 |
98360000 1 280000 154000 162222 5 10 |
98492233 0 96000 2400 1825 0 0 |
98640000 1 280000 154000 162222 5 10 |
98920000 1 280000 154000 162222 5 10 |
98948616 0 82000 2050 1455 0 0 |
99200000 1 280000 154000 162222 5 10 |
99434494 0 97000 2425 1851 0 0 |
99480000 1 280000 154000 162222 5 10 |
99515691 0 76000 2070 1475 0 0 |
99760000 1 280000 154000 162222 5 10 |
99839614 0 86000 3148 2616 0 0 |
99839785 0 91000 2275 1692 0 0 |
100040000 1 280000 154000 162222 5 10 |
100168116 1 1460002 1276815 1350410 35 45 |
100168116 1 1233002 811625 858155 36 38 |
100168116 1 1572002 549837 581157 46 69 |
100168116 1 2977002 805176 851368 31 11 |
100320000 1 280000 154000 162222 5 10 |
100600000 1 280000 154000 162222 5 10 |
100840751 0 78000 1950 1348 0 0 |
100880000 1 280000 154000 162222 5 10 |
101160000 1 280000 154000 162222 5 10 |
101407970 0 90000 2250 1666 0 0 |
101440000 1 280000 154000 162222 5 10 |
101489499 0 91000 2610 2047 0 0 |
101489642 0 69000 1725 1110 0 0 |
101720000 1 280000 154000 162222 5 10 |
102000000 1 3800000 2926000 3095629 80 90 |
102000000 1 190000 146300 154071 5 10 |
102190000 1 190000 146300 154071 5 10 |
102380000 1 190000 146300 154071 5 10 |
102570000 1 190000 146300 154071 5 10 |
102760000 1 190000 146300 154071 5 10 |
102950000 1 190000 146300 154071 5 10 |
103140000 1 190000 146300 154071 5 10 |
103245118 1 818002 82058 86133 54 97 |
103245118 1 1107002 77945 81784 71 16 |
103245118 1 697002 185308 195398 39 20 |
103245118 1 2107002 62104 65015 89 100 |
103330000 1 190000 146300 154069 5 10 |
103520000 1 190000 146300 154069 5 10 |
103710000 1 190000 146300 154069 5 10 |
103900000 1 190000 146300 154069 5 10 |
104090000 1 190000 146300 154069 5 10 |
104280000 1 190000 146300 154069 5 10 |
104470000 1 190000 146300 154069 5 10 |
104660000 1 190000 146300 154069 5 10 |
104850000 1 190000 146300 154069 5 10 |
105040000 1 190000 146300 154069 5 10 |
105230000 1 190000 146300 154069 5 10 |
105420000 1 190000 146300 154069 5 10 |
105452120 1 779002 231364 244089 79 75 |
105610000 1 190000 146300 154071 5 10 |
105800000 1 3800000 2926000 3095659 80 90 |
105800000 1 190000 146300 154122 5 10 |
105990000 1 190000 146300 154122 5 10 |
106180000 1 190000 146300 154122 5 10 |
106268284 0 100000 2500 1931 0 0 |
106331122 1 443002 5641 5253 69 72 |
106331122 1 1665002 942364 996515 72 16 |
106331122 1 2739002 709436 749996 58 27 |
106370000 1 190000 146300 154067 5 10 |
106560000 1 190000 146300 154067 5 10 |
106750000 1 190000 146300 154067 5 10 |
106805664 0 82000 2688 2129 0 0 |
106940000 1 190000 146300 154067 5 10 |
107078723 0 92000 2300 1719 0 0 |
107130000 1 190000 146300 154067 5 10 |
107158817 0 59000 1599 977 0 0 |
107210837 0 78000 2281 1698 0 0 |
107291765 0 75000 2130 1539 0 0 |
107320000 1 190000 146300 154067 5 10 |
107510000 1 190000 146300 154067 5 10 |
107700000 1 190000 146300 154067 5 10 |
107890000 1 190000 146300 154067 5 10 |
108080000 1 190000 146300 154067 5 10 |
108270000 1 190000 146300 154067 5 10 |
108460000 1 190000 146300 154067 5 10 |
108650000 1 190000 146300 154067 5 10 |
108698025 0 71000 2044 1448 0 0 |
108840000 1 190000 146300 154067 5 10 |
108860692 0 67000 2159 1570 0 0 |
109030000 1 190000 146300 154067 5 10 |
109170124 1 2455002 1961694 2075195 75 86 |
109170124 1 2898002 85762 90049 53 26 |
109170124 1 2648002 691495 731060 8 24 |
109170124 1 267002 21664 22204 27 50 |
109170124 1 1450002 361880 382219 13 62 |
109220000 1 190000 146300 154125 5 10 |
109410000 1 190000 146300 154125 5 10 |
109600000 1 3800000 2926000 3095578 80 90 |
109600000 1 190000 146300 154124 5 10 |
109790000 1 190000 146300 154124 5 10 |
109980000 1 190000 146300 154124 5 10 |
110170000 1 190000 146300 154124 5 10 |
110360000 1 190000 146300 154124 5 10 |
110550000 1 190000 146300 154124 5 10 |
110720126 1 2706002 487696 515419 33 31 |
110740000 1 190000 146300 154071 5 10 |
110930000 1 190000 146300 154071 5 10 |
111120000 1 190000 146300 154071 5 10 |
111310000 1 190000 146300 154071 5 10 |
111500000 1 190000 146300 154071 5 10 |
111690000 1 190000 146300 154071 5 10 |
111880000 1 190000 146300 154071 5 10 |
111937866 0 78000 1950 1348 0 0 |
112070000 1 190000 146300 154071 5 10 |
112260000 1 190000 146300 154071 5 10 |
112450000 1 190000 146300 154071 5 10 |
112640000 1 190000 146300 154071 5 10 |
112830000 1 190000 146300 154071 5 10 |
113020000 1 190000 146300 154071 5 10 |
113210000 1 190000 146300 154071 5 10 |
113366926 0 72000 1906 1301 0 0 |
113400000 1 3800000 2926000 3095624 80 90 |
113400000 1 190000 146300 154076 5 10 |
113447731 0 73000 2251 1666 0 0 |
113526128 1 1361002 1081105 1143354 37 24 |
113526128 1 2774002 2640963 2793983 86 84 |
113526128 1 565002 425383 449435 79 9 |
113526128 1 930002 281633 297330 43 94 |
113526128 1 1967002 288096 304103 55 51 |
113526128 1 1141002 1093302 1156229 73 36 |
113529103 0 74000 2128 1536 0 0 |
113590000 1 190000 146300 154127 5 10 |
113780000 1 190000 146300 154127 5 10 |
113970000 1 190000 146300 154127 5 10 |
114160000 1 190000 146300 154127 5 10 |
114287808 0 77000 2239 1654 0 0 |
114350000 1 190000 146300 154127 5 10 |
114368339 0 93000 2325 1746 0 0 |
114449100 0 88000 2200 1613 0 0 |
114530807 0 88000 2200 1613 0 0 |
114540000 1 190000 146300 154127 5 10 |
114730000 1 190000 146300 154127 5 10 |
114767130 1 1422002 171812 181120 36 66 |
114920000 1 190000 146300 154080 5 10 |
115110000 1 190000 146300 154080 5 10 |
115300000 1 190000 146300 154080 5 10 |
115490000 1 190000 146300 154080 5 10 |
115680000 1 190000 146300 154080 5 10 |
115870000 1 190000 146300 154080 5 10 |
116060000 1 190000 146300 154080 5 10 |
116250000 1 190000 146300 154080 5 10 |
116289132 1 1438002 1068638 1130145 92 83 |
116440000 1 190000 146300 154120 5 10 |
116630000 1 190000 146300 154120 5 10 |
116820000 1 190000 146300 154120 5 10 |
117010000 1 190000 146300 154120 5 10 |
117200000 1 3800000 2926000 3095640 80 90 |
117200000 1 190000 146300 154122 5 10 |
117390000 1 190000 146300 154122 5 10 |
117580000 1 190000 146300 154122 5 10 |
117770000 1 190000 146300 154122 5 10 |
117827134 1 1934002 918431 971185 92 1 |
117960000 1 190000 146300 154067 5 10 |
118150000 1 190000 146300 154067 5 10 |
118255950 0 80000 2139 1549 0 0 |
118340000 1 190000 146300 154067 5 10 |
118530000 1 190000 146300 154067 5 10 |
118720000 1 190000 146300 154067 5 10 |
118910000 1 190000 146300 154067 5 10 |
119100000 1 190000 146300 154067 5 10 |
119198984 0 80000 2125 1533 0 0 |
119290000 1 190000 146300 154067 5 10 |
119360788 0 92000 2300 1719 0 0 |
119480000 1 190000 146300 154067 5 10 |
119523155 0 84000 2435 1862 0 0 |
119670000 1 190000 146300 154067 5 10 |
119860000 1 190000 146300 154067 5 10 |
119861136 1 646002 401618 424282 8 45 |
119861136 1 156002 51422 53690 93 26 |
120050000 1 190000 146300 154124 5 10 |
120240000 1 190000 146300 154124 5 10 |
120430000 1 190000 146300 154124 5 10 |
120524902 0 89000 2302 1720 0 0 |
120620000 1 190000 146300 154124 5 10 |
120810000 1 190000 146300 154124 5 10 |
/unsupported/trunk/crunch/load/120_1/vpattern.dat |
---|
0,0 → 1,868 |
867 |
1000000 3600000 792000 837402 80 90 |
1000000 180000 39600 41185 5 10 |
1000000 948002 482431 509820 73 73 |
1000000 1005002 667004 705086 61 21 |
1180000 180000 39600 41182 5 10 |
1360000 180000 39600 41182 5 10 |
1540000 180000 39600 41182 5 10 |
1720000 180000 39600 41182 5 10 |
1900000 180000 39600 41182 5 10 |
2080000 180000 39600 41182 5 10 |
2105002 424002 113189 119082 85 64 |
2260000 180000 39600 41183 5 10 |
2440000 180000 39600 41183 5 10 |
2620000 180000 39600 41183 5 10 |
2629004 2690002 1271063 1344382 17 41 |
2800000 180000 39600 41195 5 10 |
2980000 180000 39600 41195 5 10 |
3160000 180000 39600 41195 5 10 |
3340000 180000 39600 41195 5 10 |
3520000 180000 39600 41195 5 10 |
3700000 180000 39600 41195 5 10 |
3880000 180000 39600 41195 5 10 |
4060000 180000 39600 41195 5 10 |
4240000 180000 39600 41195 5 10 |
4420000 180000 39600 41195 5 10 |
4600000 3600000 792000 837447 80 90 |
4600000 180000 39600 41180 5 10 |
4780000 180000 39600 41180 5 10 |
4960000 180000 39600 41180 5 10 |
5140000 180000 39600 41180 5 10 |
5320000 180000 39600 41180 5 10 |
5419006 2084002 157190 165589 94 29 |
5500000 180000 39600 41181 5 10 |
5680000 180000 39600 41181 5 10 |
5860000 180000 39600 41181 5 10 |
6040000 180000 39600 41181 5 10 |
6220000 180000 39600 41181 5 10 |
6400000 180000 39600 41181 5 10 |
6580000 180000 39600 41181 5 10 |
6760000 180000 39600 41181 5 10 |
6940000 180000 39600 41181 5 10 |
7120000 180000 39600 41181 5 10 |
7300000 180000 39600 41181 5 10 |
7480000 180000 39600 41181 5 10 |
7603008 2663002 2506134 2651322 24 42 |
7660000 180000 39600 41183 5 10 |
7840000 180000 39600 41183 5 10 |
8020000 180000 39600 41183 5 10 |
8200000 3600000 792000 837400 80 90 |
8200000 180000 39600 41177 5 10 |
8380000 180000 39600 41177 5 10 |
8560000 180000 39600 41177 5 10 |
8740000 180000 39600 41177 5 10 |
8920000 180000 39600 41177 5 10 |
9100000 180000 39600 41177 5 10 |
9280000 180000 39600 41177 5 10 |
9460000 180000 39600 41177 5 10 |
9640000 180000 39600 41177 5 10 |
9820000 180000 39600 41177 5 10 |
10000000 180000 39600 41177 5 10 |
10180000 180000 39600 41177 5 10 |
10360000 180000 39600 41177 5 10 |
10366010 1902002 1718177 1817503 36 33 |
10540000 180000 39600 41182 5 10 |
10720000 180000 39600 41182 5 10 |
10900000 180000 39600 41182 5 10 |
11080000 180000 39600 41182 5 10 |
11260000 180000 39600 41182 5 10 |
11440000 180000 39600 41182 5 10 |
11620000 180000 39600 41182 5 10 |
11800000 3600000 792000 837396 80 90 |
11800000 180000 39600 41183 5 10 |
11980000 180000 39600 41183 5 10 |
12160000 180000 39600 41183 5 10 |
12340000 180000 39600 41183 5 10 |
12368012 2920002 1675238 1772061 10 5 |
12368012 2569002 2400619 2539657 51 88 |
12520000 180000 39600 41183 5 10 |
12700000 180000 39600 41183 5 10 |
12880000 180000 39600 41183 5 10 |
13060000 180000 39600 41183 5 10 |
13240000 180000 39600 41183 5 10 |
13420000 180000 39600 41183 5 10 |
13600000 180000 39600 41183 5 10 |
13780000 180000 39600 41183 5 10 |
13960000 180000 39600 41183 5 10 |
14140000 180000 39600 41183 5 10 |
14320000 180000 39600 41183 5 10 |
14500000 180000 39600 41183 5 10 |
14680000 180000 39600 41183 5 10 |
14860000 180000 39600 41183 5 10 |
15037014 480002 45079 46999 43 49 |
15037014 857002 734926 776975 26 80 |
15040000 180000 39600 41198 5 10 |
15220000 180000 39600 41198 5 10 |
15400000 3600000 792000 837401 80 90 |
15400000 180000 39600 41197 5 10 |
15580000 180000 39600 41197 5 10 |
15760000 180000 39600 41197 5 10 |
15940000 180000 39600 41197 5 10 |
15994016 1629002 830859 878529 98 10 |
15994016 2582002 350306 370027 27 13 |
15994016 2190002 13750 13833 59 86 |
16120000 180000 39600 41182 5 10 |
16300000 180000 39600 41182 5 10 |
16480000 180000 39600 41182 5 10 |
16660000 180000 39600 41182 5 10 |
16840000 180000 39600 41182 5 10 |
17020000 180000 39600 41182 5 10 |
17200000 180000 39600 41182 5 10 |
17380000 180000 39600 41182 5 10 |
17560000 180000 39600 41182 5 10 |
17740000 180000 39600 41182 5 10 |
17920000 180000 39600 41182 5 10 |
18100000 180000 39600 41182 5 10 |
18280000 180000 39600 41182 5 10 |
18284018 1352002 323167 341261 72 41 |
18460000 180000 39600 41192 5 10 |
18640000 180000 39600 41192 5 10 |
18820000 180000 39600 41192 5 10 |
19000000 1000000 260000 274465 80 90 |
19000000 50000 13000 13044 5 10 |
19050000 50000 13000 13044 5 10 |
19100000 50000 13000 13044 5 10 |
19150000 50000 13000 13044 5 10 |
19200000 50000 13000 13044 5 10 |
19250000 50000 13000 13044 5 10 |
19300000 50000 13000 13044 5 10 |
19350000 50000 13000 13044 5 10 |
19400000 50000 13000 13044 5 10 |
19450000 50000 13000 13044 5 10 |
19500000 50000 13000 13044 5 10 |
19550000 50000 13000 13044 5 10 |
19600000 50000 13000 13044 5 10 |
19650000 50000 13000 13044 5 10 |
19700000 50000 13000 13044 5 10 |
19736020 1031002 556354 588001 46 94 |
19750000 50000 13000 13040 5 10 |
19800000 50000 13000 13040 5 10 |
19850000 50000 13000 13040 5 10 |
19900000 50000 13000 13040 5 10 |
19950000 50000 13000 13040 5 10 |
20000000 1000000 260000 274439 80 90 |
20000000 50000 13000 13045 5 10 |
20050000 50000 13000 13045 5 10 |
20100000 50000 13000 13045 5 10 |
20150000 50000 13000 13045 5 10 |
20200000 50000 13000 13045 5 10 |
20250000 50000 13000 13045 5 10 |
20300000 50000 13000 13045 5 10 |
20350000 50000 13000 13045 5 10 |
20400000 50000 13000 13045 5 10 |
20450000 50000 13000 13045 5 10 |
20500000 50000 13000 13045 5 10 |
20550000 50000 13000 13045 5 10 |
20600000 50000 13000 13045 5 10 |
20650000 50000 13000 13045 5 10 |
20700000 50000 13000 13045 5 10 |
20750000 50000 13000 13045 5 10 |
20800000 50000 13000 13045 5 10 |
20850000 50000 13000 13045 5 10 |
20867022 2040002 1743982 1844825 6 60 |
20900000 50000 13000 13040 5 10 |
20950000 50000 13000 13040 5 10 |
21000000 1000000 260000 274448 80 90 |
21000000 50000 13000 13039 5 10 |
21050000 50000 13000 13039 5 10 |
21100000 50000 13000 13039 5 10 |
21150000 50000 13000 13039 5 10 |
21200000 50000 13000 13039 5 10 |
21250000 50000 13000 13039 5 10 |
21300000 50000 13000 13039 5 10 |
21350000 50000 13000 13039 5 10 |
21400000 50000 13000 13039 5 10 |
21450000 50000 13000 13039 5 10 |
21500000 50000 13000 13039 5 10 |
21550000 50000 13000 13039 5 10 |
21600000 50000 13000 13039 5 10 |
21650000 50000 13000 13039 5 10 |
21700000 50000 13000 13039 5 10 |
21750000 50000 13000 13039 5 10 |
21800000 50000 13000 13039 5 10 |
21850000 50000 13000 13039 5 10 |
21900000 50000 13000 13039 5 10 |
21950000 50000 13000 13039 5 10 |
22000000 1000000 260000 274457 80 90 |
22000000 50000 13000 13040 5 10 |
22050000 50000 13000 13040 5 10 |
22100000 50000 13000 13040 5 10 |
22150000 50000 13000 13040 5 10 |
22200000 50000 13000 13040 5 10 |
22250000 50000 13000 13040 5 10 |
22300000 50000 13000 13040 5 10 |
22350000 50000 13000 13040 5 10 |
22400000 50000 13000 13040 5 10 |
22450000 50000 13000 13040 5 10 |
22500000 50000 13000 13040 5 10 |
22550000 50000 13000 13040 5 10 |
22600000 50000 13000 13040 5 10 |
22650000 50000 13000 13040 5 10 |
22700000 50000 13000 13040 5 10 |
22750000 50000 13000 13040 5 10 |
22800000 50000 13000 13040 5 10 |
22850000 50000 13000 13040 5 10 |
22900000 50000 13000 13040 5 10 |
22950000 50000 13000 13040 5 10 |
23000000 1000000 260000 274422 80 90 |
23000000 50000 13000 13044 5 10 |
23007024 1133002 142298 149839 9 7 |
23007024 2695002 1986655 2101611 80 90 |
23050000 50000 13000 13039 5 10 |
23100000 50000 13000 13039 5 10 |
23150000 50000 13000 13039 5 10 |
23200000 50000 13000 13039 5 10 |
23250000 50000 13000 13039 5 10 |
23300000 50000 13000 13039 5 10 |
23350000 50000 13000 13039 5 10 |
23400000 50000 13000 13039 5 10 |
23450000 50000 13000 13039 5 10 |
23500000 50000 13000 13039 5 10 |
23550000 50000 13000 13039 5 10 |
23600000 50000 13000 13039 5 10 |
23650000 50000 13000 13039 5 10 |
23700000 50000 13000 13039 5 10 |
23750000 50000 13000 13039 5 10 |
23800000 50000 13000 13039 5 10 |
23850000 50000 13000 13039 5 10 |
23900000 50000 13000 13039 5 10 |
23950000 50000 13000 13039 5 10 |
24000000 5000000 5000000 5290375 80 90 |
24000000 250000 250000 263870 5 10 |
24250000 250000 250000 263870 5 10 |
24500000 250000 250000 263870 5 10 |
24750000 250000 250000 263870 5 10 |
25000000 250000 250000 263870 5 10 |
25250000 250000 250000 263870 5 10 |
25500000 250000 250000 263870 5 10 |
25750000 250000 250000 263870 5 10 |
25802026 924002 184480 194489 12 93 |
25802026 2922002 1647630 1742829 22 27 |
25802026 700002 388710 410581 55 10 |
25802026 1494002 1108734 1172599 89 98 |
26000000 250000 250000 263860 5 10 |
26250000 250000 250000 263860 5 10 |
26500000 250000 250000 263860 5 10 |
26750000 250000 250000 263860 5 10 |
27000000 250000 250000 263860 5 10 |
27250000 250000 250000 263860 5 10 |
27396028 1904002 741039 783489 68 19 |
27500000 250000 250000 263833 5 10 |
27750000 250000 250000 263833 5 10 |
28000000 250000 250000 263833 5 10 |
28250000 250000 250000 263833 5 10 |
28500000 250000 250000 263833 5 10 |
28750000 250000 250000 263833 5 10 |
29000000 5000000 5000000 5290414 80 90 |
29000000 250000 250000 263787 5 10 |
29250000 250000 250000 263787 5 10 |
29400030 2202002 1966810 2080616 55 79 |
29500000 250000 250000 263787 5 10 |
29750000 250000 250000 263787 5 10 |
30000000 250000 250000 263787 5 10 |
30250000 250000 250000 263787 5 10 |
30500000 250000 250000 263787 5 10 |
30750000 250000 250000 263787 5 10 |
31000000 250000 250000 263787 5 10 |
31250000 250000 250000 263787 5 10 |
31500000 250000 250000 263787 5 10 |
31702032 2763002 1822616 1928016 17 40 |
31750000 250000 250000 263835 5 10 |
32000000 250000 250000 263835 5 10 |
32250000 250000 250000 263835 5 10 |
32500000 250000 250000 263835 5 10 |
32750000 250000 250000 263835 5 10 |
33000000 250000 250000 263835 5 10 |
33250000 250000 250000 263835 5 10 |
33500000 250000 250000 263835 5 10 |
33750000 250000 250000 263835 5 10 |
34000000 5000000 5000000 5290416 80 90 |
34000000 250000 250000 263865 5 10 |
34250000 250000 250000 263865 5 10 |
34500000 250000 250000 263865 5 10 |
34565034 102002 48188 50269 33 46 |
34565034 2031002 1109806 1173704 98 60 |
34750000 250000 250000 263874 5 10 |
35000000 250000 250000 263874 5 10 |
35250000 250000 250000 263874 5 10 |
35500000 250000 250000 263874 5 10 |
35750000 250000 250000 263874 5 10 |
36000000 250000 250000 263874 5 10 |
36250000 250000 250000 263874 5 10 |
36500000 250000 250000 263874 5 10 |
36696036 1613002 1175317 1243026 55 42 |
36750000 250000 250000 263874 5 10 |
37000000 250000 250000 263874 5 10 |
37250000 250000 250000 263874 5 10 |
37500000 250000 250000 263874 5 10 |
37750000 250000 250000 263874 5 10 |
38000000 250000 250000 263874 5 10 |
38250000 250000 250000 263874 5 10 |
38409038 44002 19554 19973 88 66 |
38500000 250000 250000 263860 5 10 |
38553040 2042002 1261616 1334391 55 56 |
38750000 250000 250000 263839 5 10 |
39000000 5000000 5000000 5290365 80 90 |
39000000 250000 250000 263794 5 10 |
39250000 250000 250000 263794 5 10 |
39500000 250000 250000 263794 5 10 |
39750000 250000 250000 263794 5 10 |
40000000 250000 250000 263794 5 10 |
40250000 250000 250000 263794 5 10 |
40500000 250000 250000 263794 5 10 |
40695042 2321002 1709360 1808167 96 26 |
40750000 250000 250000 263884 5 10 |
41000000 250000 250000 263884 5 10 |
41250000 250000 250000 263884 5 10 |
41500000 250000 250000 263884 5 10 |
41750000 250000 250000 263884 5 10 |
42000000 250000 250000 263884 5 10 |
42250000 250000 250000 263884 5 10 |
42500000 250000 250000 263884 5 10 |
42750000 250000 250000 263884 5 10 |
43000000 250000 250000 263884 5 10 |
43116044 1508002 328958 347400 100 7 |
43116044 2053002 165947 174853 53 58 |
43250000 250000 250000 263790 5 10 |
43500000 250000 250000 263790 5 10 |
43750000 250000 250000 263790 5 10 |
44000000 5000000 5000000 5290418 80 90 |
44000000 250000 250000 263808 5 10 |
44250000 250000 250000 263808 5 10 |
44500000 250000 250000 263808 5 10 |
44750000 250000 250000 263808 5 10 |
45000000 250000 250000 263808 5 10 |
45250000 250000 250000 263808 5 10 |
45269046 217002 173624 182999 26 19 |
45500000 250000 250000 263833 5 10 |
45586048 2506002 1214577 1284576 30 21 |
45586048 279002 62021 64904 88 1 |
45750000 250000 250000 263891 5 10 |
45965050 587002 531557 561798 13 24 |
45965050 1808002 930618 984045 34 28 |
46000000 250000 250000 263790 5 10 |
46250000 250000 250000 263790 5 10 |
46500000 250000 250000 263790 5 10 |
46750000 250000 250000 263790 5 10 |
47000000 250000 250000 263790 5 10 |
47250000 250000 250000 263790 5 10 |
47500000 250000 250000 263790 5 10 |
47750000 250000 250000 263790 5 10 |
47873052 1739002 311765 329190 82 63 |
48000000 250000 250000 263808 5 10 |
48250000 250000 250000 263808 5 10 |
48500000 250000 250000 263808 5 10 |
48750000 250000 250000 263808 5 10 |
49000000 1800000 522000 551654 80 90 |
49000000 90000 26100 26907 5 10 |
49090000 90000 26100 26907 5 10 |
49180000 90000 26100 26907 5 10 |
49270000 90000 26100 26907 5 10 |
49360000 90000 26100 26907 5 10 |
49450000 90000 26100 26907 5 10 |
49540000 90000 26100 26907 5 10 |
49630000 90000 26100 26907 5 10 |
49712054 1826002 1038627 1098393 4 17 |
49712054 6002 3398 2881 58 90 |
49712054 2705002 86154 90468 13 43 |
49720000 90000 26100 26899 5 10 |
49810000 90000 26100 26899 5 10 |
49900000 90000 26100 26899 5 10 |
49990000 90000 26100 26899 5 10 |
50080000 90000 26100 26899 5 10 |
50170000 90000 26100 26899 5 10 |
50260000 90000 26100 26899 5 10 |
50350000 90000 26100 26899 5 10 |
50440000 90000 26100 26899 5 10 |
50530000 90000 26100 26899 5 10 |
50620000 90000 26100 26899 5 10 |
50710000 90000 26100 26899 5 10 |
50800000 1800000 522000 551668 80 90 |
50800000 90000 26100 26907 5 10 |
50890000 90000 26100 26907 5 10 |
50980000 90000 26100 26907 5 10 |
51070000 90000 26100 26907 5 10 |
51160000 90000 26100 26907 5 10 |
51250000 90000 26100 26907 5 10 |
51340000 90000 26100 26907 5 10 |
51430000 90000 26100 26907 5 10 |
51520000 90000 26100 26907 5 10 |
51610000 90000 26100 26907 5 10 |
51700000 90000 26100 26907 5 10 |
51790000 90000 26100 26907 5 10 |
51880000 90000 26100 26907 5 10 |
51970000 90000 26100 26907 5 10 |
52060000 90000 26100 26907 5 10 |
52150000 90000 26100 26907 5 10 |
52240000 90000 26100 26907 5 10 |
52330000 90000 26100 26907 5 10 |
52420000 90000 26100 26907 5 10 |
52510000 90000 26100 26907 5 10 |
52517056 1748002 1410488 1491893 20 18 |
52600000 1800000 522000 551647 80 90 |
52600000 90000 26100 26901 5 10 |
52690000 90000 26100 26901 5 10 |
52780000 90000 26100 26901 5 10 |
52870000 90000 26100 26901 5 10 |
52960000 90000 26100 26901 5 10 |
53050000 90000 26100 26901 5 10 |
53140000 90000 26100 26901 5 10 |
53230000 90000 26100 26901 5 10 |
53320000 90000 26100 26901 5 10 |
53410000 90000 26100 26901 5 10 |
53500000 90000 26100 26901 5 10 |
53590000 90000 26100 26901 5 10 |
53680000 90000 26100 26901 5 10 |
53770000 90000 26100 26901 5 10 |
53860000 90000 26100 26901 5 10 |
53950000 90000 26100 26901 5 10 |
54040000 90000 26100 26901 5 10 |
54130000 90000 26100 26901 5 10 |
54220000 90000 26100 26901 5 10 |
54310000 90000 26100 26901 5 10 |
54365058 150002 103582 108873 65 28 |
54365058 2224002 360929 381223 65 26 |
54400000 1800000 522000 551690 80 90 |
54400000 90000 26100 26898 5 10 |
54490000 90000 26100 26898 5 10 |
54580000 90000 26100 26898 5 10 |
54670000 90000 26100 26898 5 10 |
54760000 90000 26100 26898 5 10 |
54850000 90000 26100 26898 5 10 |
54940000 90000 26100 26898 5 10 |
55030000 90000 26100 26898 5 10 |
55120000 90000 26100 26898 5 10 |
55210000 90000 26100 26898 5 10 |
55300000 90000 26100 26898 5 10 |
55390000 90000 26100 26898 5 10 |
55480000 90000 26100 26898 5 10 |
55570000 90000 26100 26898 5 10 |
55660000 90000 26100 26898 5 10 |
55750000 90000 26100 26898 5 10 |
55840000 90000 26100 26898 5 10 |
55930000 90000 26100 26898 5 10 |
56020000 90000 26100 26898 5 10 |
56110000 90000 26100 26898 5 10 |
56200000 1800000 522000 551656 80 90 |
56200000 90000 26100 26909 5 10 |
56290000 90000 26100 26909 5 10 |
56380000 90000 26100 26909 5 10 |
56470000 90000 26100 26909 5 10 |
56560000 90000 26100 26909 5 10 |
56650000 90000 26100 26909 5 10 |
56689060 1158002 1083915 1146315 18 71 |
56740000 90000 26100 26899 5 10 |
56830000 90000 26100 26899 5 10 |
56920000 90000 26100 26899 5 10 |
57010000 90000 26100 26899 5 10 |
57100000 90000 26100 26899 5 10 |
57190000 90000 26100 26899 5 10 |
57280000 90000 26100 26899 5 10 |
57370000 90000 26100 26899 5 10 |
57460000 90000 26100 26899 5 10 |
57550000 90000 26100 26899 5 10 |
57640000 90000 26100 26899 5 10 |
57730000 90000 26100 26899 5 10 |
57820000 90000 26100 26899 5 10 |
57910000 90000 26100 26899 5 10 |
57947062 856002 462631 488882 51 81 |
58000000 3200000 2304000 2437427 80 90 |
58000000 160000 115200 121166 5 10 |
58160000 160000 115200 121166 5 10 |
58320000 160000 115200 121166 5 10 |
58480000 160000 115200 121166 5 10 |
58640000 160000 115200 121166 5 10 |
58800000 160000 115200 121166 5 10 |
58903064 855002 663196 701079 32 81 |
58960000 160000 115200 121203 5 10 |
59120000 160000 115200 121203 5 10 |
59280000 160000 115200 121203 5 10 |
59440000 160000 115200 121203 5 10 |
59600000 160000 115200 121203 5 10 |
59760000 160000 115200 121203 5 10 |
59858066 2848002 1930317 2041981 61 33 |
59858066 2867002 1697032 1795106 63 60 |
59858066 1168002 437978 462780 2 35 |
59858066 2067002 1079046 1141152 22 7 |
59858066 1476002 1039252 1099044 42 35 |
59920000 160000 115200 121161 5 10 |
60080000 160000 115200 121161 5 10 |
60240000 160000 115200 121161 5 10 |
60400000 160000 115200 121161 5 10 |
60560000 160000 115200 121161 5 10 |
60720000 160000 115200 121161 5 10 |
60880000 160000 115200 121161 5 10 |
61040000 160000 115200 121161 5 10 |
61200000 3200000 2304000 2437449 80 90 |
61200000 160000 115200 121164 5 10 |
61360000 160000 115200 121164 5 10 |
61434068 1096002 936145 989908 94 93 |
61434068 32002 30918 31996 1 31 |
61520000 160000 115200 121172 5 10 |
61566070 1328002 840830 889053 94 57 |
61566070 558002 381573 403050 50 49 |
61566070 2257002 872000 922068 76 61 |
61566070 826002 477837 504938 78 87 |
61680000 160000 115200 121206 5 10 |
61840000 160000 115200 121206 5 10 |
62000000 160000 115200 121206 5 10 |
62160000 160000 115200 121206 5 10 |
62320000 160000 115200 121206 5 10 |
62480000 160000 115200 121206 5 10 |
62492072 2468002 2087746 2208592 42 17 |
62640000 160000 115200 121176 5 10 |
62800000 160000 115200 121176 5 10 |
62960000 160000 115200 121176 5 10 |
63120000 160000 115200 121176 5 10 |
63280000 160000 115200 121176 5 10 |
63440000 160000 115200 121176 5 10 |
63600000 160000 115200 121176 5 10 |
63760000 160000 115200 121176 5 10 |
63920000 160000 115200 121176 5 10 |
64080000 160000 115200 121176 5 10 |
64240000 160000 115200 121176 5 10 |
64400000 3200000 2304000 2437408 80 90 |
64400000 160000 115200 121174 5 10 |
64560000 160000 115200 121174 5 10 |
64720000 160000 115200 121174 5 10 |
64880000 160000 115200 121174 5 10 |
65040000 160000 115200 121174 5 10 |
65060074 1997002 747316 790126 21 70 |
65200000 160000 115200 121174 5 10 |
65360000 160000 115200 121174 5 10 |
65520000 160000 115200 121174 5 10 |
65680000 160000 115200 121174 5 10 |
65840000 160000 115200 121174 5 10 |
66000000 160000 115200 121174 5 10 |
66160000 160000 115200 121174 5 10 |
66320000 160000 115200 121174 5 10 |
66480000 160000 115200 121174 5 10 |
66640000 160000 115200 121174 5 10 |
66800000 160000 115200 121174 5 10 |
66960000 160000 115200 121174 5 10 |
67120000 160000 115200 121174 5 10 |
67157076 1549002 658208 695808 7 71 |
67280000 160000 115200 121204 5 10 |
67440000 160000 115200 121204 5 10 |
67600000 3200000 2304000 2437443 80 90 |
67600000 160000 115200 121169 5 10 |
67760000 160000 115200 121169 5 10 |
67920000 160000 115200 121169 5 10 |
68080000 160000 115200 121169 5 10 |
68240000 160000 115200 121169 5 10 |
68400000 160000 115200 121169 5 10 |
68560000 160000 115200 121169 5 10 |
68720000 160000 115200 121169 5 10 |
68806078 348002 307802 325017 24 26 |
68806078 987002 116089 122151 29 49 |
68880000 160000 115200 121203 5 10 |
69040000 160000 115200 121203 5 10 |
69200000 160000 115200 121203 5 10 |
69360000 160000 115200 121203 5 10 |
69520000 160000 115200 121203 5 10 |
69680000 160000 115200 121203 5 10 |
69840000 160000 115200 121203 5 10 |
69893080 1128002 266659 281501 37 88 |
69893080 2255002 1966070 2079803 25 77 |
69893080 2531002 2112468 2234698 1 56 |
70000000 160000 115200 121206 5 10 |
70160000 160000 115200 121206 5 10 |
70320000 160000 115200 121206 5 10 |
70480000 160000 115200 121206 5 10 |
70640000 160000 115200 121206 5 10 |
70800000 3200000 2304000 2437423 80 90 |
70800000 160000 115200 121214 5 10 |
70960000 160000 115200 121214 5 10 |
71120000 160000 115200 121214 5 10 |
71280000 160000 115200 121214 5 10 |
71440000 160000 115200 121214 5 10 |
71600000 160000 115200 121214 5 10 |
71760000 160000 115200 121214 5 10 |
71920000 160000 115200 121214 5 10 |
72080000 160000 115200 121214 5 10 |
72240000 160000 115200 121214 5 10 |
72400000 160000 115200 121214 5 10 |
72524082 74002 28416 29351 75 57 |
72524082 1369002 944728 999039 95 55 |
72524082 2658002 564240 596380 65 1 |
72524082 2880002 344142 363445 23 79 |
72524082 1667002 485209 512765 8 23 |
72524082 1833002 835588 883515 48 19 |
72560000 160000 115200 121166 5 10 |
72720000 160000 115200 121166 5 10 |
72880000 160000 115200 121166 5 10 |
73040000 160000 115200 121166 5 10 |
73200000 160000 115200 121166 5 10 |
73360000 160000 115200 121166 5 10 |
73520000 160000 115200 121166 5 10 |
73680000 160000 115200 121166 5 10 |
73840000 160000 115200 121166 5 10 |
74000000 5600000 3080000 3258634 80 90 |
74000000 280000 154000 162257 5 10 |
74280000 280000 154000 162257 5 10 |
74457084 790002 786572 831626 45 80 |
74560000 280000 154000 162219 5 10 |
74840000 280000 154000 162219 5 10 |
75120000 280000 154000 162219 5 10 |
75347086 41002 30969 32062 43 90 |
75347086 336002 63459 66448 34 22 |
75400000 280000 154000 162216 5 10 |
75680000 280000 154000 162216 5 10 |
75783088 1291002 1008318 1066323 31 64 |
75783088 2106002 1883656 1992568 43 77 |
75783088 1976002 1845195 1951881 84 39 |
75783088 2721002 1377766 1457252 78 89 |
75783088 281002 202534 213573 69 46 |
75960000 280000 154000 162225 5 10 |
76164090 1742002 1186725 1255082 94 22 |
76240000 280000 154000 162220 5 10 |
76520000 280000 154000 162220 5 10 |
76800000 280000 154000 162220 5 10 |
77080000 280000 154000 162220 5 10 |
77360000 280000 154000 162220 5 10 |
77640000 280000 154000 162220 5 10 |
77920000 280000 154000 162220 5 10 |
78006092 506002 369708 390537 96 47 |
78200000 280000 154000 162210 5 10 |
78480000 280000 154000 162210 5 10 |
78612094 1664002 1052871 1113424 69 16 |
78760000 280000 154000 162272 5 10 |
79040000 280000 154000 162272 5 10 |
79320000 280000 154000 162272 5 10 |
79600000 5600000 3080000 3258608 80 90 |
79600000 280000 154000 162274 5 10 |
79880000 280000 154000 162274 5 10 |
80160000 280000 154000 162274 5 10 |
80376096 2455002 239185 252431 18 83 |
80376096 2060002 1651940 1747402 83 73 |
80440000 280000 154000 162262 5 10 |
80720000 280000 154000 162262 5 10 |
81000000 280000 154000 162262 5 10 |
81280000 280000 154000 162262 5 10 |
81560000 280000 154000 162262 5 10 |
81840000 280000 154000 162262 5 10 |
82120000 280000 154000 162262 5 10 |
82400000 280000 154000 162262 5 10 |
82536098 1593002 899992 951670 49 86 |
82536098 2902002 1003444 1061128 19 69 |
82680000 280000 154000 162221 5 10 |
82960000 280000 154000 162221 5 10 |
83240000 280000 154000 162221 5 10 |
83520000 280000 154000 162221 5 10 |
83800000 280000 154000 162221 5 10 |
84080000 280000 154000 162221 5 10 |
84360000 280000 154000 162221 5 10 |
84640000 280000 154000 162221 5 10 |
84920000 280000 154000 162221 5 10 |
85200000 5600000 3080000 3258645 80 90 |
85200000 280000 154000 162274 5 10 |
85480000 280000 154000 162274 5 10 |
85538100 1686002 10299 10182 35 84 |
85538100 2046002 1842815 1949385 89 71 |
85760000 280000 154000 162218 5 10 |
86040000 280000 154000 162218 5 10 |
86320000 280000 154000 162218 5 10 |
86600000 280000 154000 162218 5 10 |
86880000 280000 154000 162218 5 10 |
87160000 280000 154000 162218 5 10 |
87440000 280000 154000 162218 5 10 |
87684102 950002 46646 48639 1 93 |
87684102 1675002 693268 732923 54 19 |
87720000 280000 154000 162265 5 10 |
88000000 280000 154000 162265 5 10 |
88280000 280000 154000 162265 5 10 |
88560000 280000 154000 162265 5 10 |
88840000 280000 154000 162265 5 10 |
89120000 280000 154000 162265 5 10 |
89400000 280000 154000 162265 5 10 |
89459104 768002 168011 177085 51 84 |
89459104 2652002 1318274 1394333 41 33 |
89680000 280000 154000 162216 5 10 |
89960000 280000 154000 162216 5 10 |
90240000 280000 154000 162216 5 10 |
90520000 280000 154000 162216 5 10 |
90800000 5600000 3080000 3258650 80 90 |
90800000 280000 154000 162225 5 10 |
91080000 280000 154000 162225 5 10 |
91360000 280000 154000 162225 5 10 |
91640000 280000 154000 162225 5 10 |
91920000 280000 154000 162225 5 10 |
92200000 280000 154000 162225 5 10 |
92211106 145002 129480 136278 81 5 |
92456108 1380002 1124915 1189676 23 1 |
92480000 280000 154000 162289 5 10 |
92760000 280000 154000 162289 5 10 |
93040000 280000 154000 162289 5 10 |
93320000 280000 154000 162289 5 10 |
93600000 280000 154000 162289 5 10 |
93880000 280000 154000 162289 5 10 |
93936110 2777002 1595969 1688155 57 47 |
94160000 280000 154000 162225 5 10 |
94440000 280000 154000 162225 5 10 |
94720000 280000 154000 162225 5 10 |
95000000 280000 154000 162225 5 10 |
95280000 280000 154000 162225 5 10 |
95560000 280000 154000 162225 5 10 |
95840000 280000 154000 162225 5 10 |
96120000 280000 154000 162225 5 10 |
96400000 5600000 3080000 3258652 80 90 |
96400000 280000 154000 162214 5 10 |
96680000 280000 154000 162214 5 10 |
96813112 1458002 1103572 1167136 50 37 |
96813112 1168002 718904 760013 50 63 |
96960000 280000 154000 162218 5 10 |
97240000 280000 154000 162218 5 10 |
97520000 280000 154000 162218 5 10 |
97800000 280000 154000 162218 5 10 |
98080000 280000 154000 162218 5 10 |
98081114 2107002 1959110 2072468 4 99 |
98081114 1347002 1195722 1264606 57 34 |
98081114 1987002 1254103 1326407 22 50 |
98360000 280000 154000 162222 5 10 |
98640000 280000 154000 162222 5 10 |
98920000 280000 154000 162222 5 10 |
99200000 280000 154000 162222 5 10 |
99480000 280000 154000 162222 5 10 |
99760000 280000 154000 162222 5 10 |
100040000 280000 154000 162222 5 10 |
100168116 1460002 1276815 1350410 35 45 |
100168116 1233002 811625 858155 36 38 |
100168116 1572002 549837 581157 46 69 |
100168116 2977002 805176 851368 31 11 |
100320000 280000 154000 162222 5 10 |
100600000 280000 154000 162222 5 10 |
100880000 280000 154000 162222 5 10 |
101160000 280000 154000 162222 5 10 |
101440000 280000 154000 162222 5 10 |
101720000 280000 154000 162222 5 10 |
102000000 3800000 2926000 3095629 80 90 |
102000000 190000 146300 154071 5 10 |
102190000 190000 146300 154071 5 10 |
102380000 190000 146300 154071 5 10 |
102570000 190000 146300 154071 5 10 |
102760000 190000 146300 154071 5 10 |
102950000 190000 146300 154071 5 10 |
103140000 190000 146300 154071 5 10 |
103245118 818002 82058 86133 54 97 |
103245118 1107002 77945 81784 71 16 |
103245118 697002 185308 195398 39 20 |
103245118 2107002 62104 65015 89 100 |
103330000 190000 146300 154069 5 10 |
103520000 190000 146300 154069 5 10 |
103710000 190000 146300 154069 5 10 |
103900000 190000 146300 154069 5 10 |
104090000 190000 146300 154069 5 10 |
104280000 190000 146300 154069 5 10 |
104470000 190000 146300 154069 5 10 |
104660000 190000 146300 154069 5 10 |
104850000 190000 146300 154069 5 10 |
105040000 190000 146300 154069 5 10 |
105230000 190000 146300 154069 5 10 |
105420000 190000 146300 154069 5 10 |
105452120 779002 231364 244089 79 75 |
105610000 190000 146300 154071 5 10 |
105800000 3800000 2926000 3095659 80 90 |
105800000 190000 146300 154122 5 10 |
105990000 190000 146300 154122 5 10 |
106180000 190000 146300 154122 5 10 |
106331122 443002 5641 5253 69 72 |
106331122 1665002 942364 996515 72 16 |
106331122 2739002 709436 749996 58 27 |
106370000 190000 146300 154067 5 10 |
106560000 190000 146300 154067 5 10 |
106750000 190000 146300 154067 5 10 |
106940000 190000 146300 154067 5 10 |
107130000 190000 146300 154067 5 10 |
107320000 190000 146300 154067 5 10 |
107510000 190000 146300 154067 5 10 |
107700000 190000 146300 154067 5 10 |
107890000 190000 146300 154067 5 10 |
108080000 190000 146300 154067 5 10 |
108270000 190000 146300 154067 5 10 |
108460000 190000 146300 154067 5 10 |
108650000 190000 146300 154067 5 10 |
108840000 190000 146300 154067 5 10 |
109030000 190000 146300 154067 5 10 |
109170124 2455002 1961694 2075195 75 86 |
109170124 2898002 85762 90049 53 26 |
109170124 2648002 691495 731060 8 24 |
109170124 267002 21664 22204 27 50 |
109170124 1450002 361880 382219 13 62 |
109220000 190000 146300 154125 5 10 |
109410000 190000 146300 154125 5 10 |
109600000 3800000 2926000 3095578 80 90 |
109600000 190000 146300 154124 5 10 |
109790000 190000 146300 154124 5 10 |
109980000 190000 146300 154124 5 10 |
110170000 190000 146300 154124 5 10 |
110360000 190000 146300 154124 5 10 |
110550000 190000 146300 154124 5 10 |
110720126 2706002 487696 515419 33 31 |
110740000 190000 146300 154071 5 10 |
110930000 190000 146300 154071 5 10 |
111120000 190000 146300 154071 5 10 |
111310000 190000 146300 154071 5 10 |
111500000 190000 146300 154071 5 10 |
111690000 190000 146300 154071 5 10 |
111880000 190000 146300 154071 5 10 |
112070000 190000 146300 154071 5 10 |
112260000 190000 146300 154071 5 10 |
112450000 190000 146300 154071 5 10 |
112640000 190000 146300 154071 5 10 |
112830000 190000 146300 154071 5 10 |
113020000 190000 146300 154071 5 10 |
113210000 190000 146300 154071 5 10 |
113400000 3800000 2926000 3095624 80 90 |
113400000 190000 146300 154076 5 10 |
113526128 1361002 1081105 1143354 37 24 |
113526128 2774002 2640963 2793983 86 84 |
113526128 565002 425383 449435 79 9 |
113526128 930002 281633 297330 43 94 |
113526128 1967002 288096 304103 55 51 |
113526128 1141002 1093302 1156229 73 36 |
113590000 190000 146300 154127 5 10 |
113780000 190000 146300 154127 5 10 |
113970000 190000 146300 154127 5 10 |
114160000 190000 146300 154127 5 10 |
114350000 190000 146300 154127 5 10 |
114540000 190000 146300 154127 5 10 |
114730000 190000 146300 154127 5 10 |
114767130 1422002 171812 181120 36 66 |
114920000 190000 146300 154080 5 10 |
115110000 190000 146300 154080 5 10 |
115300000 190000 146300 154080 5 10 |
115490000 190000 146300 154080 5 10 |
115680000 190000 146300 154080 5 10 |
115870000 190000 146300 154080 5 10 |
116060000 190000 146300 154080 5 10 |
116250000 190000 146300 154080 5 10 |
116289132 1438002 1068638 1130145 92 83 |
116440000 190000 146300 154120 5 10 |
116630000 190000 146300 154120 5 10 |
116820000 190000 146300 154120 5 10 |
117010000 190000 146300 154120 5 10 |
117200000 3800000 2926000 3095640 80 90 |
117200000 190000 146300 154122 5 10 |
117390000 190000 146300 154122 5 10 |
117580000 190000 146300 154122 5 10 |
117770000 190000 146300 154122 5 10 |
117827134 1934002 918431 971185 92 1 |
117960000 190000 146300 154067 5 10 |
118150000 190000 146300 154067 5 10 |
118340000 190000 146300 154067 5 10 |
118530000 190000 146300 154067 5 10 |
118720000 190000 146300 154067 5 10 |
118910000 190000 146300 154067 5 10 |
119100000 190000 146300 154067 5 10 |
119290000 190000 146300 154067 5 10 |
119480000 190000 146300 154067 5 10 |
119670000 190000 146300 154067 5 10 |
119860000 190000 146300 154067 5 10 |
119861136 646002 401618 424282 8 45 |
119861136 156002 51422 53690 93 26 |
120050000 190000 146300 154124 5 10 |
120240000 190000 146300 154124 5 10 |
120430000 190000 146300 154124 5 10 |
120620000 190000 146300 154124 5 10 |
120810000 190000 146300 154124 5 10 |
/unsupported/trunk/crunch/load/120_1/hpattern.dat |
---|
0,0 → 1,137 |
136 |
1000081 43000 24668 25390 |
1000252 90000 9846 9692 |
1000415 88000 4730 4290 |
1000578 69000 1978 1378 |
4483146 56000 30821 31902 |
4483299 95000 2375 1799 |
6589722 73000 2440 1867 |
8128465 79000 3360 2840 |
8290324 99000 5582 5190 |
8290508 95000 3268 2742 |
8290649 82000 2050 1455 |
9019208 44000 17226 17509 |
9019362 67000 11010 10934 |
12178420 71000 1962 1361 |
12502801 71000 1775 1163 |
12583376 87000 22852 23462 |
12583532 85000 7178 6879 |
12583737 86000 2150 1560 |
12583941 67000 2090 1497 |
14446422 71000 10026 9895 |
14527606 68000 4236 3766 |
14932727 88000 2200 1614 |
15985597 88000 2200 1613 |
16309389 78000 3885 3396 |
17929489 72000 2886 2338 |
18011034 76000 1900 1296 |
18253873 83000 2075 1481 |
19468581 100000 2531 1962 |
19468751 100000 2500 1931 |
19549816 76000 1900 1296 |
19630450 90000 4680 4237 |
19630616 87000 10826 10738 |
19630857 72000 5658 5272 |
20035654 76000 4440 3983 |
20197501 91000 4920 4490 |
20197668 100000 4608 4159 |
20197835 69000 3810 3316 |
22060859 80000 2000 1401 |
22627458 89000 2693 2135 |
22627625 61000 1525 899 |
23113818 92000 2300 1719 |
23761532 67000 1675 1058 |
49000040 96000 49280 51422 |
49000208 75000 14750 14896 |
55075318 99000 8532 8312 |
55075483 70000 6779 6459 |
56776117 99000 39534 41127 |
56776287 47000 4216 3745 |
56776453 90000 2250 1666 |
64795164 99000 12147 12140 |
64795332 82000 8262 8025 |
64795497 82000 2961 2418 |
71437416 68000 5175 4760 |
71437573 66000 5284 4876 |
72814272 99000 5372 4968 |
72814559 90000 3320 2798 |
72814724 85000 2125 1534 |
74000039 78000 6968 6659 |
74000182 71000 5344 4941 |
76783641 82000 4878 4447 |
76783809 88000 2200 1613 |
76945487 73000 4987 4561 |
79699818 60000 1500 872 |
79751258 66000 1650 1031 |
79751418 70000 4093 3615 |
80104634 73000 2655 2094 |
80318239 70000 6018 5654 |
80833353 78000 4576 4127 |
82858607 82000 3982 3499 |
82858755 75000 1875 1269 |
83425728 87000 3058 2520 |
83425935 68000 1700 1084 |
83912035 78000 1950 1349 |
84560013 74000 1850 1243 |
85097318 93000 2325 1746 |
85421481 80000 3236 2709 |
85988355 98000 4637 4190 |
85988562 78000 3220 2692 |
86017733 98000 2450 1877 |
86017880 85000 2125 1534 |
87151424 75000 3564 3056 |
88933839 68000 2509 1940 |
88934080 89000 2225 1640 |
89500800 84000 2627 2065 |
90230127 93000 2325 1745 |
90472780 90000 2637 2074 |
90472975 86000 2150 1560 |
90554060 76000 1900 1296 |
91901533 87000 2175 1586 |
92306606 89000 2784 2231 |
92306959 73000 1825 1216 |
92630418 84000 2100 1507 |
92903116 69000 1725 1111 |
93226690 94000 2790 2237 |
93926444 73000 3916 3427 |
93955802 40000 1000 343 |
94441907 86000 2488 1918 |
96143345 66000 2986 2443 |
96304847 99000 2475 1904 |
96710173 86000 2150 1561 |
97195858 97000 2425 1851 |
97439161 92000 2300 1719 |
97762836 92000 2300 1719 |
97763243 71000 2191 1603 |
98220054 73000 1825 1216 |
98492233 96000 2400 1825 |
98948616 82000 2050 1455 |
99434494 97000 2425 1851 |
99515691 76000 2070 1475 |
99839614 86000 3148 2616 |
99839785 91000 2275 1692 |
100840751 78000 1950 1348 |
101407970 90000 2250 1666 |
101489499 91000 2610 2047 |
101489642 69000 1725 1110 |
106268284 100000 2500 1931 |
106805664 82000 2688 2129 |
107078723 92000 2300 1719 |
107158817 59000 1599 977 |
107210837 78000 2281 1698 |
107291765 75000 2130 1539 |
108698025 71000 2044 1448 |
108860692 67000 2159 1570 |
111937866 78000 1950 1348 |
113366926 72000 1906 1301 |
113447731 73000 2251 1666 |
113529103 74000 2128 1536 |
114287808 77000 2239 1654 |
114368339 93000 2325 1746 |
114449100 88000 2200 1613 |
114530807 88000 2200 1613 |
118255950 80000 2139 1549 |
119198984 80000 2125 1533 |
119360788 92000 2300 1719 |
119523155 84000 2435 1862 |
120524902 89000 2302 1720 |
/unsupported/trunk/crunch/load/initfile.c |
---|
0,0 → 1,91 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: initfile.c,v 1.1 2004-07-05 14:18:04 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:18:04 $ |
------------ |
**/ |
/* |
* Copyright (C) 2000 Paolo Gai and Gabriele Bolognini |
* |
* 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 |
* |
*/ |
#include "kernel/kern.h" |
#include "modules/rr.h" |
#include "modules/dummy.h" |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
void read_myfile(void); |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
/* If you need to interact with the DOS Filesystem and you use |
the X eXtender, this is the better place where you can use |
the DOS_fXXX functions... |
WARNING: You can call these functions only when you are in |
real mode!!! |
The system is in real mode: |
- into __kernel_register_levels__() |
- into sys_atrunlevel functions posted with RUNLEVEL_AFTER_EXIT |
*/ |
read_myfile(); |
return TICK; |
} |
TASK __init__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
__call_main__(mb); |
return (void *)0; |
} |
/unsupported/trunk/crunch/load/length.dat |
---|
0,0 → 1,0 |
60 |
/unsupported/trunk/crunch/load/crunch.dat |
---|
0,0 → 1,709 |
708 |
500063 0 36000 19896 20209 0 0 |
1000000 1 3000000 1290000 1375649 80 90 |
1000000 1 100000 43000 45150 3 6 |
1000000 1 1500002 1481283 1579713 18 30 |
1000000 1 2921002 1208851 1289115 80 65 |
1000000 1 2358002 1004771 1071328 23 24 |
1100000 1 100000 43000 45147 3 6 |
1200000 1 100000 43000 45147 3 6 |
1300000 1 100000 43000 45147 3 6 |
1400000 1 100000 43000 45147 3 6 |
1500000 1 100000 43000 45147 3 6 |
1600000 1 100000 43000 45147 3 6 |
1700000 1 100000 43000 45147 3 6 |
1800000 1 100000 43000 45147 3 6 |
1900000 1 100000 43000 45147 3 6 |
2000000 1 100000 43000 45147 3 6 |
2100000 1 100000 43000 45147 3 6 |
2200000 1 100000 43000 45147 3 6 |
2300000 1 100000 43000 45147 3 6 |
2400000 1 100000 43000 45147 3 6 |
2500000 1 100000 43000 45147 3 6 |
2600000 1 100000 43000 45147 3 6 |
2700000 1 100000 43000 45147 3 6 |
2800000 1 100000 43000 45147 3 6 |
2900000 1 100000 43000 45147 3 6 |
3000000 1 100000 43000 45147 3 6 |
3100000 1 100000 43000 45147 3 6 |
3200000 1 100000 43000 45147 3 6 |
3300000 1 100000 43000 45147 3 6 |
3400000 1 100000 43000 45147 3 6 |
3458002 1 943002 438430 467037 13 29 |
3458002 1 319002 66758 70519 79 40 |
3458002 1 1971002 1811919 1932461 58 100 |
3500000 1 100000 43000 45162 3 6 |
3600000 1 100000 43000 45162 3 6 |
3700000 1 100000 43000 45162 3 6 |
3800000 1 100000 43000 45162 3 6 |
3900000 1 100000 43000 45162 3 6 |
4000000 1 3000000 1290000 1375618 80 90 |
4000000 1 100000 43000 45162 3 6 |
4100000 1 100000 43000 45162 3 6 |
4200000 1 100000 43000 45162 3 6 |
4300000 1 100000 43000 45162 3 6 |
4400000 1 100000 43000 45162 3 6 |
4500000 1 100000 43000 45162 3 6 |
4600000 1 100000 43000 45162 3 6 |
4700000 1 100000 43000 45162 3 6 |
4800000 1 100000 43000 45162 3 6 |
4900000 1 100000 43000 45162 3 6 |
5000000 1 100000 43000 45162 3 6 |
5100000 1 100000 43000 45162 3 6 |
5200000 1 100000 43000 45162 3 6 |
5300000 1 100000 43000 45162 3 6 |
5400000 1 100000 43000 45162 3 6 |
5500000 1 100000 43000 45162 3 6 |
5529004 1 280002 51947 54714 61 99 |
5600000 1 100000 43000 45150 3 6 |
5700000 1 100000 43000 45150 3 6 |
5800000 1 100000 43000 45150 3 6 |
5900000 1 100000 43000 45150 3 6 |
5909006 1 783002 701100 747318 23 94 |
5909006 1 221002 28449 29636 42 93 |
5909006 1 2986002 135321 143613 62 5 |
5909006 1 2192002 1202931 1282748 85 33 |
6000000 1 100000 43000 45164 3 6 |
6100000 1 100000 43000 45164 3 6 |
6200000 1 100000 43000 45164 3 6 |
6300000 1 100000 43000 45164 3 6 |
6400000 1 100000 43000 45164 3 6 |
6500000 1 100000 43000 45164 3 6 |
6600000 1 100000 43000 45164 3 6 |
6700000 1 100000 43000 45164 3 6 |
6800000 1 100000 43000 45164 3 6 |
6900000 1 100000 43000 45164 3 6 |
7000000 1 3000000 1290000 1375645 80 90 |
7000000 1 100000 43000 45151 3 6 |
7100000 1 100000 43000 45151 3 6 |
7200000 1 100000 43000 45151 3 6 |
7300000 1 100000 43000 45151 3 6 |
7400000 1 100000 43000 45151 3 6 |
7500000 1 100000 43000 45151 3 6 |
7600000 1 100000 43000 45151 3 6 |
7700000 1 100000 43000 45151 3 6 |
7800000 1 100000 43000 45151 3 6 |
7900000 1 100000 43000 45151 3 6 |
8000000 1 100000 43000 45151 3 6 |
8100000 1 100000 43000 45151 3 6 |
8200000 1 100000 43000 45151 3 6 |
8201008 1 2675002 2422758 2584205 26 11 |
8201008 1 1692002 1000061 1066298 76 36 |
8300000 1 100000 43000 45165 3 6 |
8400000 1 100000 43000 45165 3 6 |
8500000 1 100000 43000 45165 3 6 |
8600000 1 100000 43000 45165 3 6 |
8700000 1 100000 43000 45165 3 6 |
8800000 1 100000 43000 45165 3 6 |
8900000 1 100000 43000 45165 3 6 |
9000000 1 100000 43000 45165 3 6 |
9100000 1 100000 43000 45165 3 6 |
9200000 1 100000 43000 45165 3 6 |
9300000 1 100000 43000 45165 3 6 |
9400000 1 100000 43000 45165 3 6 |
9500000 1 100000 43000 45165 3 6 |
9600000 1 100000 43000 45165 3 6 |
9700000 1 100000 43000 45165 3 6 |
9800000 1 100000 43000 45165 3 6 |
9900000 1 100000 43000 45165 3 6 |
9993010 1 1747002 1102547 1175651 42 24 |
9993010 1 1500002 259938 276646 35 10 |
9993010 1 2679002 778228 829611 16 25 |
10000000 1 3000000 1290000 1375626 80 90 |
10000000 1 100000 43000 45149 3 6 |
10100000 1 100000 43000 45149 3 6 |
10200000 1 100000 43000 45149 3 6 |
10300000 1 100000 43000 45149 3 6 |
10400000 1 100000 43000 45149 3 6 |
10500000 1 100000 43000 45149 3 6 |
10600000 1 100000 43000 45149 3 6 |
10700000 1 100000 43000 45149 3 6 |
10800000 1 100000 43000 45149 3 6 |
10900000 1 100000 43000 45149 3 6 |
11000000 1 100000 43000 45149 3 6 |
11100000 1 100000 43000 45149 3 6 |
11200000 1 100000 43000 45149 3 6 |
11300000 1 100000 43000 45149 3 6 |
11400000 1 100000 43000 45149 3 6 |
11500000 1 100000 43000 45149 3 6 |
11600000 1 100000 43000 45149 3 6 |
11700000 1 100000 43000 45149 3 6 |
11800000 1 100000 43000 45149 3 6 |
11900000 1 100000 43000 45149 3 6 |
12000000 1 100000 43000 45149 3 6 |
12100000 1 100000 43000 45149 3 6 |
12200000 1 100000 43000 45149 3 6 |
12300000 1 100000 43000 45149 3 6 |
12400000 1 100000 43000 45149 3 6 |
12500000 1 100000 43000 45149 3 6 |
12600000 1 100000 43000 45149 3 6 |
12700000 1 100000 43000 45149 3 6 |
12772012 1 1857002 1424469 1519060 86 68 |
12800000 1 100000 43000 45170 3 6 |
12900000 1 100000 43000 45170 3 6 |
13000000 1 3000000 1290000 1375641 80 90 |
13000000 1 100000 43000 45148 3 6 |
13100000 1 100000 43000 45148 3 6 |
13200000 1 100000 43000 45148 3 6 |
13300000 1 100000 43000 45148 3 6 |
13400000 1 100000 43000 45148 3 6 |
13500000 1 100000 43000 45148 3 6 |
13600000 1 100000 43000 45148 3 6 |
13700000 1 100000 43000 45148 3 6 |
13800000 1 100000 43000 45148 3 6 |
13900000 1 100000 43000 45148 3 6 |
14000000 1 100000 43000 45148 3 6 |
14100000 1 100000 43000 45148 3 6 |
14200000 1 100000 43000 45148 3 6 |
14300000 1 100000 43000 45148 3 6 |
14400000 1 100000 43000 45148 3 6 |
14500000 1 100000 43000 45148 3 6 |
14600000 1 100000 43000 45148 3 6 |
14700000 1 100000 43000 45148 3 6 |
14729014 1 1549002 794849 847343 90 5 |
14729014 1 2566002 692657 738320 99 77 |
14729014 1 1625002 1528924 1630583 32 67 |
14800000 1 100000 43000 45150 3 6 |
14900000 1 100000 43000 45150 3 6 |
15000000 1 100000 43000 45150 3 6 |
15100000 1 100000 43000 45150 3 6 |
15200000 1 100000 43000 45150 3 6 |
15300000 1 100000 43000 45150 3 6 |
15400000 1 100000 43000 45150 3 6 |
15500000 1 100000 43000 45150 3 6 |
15600000 1 100000 43000 45150 3 6 |
15700000 1 100000 43000 45150 3 6 |
15800000 1 100000 43000 45150 3 6 |
15900000 1 100000 43000 45150 3 6 |
16000000 1 3000000 1290000 1375627 80 90 |
16000000 1 100000 43000 45161 3 6 |
16100000 1 100000 43000 45161 3 6 |
16200000 1 100000 43000 45161 3 6 |
16300000 1 100000 43000 45161 3 6 |
16400000 1 100000 43000 45161 3 6 |
16454016 1 867002 65308 68968 66 27 |
16500000 1 100000 43000 45159 3 6 |
16600000 1 100000 43000 45159 3 6 |
16700000 1 100000 43000 45159 3 6 |
16800000 1 100000 43000 45159 3 6 |
16900000 1 100000 43000 45159 3 6 |
17000000 1 100000 43000 45159 3 6 |
17100000 1 100000 43000 45159 3 6 |
17200000 1 100000 43000 45159 3 6 |
17300000 1 100000 43000 45159 3 6 |
17400000 1 100000 43000 45159 3 6 |
17421018 1 2428002 993501 1059309 19 4 |
17500000 1 100000 43000 45150 3 6 |
17600000 1 100000 43000 45150 3 6 |
17700000 1 100000 43000 45150 3 6 |
17800000 1 100000 43000 45150 3 6 |
17900000 1 100000 43000 45150 3 6 |
18000000 1 100000 43000 45150 3 6 |
18100000 1 100000 43000 45150 3 6 |
18200000 1 100000 43000 45150 3 6 |
18300000 1 100000 43000 45150 3 6 |
18400000 1 100000 43000 45150 3 6 |
18500000 1 100000 43000 45150 3 6 |
18600000 1 100000 43000 45150 3 6 |
18700000 1 100000 43000 45150 3 6 |
18800000 1 100000 43000 45150 3 6 |
18900000 1 100000 43000 45150 3 6 |
19000000 1 3000000 1290000 1375649 80 90 |
19000000 1 100000 43000 45151 3 6 |
19100000 1 100000 43000 45151 3 6 |
19200000 1 100000 43000 45151 3 6 |
19300000 1 100000 43000 45151 3 6 |
19400000 1 100000 43000 45151 3 6 |
19500000 1 100000 43000 45151 3 6 |
19600000 1 100000 43000 45151 3 6 |
19700000 1 100000 43000 45151 3 6 |
19800000 1 100000 43000 45151 3 6 |
19900000 1 100000 43000 45151 3 6 |
19949020 1 1658002 611967 652213 45 83 |
20000000 1 100000 43000 45149 3 6 |
20100000 1 100000 43000 45149 3 6 |
20200000 1 100000 43000 45149 3 6 |
20300000 1 100000 43000 45149 3 6 |
20400000 1 100000 43000 45149 3 6 |
20500000 1 100000 43000 45149 3 6 |
20600000 1 100000 43000 45149 3 6 |
20700000 1 100000 43000 45149 3 6 |
20800000 1 100000 43000 45149 3 6 |
20900000 1 100000 43000 45149 3 6 |
21000000 1 100000 43000 45149 3 6 |
21100000 1 100000 43000 45149 3 6 |
21200000 1 100000 43000 45149 3 6 |
21300000 1 100000 43000 45149 3 6 |
21400000 1 100000 43000 45149 3 6 |
21500000 1 100000 43000 45149 3 6 |
21600000 1 100000 43000 45149 3 6 |
21700000 1 100000 43000 45149 3 6 |
21707022 1 2180002 406353 432805 65 32 |
21707022 1 1721002 1085102 1157051 34 19 |
21707022 1 1813002 117495 124617 24 19 |
21707022 1 230002 206519 219637 92 41 |
21707022 1 301002 153832 163425 62 44 |
21707022 1 869002 617579 658216 35 26 |
21707022 1 2803002 275935 293732 9 5 |
21800000 1 100000 43000 45148 3 6 |
21900000 1 100000 43000 45148 3 6 |
22000000 1 3000000 1290000 1375583 80 90 |
22000000 1 100000 43000 45168 3 6 |
22100000 1 100000 43000 45168 3 6 |
22200000 1 100000 43000 45168 3 6 |
22300000 1 100000 43000 45168 3 6 |
22400000 1 100000 43000 45168 3 6 |
22500000 1 100000 43000 45168 3 6 |
22600000 1 100000 43000 45168 3 6 |
22700000 1 100000 43000 45168 3 6 |
22800000 1 100000 43000 45168 3 6 |
22900000 1 100000 43000 45168 3 6 |
23000000 1 100000 43000 45168 3 6 |
23100000 1 100000 43000 45168 3 6 |
23200000 1 100000 43000 45168 3 6 |
23300000 1 100000 43000 45168 3 6 |
23400000 1 100000 43000 45168 3 6 |
23500000 1 100000 43000 45168 3 6 |
23600000 1 100000 43000 45168 3 6 |
23700000 1 100000 43000 45168 3 6 |
23800000 1 100000 43000 45168 3 6 |
23900000 1 100000 43000 45168 3 6 |
24000000 1 100000 43000 45168 3 6 |
24100000 1 100000 43000 45168 3 6 |
24200000 1 100000 43000 45168 3 6 |
24300000 1 100000 43000 45168 3 6 |
24400000 1 100000 43000 45168 3 6 |
24500000 1 100000 43000 45168 3 6 |
24600000 1 100000 43000 45168 3 6 |
24610024 1 66002 12309 12414 33 57 |
24610024 1 1796002 1780401 1898852 75 3 |
24610024 1 2972002 614719 655172 15 35 |
24610024 1 739002 421644 449125 29 75 |
24700000 1 100000 43000 45165 3 6 |
24800000 1 100000 43000 45165 3 6 |
24900000 1 100000 43000 45165 3 6 |
25000000 1 3000000 1290000 1375654 80 90 |
25000000 1 100000 43000 45164 3 6 |
25100000 1 100000 43000 45164 3 6 |
25200000 1 100000 43000 45164 3 6 |
25300000 1 100000 43000 45164 3 6 |
25400000 1 100000 43000 45164 3 6 |
25449026 1 811002 124146 131715 76 89 |
25449026 1 2980002 2740975 2923733 18 37 |
25449026 1 2602002 2283400 2435523 32 76 |
25449026 1 2446002 1728002 1842967 37 36 |
25500000 1 100000 43000 45151 3 6 |
25600000 1 100000 43000 45151 3 6 |
25700000 1 100000 43000 45151 3 6 |
25800000 1 100000 43000 45151 3 6 |
25900000 1 100000 43000 45151 3 6 |
26000000 1 100000 43000 45151 3 6 |
26100000 1 100000 43000 45151 3 6 |
26200000 1 100000 43000 45151 3 6 |
26300000 1 100000 43000 45151 3 6 |
26400000 1 100000 43000 45151 3 6 |
26500000 1 100000 43000 45151 3 6 |
26600000 1 100000 43000 45151 3 6 |
26700000 1 100000 43000 45151 3 6 |
26800000 1 100000 43000 45151 3 6 |
26900000 1 100000 43000 45151 3 6 |
27000000 1 100000 43000 45151 3 6 |
27100000 1 100000 43000 45151 3 6 |
27200000 1 100000 43000 45151 3 6 |
27300000 1 100000 43000 45151 3 6 |
27400000 1 100000 43000 45151 3 6 |
27500000 1 100000 43000 45151 3 6 |
27600000 1 100000 43000 45151 3 6 |
27700000 1 100000 43000 45151 3 6 |
27800000 1 100000 43000 45151 3 6 |
27900000 1 100000 43000 45151 3 6 |
27995028 1 1692002 1269001 1353185 59 87 |
27995028 1 675002 560238 597010 58 28 |
28000000 1 3000000 1290000 1375636 80 90 |
28000000 1 100000 43000 45149 3 6 |
28100000 1 100000 43000 45149 3 6 |
28200000 1 100000 43000 45149 3 6 |
28300000 1 100000 43000 45149 3 6 |
28400000 1 100000 43000 45149 3 6 |
28500000 1 100000 43000 45149 3 6 |
28600000 1 100000 43000 45149 3 6 |
28700000 1 100000 43000 45149 3 6 |
28770030 1 1445002 533591 568568 42 94 |
28770030 1 1684002 283701 301893 70 39 |
28770030 1 10002 7440 7219 60 38 |
28800000 1 100000 43000 45162 3 6 |
28880032 1 857002 416099 443225 36 0 |
28900000 1 100000 43000 45164 3 6 |
29000000 1 100000 43000 45164 3 6 |
29100000 1 100000 43000 45164 3 6 |
29200000 1 100000 43000 45164 3 6 |
29300000 1 100000 43000 45164 3 6 |
29400000 1 100000 43000 45164 3 6 |
29500000 1 100000 43000 45164 3 6 |
29600000 1 100000 43000 45164 3 6 |
29700000 1 100000 43000 45164 3 6 |
29800000 1 100000 43000 45164 3 6 |
29837034 1 203002 75765 80101 22 96 |
29900000 1 100000 43000 45165 3 6 |
30000000 1 100000 43000 45165 3 6 |
30100000 1 100000 43000 45165 3 6 |
30140036 1 1520002 504059 537075 68 8 |
30140036 1 1742002 169640 180299 28 0 |
30140036 1 2164002 583449 621753 20 20 |
30200000 1 100000 43000 45160 3 6 |
30300000 1 100000 43000 45160 3 6 |
30400000 1 100000 43000 45160 3 6 |
30500000 1 100000 43000 45160 3 6 |
30600000 1 100000 43000 45160 3 6 |
30700000 1 100000 43000 45160 3 6 |
30800000 1 100000 43000 45160 3 6 |
30900000 1 100000 43000 45160 3 6 |
31000000 1 3000000 1290000 1375655 80 90 |
31000000 1 100000 43000 45146 3 6 |
31100000 1 100000 43000 45146 3 6 |
31200000 1 100000 43000 45146 3 6 |
31300000 1 100000 43000 45146 3 6 |
31400000 1 100000 43000 45146 3 6 |
31500000 1 100000 43000 45146 3 6 |
31600000 1 100000 43000 45146 3 6 |
31700000 1 100000 43000 45146 3 6 |
31800000 1 100000 43000 45146 3 6 |
31900000 1 100000 43000 45146 3 6 |
32000000 1 100000 43000 45146 3 6 |
32100000 1 100000 43000 45146 3 6 |
32200000 1 100000 43000 45146 3 6 |
32300000 1 100000 43000 45146 3 6 |
32400000 1 100000 43000 45146 3 6 |
32404038 1 1406002 1078611 1150106 82 76 |
32500000 1 100000 43000 45147 3 6 |
32600000 1 100000 43000 45147 3 6 |
32700000 1 100000 43000 45147 3 6 |
32800000 1 100000 43000 45147 3 6 |
32900000 1 100000 43000 45147 3 6 |
33000000 1 100000 43000 45147 3 6 |
33100000 1 100000 43000 45147 3 6 |
33200000 1 100000 43000 45147 3 6 |
33300000 1 100000 43000 45147 3 6 |
33400000 1 100000 43000 45147 3 6 |
33500000 1 100000 43000 45147 3 6 |
33600000 1 100000 43000 45147 3 6 |
33700000 1 100000 43000 45147 3 6 |
33800000 1 100000 43000 45147 3 6 |
33900000 1 100000 43000 45147 3 6 |
33910040 1 2480002 371141 395283 70 40 |
34000000 1 3000000 1290000 1375595 80 90 |
34000000 1 100000 43000 45170 3 6 |
34100000 1 100000 43000 45170 3 6 |
34200000 1 100000 43000 45170 3 6 |
34300000 1 100000 43000 45170 3 6 |
34400000 1 100000 43000 45170 3 6 |
34500000 1 100000 43000 45170 3 6 |
34600000 1 100000 43000 45170 3 6 |
34700000 1 100000 43000 45170 3 6 |
34800000 1 100000 43000 45170 3 6 |
34900000 1 100000 43000 45170 3 6 |
35000000 1 100000 43000 45170 3 6 |
35100000 1 100000 43000 45170 3 6 |
35200000 1 100000 43000 45170 3 6 |
35300000 1 100000 43000 45170 3 6 |
35400000 1 100000 43000 45170 3 6 |
35500000 1 100000 43000 45170 3 6 |
35600000 1 100000 43000 45170 3 6 |
35700000 1 100000 43000 45170 3 6 |
35800000 1 100000 43000 45170 3 6 |
35900000 1 100000 43000 45170 3 6 |
36000000 1 100000 43000 45170 3 6 |
36100000 1 100000 43000 45170 3 6 |
36200000 1 100000 43000 45170 3 6 |
36300000 1 100000 43000 45170 3 6 |
36400000 1 100000 43000 45170 3 6 |
36490042 1 2661002 264134 281112 3 95 |
36500000 1 100000 43000 45166 3 6 |
36600000 1 100000 43000 45166 3 6 |
36700000 1 100000 43000 45166 3 6 |
36800000 1 100000 43000 45166 3 6 |
36900000 1 100000 43000 45166 3 6 |
37000000 1 3000000 1290000 1375620 80 90 |
37000000 1 100000 43000 45146 3 6 |
37100000 1 100000 43000 45146 3 6 |
37200000 1 100000 43000 45146 3 6 |
37300000 1 100000 43000 45146 3 6 |
37400000 1 100000 43000 45146 3 6 |
37500000 1 100000 43000 45146 3 6 |
37600000 1 100000 43000 45146 3 6 |
37700000 1 100000 43000 45146 3 6 |
37800000 1 100000 43000 45146 3 6 |
37900000 1 100000 43000 45146 3 6 |
38000000 1 100000 43000 45146 3 6 |
38100000 1 100000 43000 45146 3 6 |
38200000 1 100000 43000 45146 3 6 |
38300000 1 100000 43000 45146 3 6 |
38400000 1 100000 43000 45146 3 6 |
38500000 1 100000 43000 45146 3 6 |
38600000 1 100000 43000 45146 3 6 |
38700000 1 100000 43000 45146 3 6 |
38800000 1 100000 43000 45146 3 6 |
38900000 1 100000 43000 45146 3 6 |
39000000 1 100000 43000 45146 3 6 |
39100000 1 100000 43000 45146 3 6 |
39200000 1 100000 43000 45146 3 6 |
39251044 1 545002 504056 537082 20 31 |
39300000 1 100000 43000 45144 3 6 |
39400000 1 100000 43000 45144 3 6 |
39500000 1 100000 43000 45144 3 6 |
39600000 1 100000 43000 45144 3 6 |
39700000 1 100000 43000 45144 3 6 |
39800000 1 100000 43000 45144 3 6 |
39896046 1 564002 376511 401022 98 80 |
39896046 1 817002 150939 160339 78 43 |
39896046 1 353002 99123 105013 73 15 |
39896046 1 2506002 714365 761476 99 84 |
39900000 1 100000 43000 45149 3 6 |
40000000 1 3000000 1290000 1375660 80 90 |
40000000 1 100000 43000 45147 3 6 |
40100000 1 100000 43000 45147 3 6 |
40200000 1 100000 43000 45147 3 6 |
40300000 1 100000 43000 45147 3 6 |
40400000 1 100000 43000 45147 3 6 |
40500000 1 100000 43000 45147 3 6 |
40600000 1 100000 43000 45147 3 6 |
40700000 1 100000 43000 45147 3 6 |
40800000 1 100000 43000 45147 3 6 |
40900000 1 100000 43000 45147 3 6 |
41000000 1 100000 43000 45147 3 6 |
41100000 1 100000 43000 45147 3 6 |
41200000 1 100000 43000 45147 3 6 |
41300000 1 100000 43000 45147 3 6 |
41400000 1 100000 43000 45147 3 6 |
41500000 1 100000 43000 45147 3 6 |
41600000 1 100000 43000 45147 3 6 |
41700000 1 100000 43000 45147 3 6 |
41800000 1 100000 43000 45147 3 6 |
41900000 1 100000 43000 45147 3 6 |
42000000 1 100000 43000 45147 3 6 |
42100000 1 100000 43000 45147 3 6 |
42200000 1 100000 43000 45147 3 6 |
42300000 1 100000 43000 45147 3 6 |
42400000 1 100000 43000 45147 3 6 |
42500000 1 100000 43000 45147 3 6 |
42502048 1 130002 71538 75588 72 0 |
42502048 1 665002 347830 370323 38 52 |
42502048 1 1046002 3114 2602 68 72 |
42600000 1 100000 43000 45153 3 6 |
42700000 1 100000 43000 45153 3 6 |
42800000 1 100000 43000 45153 3 6 |
42900000 1 100000 43000 45153 3 6 |
43000000 1 3000000 1290000 1375609 80 90 |
43000000 1 100000 43000 45149 3 6 |
43100000 1 100000 43000 45149 3 6 |
43200000 1 100000 43000 45149 3 6 |
43300000 1 100000 43000 45149 3 6 |
43400000 1 100000 43000 45149 3 6 |
43500000 1 100000 43000 45149 3 6 |
43600000 1 100000 43000 45149 3 6 |
43648050 1 2643002 1225965 1307299 91 53 |
43700000 1 100000 43000 45165 3 6 |
43800000 1 100000 43000 45165 3 6 |
43900000 1 100000 43000 45165 3 6 |
44000000 1 100000 43000 45165 3 6 |
44100000 1 100000 43000 45165 3 6 |
44200000 1 100000 43000 45165 3 6 |
44300000 1 100000 43000 45165 3 6 |
44400000 1 100000 43000 45165 3 6 |
44500000 1 100000 43000 45165 3 6 |
44600000 1 100000 43000 45165 3 6 |
44700000 1 100000 43000 45165 3 6 |
44800000 1 100000 43000 45165 3 6 |
44900000 1 100000 43000 45165 3 6 |
45000000 1 100000 43000 45165 3 6 |
45100000 1 100000 43000 45165 3 6 |
45200000 1 100000 43000 45165 3 6 |
45300000 1 100000 43000 45165 3 6 |
45400000 1 100000 43000 45165 3 6 |
45500000 1 100000 43000 45165 3 6 |
45600000 1 100000 43000 45165 3 6 |
45700000 1 100000 43000 45165 3 6 |
45800000 1 100000 43000 45165 3 6 |
45900000 1 100000 43000 45165 3 6 |
46000000 1 3000000 1290000 1375638 80 90 |
46000000 1 100000 43000 45149 3 6 |
46100000 1 100000 43000 45149 3 6 |
46200000 1 100000 43000 45149 3 6 |
46300000 1 100000 43000 45149 3 6 |
46391052 1 17002 13374 13545 80 45 |
46391052 1 817002 664620 708390 65 14 |
46391052 1 2519002 497664 530232 47 65 |
46391052 1 1878002 1004593 1071143 95 42 |
46391052 1 286002 119700 127014 87 53 |
46400000 1 100000 43000 45163 3 6 |
46500000 1 100000 43000 45163 3 6 |
46600000 1 100000 43000 45163 3 6 |
46700000 1 100000 43000 45163 3 6 |
46777054 1 1430002 558646 595345 96 27 |
46777054 1 510002 266242 283355 49 2 |
46777054 1 1797002 1135184 1210461 97 22 |
46800000 1 100000 43000 45145 3 6 |
46900000 1 100000 43000 45145 3 6 |
47000000 1 100000 43000 45145 3 6 |
47100000 1 100000 43000 45145 3 6 |
47200000 1 100000 43000 45145 3 6 |
47300000 1 100000 43000 45145 3 6 |
47400000 1 100000 43000 45145 3 6 |
47500000 1 100000 43000 45145 3 6 |
47600000 1 100000 43000 45145 3 6 |
47700000 1 100000 43000 45145 3 6 |
47800000 1 100000 43000 45145 3 6 |
47900000 1 100000 43000 45145 3 6 |
48000000 1 100000 43000 45145 3 6 |
48100000 1 100000 43000 45145 3 6 |
48200000 1 100000 43000 45145 3 6 |
48300000 1 100000 43000 45145 3 6 |
48400000 1 100000 43000 45145 3 6 |
48500000 1 100000 43000 45145 3 6 |
48600000 1 100000 43000 45145 3 6 |
48674056 1 463002 194466 206717 24 90 |
48674056 1 535002 252525 268647 85 11 |
48700000 1 100000 43000 45167 3 6 |
48800000 1 100000 43000 45167 3 6 |
48900000 1 100000 43000 45167 3 6 |
49000000 1 3000000 1290000 1375586 80 90 |
49000000 1 100000 43000 45165 3 6 |
49100000 1 100000 43000 45165 3 6 |
49200000 1 100000 43000 45165 3 6 |
49300000 1 100000 43000 45165 3 6 |
49309058 1 2898002 1890030 2015829 86 82 |
49309058 1 368002 109137 115699 97 81 |
49400000 1 100000 43000 45149 3 6 |
49500000 1 100000 43000 45149 3 6 |
49600000 1 100000 43000 45149 3 6 |
49700000 1 100000 43000 45149 3 6 |
49777060 1 910002 378373 402977 33 11 |
49800000 1 100000 43000 45149 3 6 |
49900000 1 100000 43000 45149 3 6 |
50000000 1 100000 43000 45149 3 6 |
50100000 1 100000 43000 45149 3 6 |
50200000 1 100000 43000 45149 3 6 |
50300000 1 100000 43000 45149 3 6 |
50400000 1 100000 43000 45149 3 6 |
50500000 1 100000 43000 45149 3 6 |
50600000 1 100000 43000 45149 3 6 |
50700000 1 100000 43000 45149 3 6 |
50787062 1 860002 173620 184472 61 41 |
50787062 1 504002 251581 267714 8 69 |
50800000 1 100000 43000 45149 3 6 |
50900000 1 100000 43000 45149 3 6 |
51000000 1 100000 43000 45149 3 6 |
51100000 1 100000 43000 45149 3 6 |
51200000 1 100000 43000 45149 3 6 |
51300000 1 100000 43000 45149 3 6 |
51391064 1 2968002 292892 311795 48 40 |
51400000 1 100000 43000 45148 3 6 |
51500000 1 100000 43000 45148 3 6 |
51600000 1 100000 43000 45148 3 6 |
51700000 1 100000 43000 45148 3 6 |
51800000 1 100000 43000 45148 3 6 |
51900000 1 100000 43000 45148 3 6 |
52000000 1 3000000 1290000 1375603 80 90 |
52000000 1 100000 43000 45166 3 6 |
52100000 1 100000 43000 45166 3 6 |
52200000 1 100000 43000 45166 3 6 |
52300000 1 100000 43000 45166 3 6 |
52400000 1 100000 43000 45166 3 6 |
52500000 1 100000 43000 45166 3 6 |
52600000 1 100000 43000 45166 3 6 |
52700000 1 100000 43000 45166 3 6 |
52800000 1 100000 43000 45166 3 6 |
52900000 1 100000 43000 45166 3 6 |
53000000 1 100000 43000 45166 3 6 |
53100000 1 100000 43000 45166 3 6 |
53200000 1 100000 43000 45166 3 6 |
53300000 1 100000 43000 45166 3 6 |
53400000 1 100000 43000 45166 3 6 |
53500000 1 100000 43000 45166 3 6 |
53600000 1 100000 43000 45166 3 6 |
53700000 1 100000 43000 45166 3 6 |
53800000 1 100000 43000 45166 3 6 |
53900000 1 100000 43000 45166 3 6 |
54000000 1 100000 43000 45166 3 6 |
54100000 1 100000 43000 45166 3 6 |
54200000 1 100000 43000 45166 3 6 |
54300000 1 100000 43000 45166 3 6 |
54400000 1 100000 43000 45166 3 6 |
54459066 1 2568002 420130 447532 62 49 |
54459066 1 2182002 1185687 1264350 63 82 |
54459066 1 1542002 1453522 1550084 3 22 |
54500000 1 100000 43000 45148 3 6 |
54600000 1 100000 43000 45148 3 6 |
54700000 1 100000 43000 45148 3 6 |
54800000 1 100000 43000 45148 3 6 |
54900000 1 100000 43000 45148 3 6 |
55000000 1 3000000 1290000 1375612 80 90 |
55000000 1 100000 43000 45165 3 6 |
55100000 1 100000 43000 45165 3 6 |
55200000 1 100000 43000 45165 3 6 |
55300000 1 100000 43000 45165 3 6 |
55400000 1 100000 43000 45165 3 6 |
55500000 1 100000 43000 45165 3 6 |
55600000 1 100000 43000 45165 3 6 |
55700000 1 100000 43000 45165 3 6 |
55800000 1 100000 43000 45165 3 6 |
55900000 1 100000 43000 45165 3 6 |
56000000 1 100000 43000 45165 3 6 |
56100000 1 100000 43000 45165 3 6 |
56101068 1 844002 779368 830787 71 91 |
56200000 1 100000 43000 45161 3 6 |
56300000 1 100000 43000 45161 3 6 |
56400000 1 100000 43000 45161 3 6 |
56500000 1 100000 43000 45161 3 6 |
56600000 1 100000 43000 45161 3 6 |
56700000 1 100000 43000 45161 3 6 |
56800000 1 100000 43000 45161 3 6 |
56900000 1 100000 43000 45161 3 6 |
57000000 1 100000 43000 45161 3 6 |
57045070 1 2107002 1333939 1422502 89 66 |
57100000 1 100000 43000 45162 3 6 |
57200000 1 100000 43000 45162 3 6 |
57300000 1 100000 43000 45162 3 6 |
57400000 1 100000 43000 45162 3 6 |
57500000 1 100000 43000 45162 3 6 |
57600000 1 100000 43000 45162 3 6 |
57700000 1 100000 43000 45162 3 6 |
57800000 1 100000 43000 45162 3 6 |
57900000 1 100000 43000 45162 3 6 |
58000000 1 3000000 1290000 1375629 80 90 |
58000000 1 100000 43000 45148 3 6 |
58100000 1 100000 43000 45148 3 6 |
58200000 1 100000 43000 45148 3 6 |
58300000 1 100000 43000 45148 3 6 |
58400000 1 100000 43000 45148 3 6 |
58500000 1 100000 43000 45148 3 6 |
58600000 1 100000 43000 45148 3 6 |
58700000 1 100000 43000 45148 3 6 |
58800000 1 100000 43000 45148 3 6 |
58900000 1 100000 43000 45148 3 6 |
59000000 1 100000 43000 45148 3 6 |
59100000 1 100000 43000 45148 3 6 |
59200000 1 100000 43000 45148 3 6 |
59252072 1 2696002 989242 1054767 1 49 |
59252072 1 2656002 770386 821226 79 27 |
59252072 1 329002 22627 23424 94 23 |
59300000 1 100000 43000 45167 3 6 |
59400000 1 100000 43000 45167 3 6 |
59500000 1 100000 43000 45167 3 6 |
59600000 1 100000 43000 45167 3 6 |
59681074 1 1794002 1556982 1660485 4 1 |
59681074 1 2417002 732124 780422 2 49 |
59681074 1 806002 252797 269008 48 43 |
59700000 1 100000 43000 45165 3 6 |
59800000 1 100000 43000 45165 3 6 |
59900000 1 100000 43000 45165 3 6 |
60000000 1 100000 43000 45165 3 6 |
60100000 1 100000 43000 45165 3 6 |
60200000 1 100000 43000 45165 3 6 |
60300000 1 100000 43000 45165 3 6 |
60400000 1 100000 43000 45165 3 6 |
60500000 1 100000 43000 45165 3 6 |
60600000 1 100000 43000 45165 3 6 |
60700000 1 100000 43000 45165 3 6 |
60800000 1 100000 43000 45165 3 6 |
60900000 1 100000 43000 45165 3 6 |
/unsupported/trunk/crunch/load/hpattern.dat |
---|
0,0 → 1,2 |
1 |
500063 36000 19896 20209 |
/unsupported/trunk/crunch/load/tune.c |
---|
0,0 → 1,151 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: tune.c,v 1.1 2004-07-05 14:17:16 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:16 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
#include "kernel/kern.h" |
/* |
* |
* Tuning the speed of the dummy loop for the value tasks... |
* |
*/ |
#define TUNE_THRESHOLD 80 |
int tune_CPU_speed(int len) |
{ |
int x, y, j; |
TIME bef, aft; |
char s[2] = { 'X', 0 }; |
char buf[20]; |
int load; |
// cprintf("\n\n\n\nlen=%d ",len); |
// return 1; |
load = 100000; |
x=10; y=10; // x and y positions |
for (;;) { |
bef = sys_gettime(NULL); |
for (j=0; j<load; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
aft = sys_gettime(NULL); |
sprintf(buf,"%10d",(int)(aft-bef)); |
puts_xy(10,11,WHITE,buf); |
//cprintf("Tuning idle cycles: load=%d , time=%d ...\n", load, (int)(aft-bef)); |
if ((int)(aft-bef-len) < 0 && |
(int)(aft-bef-len) > -TUNE_THRESHOLD) |
return load; |
load = (int)(((double)(max(0,len-TUNE_THRESHOLD/2))*(double)load)/(double)(aft-bef)); |
} |
} |
// top number of iterations |
// less than 4 sec on my portable PC (pentium 2 400 Mhz) (!) |
//#define TUNE_TOP 5000000 |
// 1.8 sec max |
#define TUNE_TOP 2500000 |
int tune_CPU_speed2(int len) |
{ |
int x, y, j; |
TIME bef, aft; |
char s[2] = { 'X', 0 }; |
int bottom, top, load; |
bottom = 0; |
load = TUNE_TOP/2; |
top = TUNE_TOP; |
x=10; y=10; // x and y positions |
for (;;) { |
bef = sys_gettime(NULL); |
for (j=0; j<load; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
aft = sys_gettime(NULL); |
cprintf("Tuning idle cycles: load=%d , time=%d ...\n", load, (int)(aft-bef)); |
if (load > TUNE_TOP-10) { |
cprintf("This PC is too fast: please increase the TUNE_TOP define!\n"); |
sys_end(); |
return load; |
} |
if ((int)(aft-bef-len) < 20 && (int)(aft-bef-len) > -20) |
return load; |
if (aft-bef > len) { |
top = load; |
load = (top+bottom)/2; |
} |
else { |
bottom = load; |
load = (top+bottom)/2; |
} |
} |
} |
/unsupported/trunk/crunch/load/new.bat |
---|
0,0 → 1,6 |
echo 60 > length.dat |
make |
make runstep1 |
x step2 |
x step3 |
make runstep4 |
/unsupported/trunk/crunch/load/dosfs.c |
---|
0,0 → 1,146 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: dosfs.c,v 1.1 2004-07-05 14:18:03 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:18:03 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
#include "kernel/kern.h" |
#include "string.h" |
#include "ll/i386/x-dos.h" |
/* |
* |
* Read/Write functions |
* |
*/ |
/* This is the buffer used by read_myfile */ |
char myfilebuf[1000]; |
/* This is the number of bytes read by read_myfile */ |
int myfilebuf_length; |
/* This function read myfile.txt (up to 1000 chars) */ |
void read_myfile(void) |
{ |
/* DOS file descriptor */ |
DOS_FILE *f; |
/* Error code */ |
int err; |
/* open the DOS file for reading (you can specify only "r" or "w") */ |
f = DOS_fopen("myfile.txt","r"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening myfile.txt...\n", err); |
myfilebuf_length = 0; |
return; |
} |
/* read up to 1000 chars */ |
myfilebuf_length = DOS_fread(&myfilebuf,1,1000,f); |
/* check for errors */ |
err = DOS_error(); |
cprintf("Read %d bytes from myfile.txt...\n", myfilebuf_length); |
if (err) { |
cprintf("Error %d reading myfile.txt...\n", err); |
myfilebuf_length = 0; |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/* This function write myfile.out (up to 30 chars) */ |
void write_myfile(void *arg) |
{ |
DOS_FILE *f; /* DOS file descriptor */ |
int err; /* Error code */ |
int maxbytes; |
int writtenbytes; /* number of files written */ |
/* open the DOS file for writing (you can specify only "r" or "w") */ |
f = DOS_fopen("myfile.out","w"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening myfile.out...\n", err); |
return; |
} |
/* write up to 30 bytes */ |
if (myfilebuf_length > 30) |
maxbytes = 30; |
else |
maxbytes = myfilebuf_length; |
writtenbytes = DOS_fwrite(myfilebuf,1,maxbytes,f); |
/* check for errors */ |
err = DOS_error(); |
cprintf("Written %d bytes into myfile.out...\n", writtenbytes); |
if (err) { |
cprintf("Error %d writing myfile.txt...\n", err); |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/unsupported/trunk/crunch/load/rrvalue.c |
---|
0,0 → 1,656 |
/* |
* 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: rrvalue.c,v 1.1 2004-07-05 14:17:14 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:14 $ |
------------ |
This file contains the scheduling module RRVALUE (Round Robin) |
Read rrvalue.h for further details. |
**/ |
/* |
* 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 WARRSOFTANTY; without even the implied waRRSOFTanty 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 |
* |
*/ |
#include "rrvalue.h" |
#include <ll/stdio.h> |
#include <ll/string.h> |
#include <kernel/model.h> |
#include <kernel/descr.h> |
#include <kernel/var.h> |
#include <kernel/func.h> |
/*+ Status used in the level +*/ |
#define RRVALUE_READY MODULE_STATUS_BASE |
#define RRVALUE_DELAY MODULE_STATUS_BASE+1 |
#define RRVALUE_IDLE MODULE_STATUS_BASE+2 |
/*+ the level redefinition for the Round Robin level +*/ |
typedef struct { |
level_des l; /*+ the standard level descriptor +*/ |
int nact[MAX_PROC]; /*+ number of pending activations +*/ |
QQUEUE ready; /*+ the ready queue +*/ |
int slice; /*+ the level's time slice +*/ |
TIME period[MAX_PROC]; /*+ activation period +*/ |
struct timespec reactivation_time[MAX_PROC]; |
/*+ the time at witch the reactivation timer is post +*/ |
int reactivation_timer[MAX_PROC]; |
/*+ the recativation timer +*/ |
BYTE periodic[MAX_PROC]; |
struct multiboot_info *multiboot; /*+ used if the level have to insert |
the main task +*/ |
BYTE models; /*+ Task Model that the Module can Handle +*/ |
} RRVALUE_level_des; |
static char *RRVALUE_status_to_a(WORD status) |
{ |
if (status < MODULE_STATUS_BASE) |
return status_to_a(status); |
switch (status) { |
case RRVALUE_READY: return "RRVALUE_Ready"; |
case RRVALUE_DELAY: return "RRVALUE_Delay"; |
case RRVALUE_IDLE : return "RRVALUE_Idle"; |
default : return "RRVALUE_Unknown"; |
} |
} |
/* this is the periodic reactivation of the task... it is posted only |
if the task is a periodic task */ |
static void RRVALUE_timer_reactivate(void *par) |
{ |
PID p = (PID) par; |
RRVALUE_level_des *lev; |
// kern_printf("react"); |
lev = (RRVALUE_level_des *)level_table[proc_table[p].task_level]; |
if (proc_table[p].status == RRVALUE_IDLE) { |
/* the task has finished the current activation and must be |
reactivated */ |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
event_need_reschedule(); |
} |
else if (lev->nact[p] >= 0) |
/* the task has not completed the current activation, so we save |
the activation incrementing nact... */ |
lev->nact[p]++; |
/* repost the event at the next period end... */ |
ADDUSEC2TIMESPEC(lev->period[p], &lev->reactivation_time[p]); |
lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p], |
RRVALUE_timer_reactivate, |
(void *)p); |
/* tracer stuff */ |
// trc_logevent(TRC_INTACTIVATION,&p); |
} |
/*+ this function is called when a task finish his delay +*/ |
static void RRVALUE_timer_delay(void *par) |
{ |
PID p = (PID) par; |
RRVALUE_level_des *lev; |
lev = (RRVALUE_level_des *)level_table[proc_table[p].task_level]; |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
proc_table[p].delay_timer = NIL; /* Paranoia */ |
// kern_printf(" DELAY TIMER %d ", p); |
event_need_reschedule(); |
} |
static int RRVALUE_level_accept_task_model(LEVEL l, TASK_MODEL *m) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if ((m->pclass == NRT_PCLASS || m->pclass == (NRT_PCLASS | l)) && lev->models & RRVALUE_ONLY_NRT) |
return 0; |
else if ((m->pclass == SOFT_PCLASS || m->pclass == (SOFT_PCLASS | l)) && lev->models & RRVALUE_ONLY_SOFT) |
return 0; |
else if ((m->pclass == HARD_PCLASS || m->pclass == (HARD_PCLASS | l)) && lev->models & RRVALUE_ONLY_HARD) |
return 0; |
else if ((m->pclass == VALUE_PCLASS || m->pclass == (VALUE_PCLASS | l)) && lev->models & RRVALUE_ONLY_VALUE) |
return 0; |
else |
return -1; |
} |
static int RRVALUE_level_accept_guest_model(LEVEL l, TASK_MODEL *m) |
{ |
return -1; |
} |
static void RRVALUE_level_status(LEVEL l) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
PID p = qq_queryfirst(&lev->ready); |
kern_printf("Slice: %d \n", lev->slice); |
while (p != NIL) { |
kern_printf("Pid: %d\t Name: %20s Status: %s\n",p,proc_table[p].name, |
RRVALUE_status_to_a(proc_table[p].status)); |
p = proc_table[p].next; |
} |
for (p=0; p<MAX_PROC; p++) |
if (proc_table[p].task_level == l && proc_table[p].status != RRVALUE_READY |
&& proc_table[p].status != FREE ) |
kern_printf("Pid: %d\t Name: %20s Status: %s\n",p,proc_table[p].name, |
RRVALUE_status_to_a(proc_table[p].status)); |
} |
/* This is not efficient but very fair :-) |
The need of all this stuff is because if a task execute a long time |
due to (shadow!) priority inheritance, then the task shall go to the |
tail of the queue many times... */ |
static PID RRVALUE_level_scheduler(LEVEL l) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
PID p; |
for (;;) { |
p = qq_queryfirst(&lev->ready); |
if (p == -1) |
return p; |
//{kern_printf("(s%d)",p); return p;} |
// kern_printf("(p=%d l=%d avail=%d wcet =%d)\n",p,l,proc_table[p].avail_time, proc_table[p].wcet); |
if (proc_table[p].avail_time <= 0) { |
proc_table[p].avail_time += proc_table[p].wcet; |
qq_extract(p,&lev->ready); |
qq_insertlast(p,&lev->ready); |
} |
else |
//{kern_printf("(s%d)",p); return p;} |
return p; |
} |
} |
static int RRVALUE_level_guarantee(LEVEL l, bandwidth_t *freebandwidth) |
{ |
/* the RRVALUE level always guarantee... the function is defined because |
there can be an aperiodic server at a level with less priority than |
the RRVALUE that need guarantee (e.g., a TBS server) */ |
return 1; |
} |
static int RRVALUE_task_create(LEVEL l, PID p, TASK_MODEL *m) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
// kern_printf("create %d mod %d\n",p,m->pclass); |
/* the task state is set at SLEEP by the general task_create |
the only thing to set remains the capacity stuffs that are set |
to the values passed in the model... */ |
/* I used the wcet field because using wcet can account if a task |
consume more than the timeslice... */ |
if (lev->models & RRVALUE_ONLY_NRT && |
(m->pclass == NRT_PCLASS || m->pclass == (NRT_PCLASS | l))) { |
NRT_TASK_MODEL *nrt = (NRT_TASK_MODEL *)m; |
// kern_printf("nrt"); |
if (nrt->slice) { |
proc_table[p].avail_time = nrt->slice; |
proc_table[p].wcet = nrt->slice; |
} |
else { |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
} |
proc_table[p].control |= CONTROL_CAP; |
if (nrt->arrivals == SAVE_ARRIVALS) |
lev->nact[p] = 0; |
else |
lev->nact[p] = -1; |
lev->periodic[p] = 0; |
lev->period[p] = 0; |
} |
else if (lev->models & RRVALUE_ONLY_SOFT && |
(m->pclass == SOFT_PCLASS || m->pclass == (SOFT_PCLASS | l))) { |
SOFT_TASK_MODEL *soft = (SOFT_TASK_MODEL *)m; |
// kern_printf("soft"); |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
proc_table[p].control |= CONTROL_CAP; |
if (soft->arrivals == SAVE_ARRIVALS) |
lev->nact[p] = 0; |
else |
lev->nact[p] = -1; |
if (soft->periodicity == PERIODIC) { |
lev->periodic[p] = 1; |
lev->period[p] = soft->period; |
} |
else { |
lev->periodic[p] = 0; |
lev->period[p] = 0; |
} |
} |
else if (lev->models & RRVALUE_ONLY_HARD && |
(m->pclass == HARD_PCLASS || m->pclass == (HARD_PCLASS | l))) { |
HARD_TASK_MODEL *hard = (HARD_TASK_MODEL *)m; |
// kern_printf("hard"); |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
proc_table[p].control |= CONTROL_CAP; |
lev->nact[p] = 0; |
if (hard->periodicity == PERIODIC) { |
lev->periodic[p] = 1; |
lev->period[p] = hard->mit; |
} |
else { |
lev->periodic[p] = 0; |
lev->period[p] = 0; |
} |
} |
if (lev->models & RRVALUE_ONLY_VALUE && |
(m->pclass == VALUE_PCLASS || m->pclass == (VALUE_PCLASS | l))) { |
VALUE_TASK_MODEL *nrt = (NRT_TASK_MODEL *)m; |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
proc_table[p].control |= CONTROL_CAP; |
lev->nact[p] = -1; |
lev->periodic[p] = 0; |
lev->period[p] = 0; |
} |
return 0; /* OK */ |
} |
static void RRVALUE_task_detach(LEVEL l, PID p) |
{ |
/* the RRVALUE level doesn't introduce any new field in the TASK_MODEL |
so, all detach stuffs are done by the task_create |
The task state is set at FREE by the general task_create */ |
} |
static int RRVALUE_task_eligible(LEVEL l, PID p) |
{ |
return 0; /* if the task p is chosen, it is always eligible */ |
} |
#ifdef __TEST1__ |
extern int testactive; |
extern struct timespec s_stime[]; |
extern TIME s_curr[]; |
extern TIME s_PID[]; |
extern int useds; |
#endif |
static void RRVALUE_task_dispatch(LEVEL l, PID p, int nostop) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
//static int p2count=0; |
/* the task state is set EXE by the scheduler() |
we extract the task from the ready queue |
NB: we can't assume that p is the first task in the queue!!! */ |
qq_extract(p, &lev->ready); |
} |
static void RRVALUE_task_epilogue(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
/* check if the slice is finished and insert the task in the coRRVALUEect |
qqueue position */ |
if (proc_table[p].avail_time <= 0) { |
proc_table[p].avail_time += proc_table[p].wcet; |
qq_insertlast(p,&lev->ready); |
} |
else |
/* curr is >0, so the running task have to run for another cuRRVALUE usec */ |
qq_insertfirst(p,&lev->ready); |
proc_table[p].status = RRVALUE_READY; |
} |
static void RRVALUE_task_activate(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
/* Test if we are trying to activate a non sleeping task */ |
/* save activation (only if needed... */ |
if (proc_table[p].status != SLEEP && proc_table[p].status != RRVALUE_IDLE) { |
if (lev->nact[p] != -1) |
lev->nact[p]++; |
return; |
} |
ll_gettime(TIME_EXACT, &proc_table[p].request_time); |
/* Insert task in the coRRVALUEect position */ |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
/* Set the reactivation timer */ |
if (lev->periodic[p]) |
{ |
TIMESPEC_ASSIGN(&lev->reactivation_time[p], &proc_table[p].request_time); |
ADDUSEC2TIMESPEC(lev->period[p], &lev->reactivation_time[p]); |
// TIMESPEC_ASSIGN(&lev->reactivation_time[p], &lev->cbs_dline[p]); |
lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p], |
RRVALUE_timer_reactivate, |
(void *)p); |
} |
} |
static void RRVALUE_task_insert(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
/* Similar to RRVALUE_task_activate, but we don't check in what state |
the task is and we don't set the request_time */ |
/* Insert task in the coRRVALUEect position */ |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
} |
static void RRVALUE_task_extract(LEVEL l, PID p) |
{ |
/* Extract the running task from the level |
. we have already extract it from the ready queue at the dispatch time. |
. the capacity event have to be removed by the generic kernel |
. the wcet don't need modification... |
. the state of the task is set by the calling function |
So, we do nothing!!! |
*/ |
} |
static void RRVALUE_task_endcycle(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if (lev->nact[p] > 0) { |
/* continue!!!! */ |
ll_gettime(TIME_EXACT, &proc_table[p].request_time); |
lev->nact[p]--; |
// qq_insertlast(p,&lev->ready); |
qq_insertfirst(p,&lev->ready); |
proc_table[p].status = RRVALUE_READY; |
} |
else |
proc_table[p].status = RRVALUE_IDLE; |
} |
static void RRVALUE_task_end(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
lev->nact[p] = -1; |
/* we delete the reactivation timer */ |
if (lev->periodic[p]) { |
event_delete(lev->reactivation_timer[p]); |
lev->reactivation_timer[p] = -1; |
} |
/* then, we insert the task in the free queue */ |
proc_table[p].status = FREE; |
q_insert(p,&freedesc); |
} |
static void RRVALUE_task_sleep(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if (lev->nact[p] >= 0) lev->nact[p] = 0; |
/* we delete the reactivation timer */ |
if (lev->periodic[p]) { |
event_delete(lev->reactivation_timer[p]); |
lev->reactivation_timer[p] = -1; |
} |
proc_table[p].status = SLEEP; |
} |
static void RRVALUE_task_delay(LEVEL l, PID p, TIME usdelay) |
{ |
// RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
struct timespec wakeuptime; |
/* equal to RRVALUE_task_endcycle */ |
proc_table[p].status = RRVALUE_DELAY; |
/* we need to delete this event if we kill the task while it is sleeping */ |
ll_gettime(TIME_EXACT,&wakeuptime); |
ADDUSEC2TIMESPEC(usdelay,&wakeuptime); |
proc_table[p].delay_timer = kern_event_post(&wakeuptime, |
RRVALUE_timer_delay, |
(void *)p); |
} |
static int RRVALUE_guest_create(LEVEL l, PID p, TASK_MODEL *m) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); return 0; } |
static void RRVALUE_guest_detach(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_dispatch(LEVEL l, PID p, int nostop) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_epilogue(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_activate(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_insert(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_extract(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_endcycle(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_end(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_sleep(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_delay(LEVEL l, PID p,DWORD tickdelay) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
/* Registration functions */ |
/*+ This init function install the "main" task +*/ |
static void RRVALUE_call_main(void *l) |
{ |
LEVEL lev; |
PID p; |
NRT_TASK_MODEL m; |
void *mb; |
lev = (LEVEL)l; |
nrt_task_default_model(m); |
nrt_task_def_level(m,lev); /* with this we are sure that the task aRRVALUEives |
to the coRRVALUEect level */ |
mb = ((RRVALUE_level_des *)level_table[lev])->multiboot; |
nrt_task_def_arg(m,mb); |
nrt_task_def_usemath(m); |
nrt_task_def_nokill(m); |
nrt_task_def_ctrl_jet(m); |
p = task_create("Main", __init__, (TASK_MODEL *)&m, NULL); |
if (p == NIL) |
printk("\nPanic!!! can't create main task...\n"); |
RRVALUE_task_activate(lev,p); |
} |
/*+ Registration function: |
TIME slice the slice for the Round Robin queue |
int createmain 1 if the level creates the main task 0 otherwise |
struct multiboot_info *mb used if createmain specified +*/ |
void RRVALUE_register_level(TIME slice, |
int createmain, |
struct multiboot_info *mb, |
BYTE models) |
{ |
LEVEL l; /* the level that we register */ |
RRVALUE_level_des *lev; /* for readableness only */ |
PID i; |
printk("RRVALUE_register_level\n"); |
/* request an entry in the level_table */ |
l = level_alloc_descriptor(); |
/* alloc the space needed for the RRVALUE_level_des */ |
lev = (RRVALUE_level_des *)kern_alloc(sizeof(RRVALUE_level_des)); |
printk(" lev=%d\n",(int)lev); |
/* update the level_table with the new entry */ |
level_table[l] = (level_des *)lev; |
/* fill the standard descriptor */ |
strncpy(lev->l.level_name, RRVALUE_LEVELNAME, MAX_LEVELNAME); |
lev->l.level_code = RRVALUE_LEVEL_CODE; |
lev->l.level_version = RRVALUE_LEVEL_VERSION; |
lev->l.level_accept_task_model = RRVALUE_level_accept_task_model; |
lev->l.level_accept_guest_model = RRVALUE_level_accept_guest_model; |
lev->l.level_status = RRVALUE_level_status; |
lev->l.level_scheduler = RRVALUE_level_scheduler; |
lev->l.level_guarantee = RRVALUE_level_guarantee; |
lev->l.task_create = RRVALUE_task_create; |
lev->l.task_detach = RRVALUE_task_detach; |
lev->l.task_eligible = RRVALUE_task_eligible; |
lev->l.task_dispatch = RRVALUE_task_dispatch; |
lev->l.task_epilogue = RRVALUE_task_epilogue; |
lev->l.task_activate = RRVALUE_task_activate; |
lev->l.task_insert = RRVALUE_task_insert; |
lev->l.task_extract = RRVALUE_task_extract; |
lev->l.task_endcycle = RRVALUE_task_endcycle; |
lev->l.task_end = RRVALUE_task_end; |
lev->l.task_sleep = RRVALUE_task_sleep; |
lev->l.task_delay = RRVALUE_task_delay; |
lev->l.guest_create = RRVALUE_guest_create; |
lev->l.guest_detach = RRVALUE_guest_detach; |
lev->l.guest_dispatch = RRVALUE_guest_dispatch; |
lev->l.guest_epilogue = RRVALUE_guest_epilogue; |
lev->l.guest_activate = RRVALUE_guest_activate; |
lev->l.guest_insert = RRVALUE_guest_insert; |
lev->l.guest_extract = RRVALUE_guest_extract; |
lev->l.guest_endcycle = RRVALUE_guest_endcycle; |
lev->l.guest_end = RRVALUE_guest_end; |
lev->l.guest_sleep = RRVALUE_guest_sleep; |
lev->l.guest_delay = RRVALUE_guest_delay; |
/* fill the RRVALUE descriptor part */ |
for (i = 0; i < MAX_PROC; i++) { |
lev->nact[i] = -1; |
NULL_TIMESPEC(&lev->reactivation_time[i]); |
lev->reactivation_timer[i] = -1; |
lev->periodic[i] = 0; |
lev->period[i] = 0; |
} |
qq_init(&lev->ready); |
if (slice < RRVALUE_MINIMUM_SLICE) slice = RRVALUE_MINIMUM_SLICE; |
if (slice > RRVALUE_MAXIMUM_SLICE) slice = RRVALUE_MAXIMUM_SLICE; |
lev->slice = slice; |
lev->multiboot = mb; |
lev->models = models; |
if (createmain) |
sys_atrunlevel(RRVALUE_call_main,(void *) l, RUNLEVEL_INIT); |
} |
/unsupported/trunk/crunch/load/tune.h |
---|
0,0 → 1,58 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: tune.h,v 1.1 2004-07-05 14:17:16 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:16 $ |
------------ |
**/ |
/* |
* 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 __VALUE_VALUE_H__ |
#define __VALUE_VALUE_H__ |
/* |
* This function simply tune a for loop in a way that it will take |
*/ |
int tune_CPU_speed(int len); |
#endif |
/unsupported/trunk/crunch/load/rrvalue.h |
---|
0,0 → 1,128 |
/* |
* 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: rrvalue.h,v 1.1 2004-07-05 14:17:15 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:15 $ |
------------ |
This file contains the scheduling module RRVALUE (Round Robin for |
Hard & Soft & Value Model) |
Title: |
RRVALUE (Round Robin) version 2 |
Task Models Accepted: |
NRT_TASK_MODEL - Non-Realtime Tasks |
weight field is ignored |
slice field is used to set the slice of a task, if it is !=0 |
policy field is ignored |
inherit field is ignored |
SOFT_TASK_MODEL - Soft tasks |
only the periodicity and the met are used. |
HARD_TASK_MODEL - Hard tasks |
only the periodicity and the period are used. |
VALUE_TASK_MODEL - Value tasks |
nothing is used yet |
Description: |
See the RRSOFT Description. |
It also accepts VALUE_TASK Models |
Exceptions raised: |
XUNVALID_GUEST |
This level doesn't support guests. When a guest operation |
is called, the exception is raised. |
Restrictions & special features: |
- if specified, it creates at init time a task, |
called "Main", attached to the function __init__(). |
- There must be only one module in the system that creates a task |
attached to the function __init__(). |
- The level tries to guarantee that a task uses a "full" timeslice |
before going to the queue tail. "full" means that a task can execute |
a maximum time of slice+sys_tick due to the approx. done by |
the Virtual Machine. If a task execute more time than the slice, |
the next time it execute less... |
**/ |
/* |
* 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 __RRVALUE_H__ |
#define __RRVALUE_H__ |
#include <ll/ll.h> |
#include <kernel/config.h> |
#include <sys/types.h> |
#include <kernel/types.h> |
#include <modules/codes.h> |
extern TASK __init__(void *arg); |
/*+ Const: +*/ |
#define RRVALUE_MINIMUM_SLICE 1000 /*+ Minimum Timeslice +*/ |
#define RRVALUE_MAXIMUM_SLICE 500000 /*+ Maximum Timeslice +*/ |
#define RRVALUE_MAIN_YES 1 /*+ The level creates the main +*/ |
#define RRVALUE_MAIN_NO 0 /*+ The level does'nt create the main +*/ |
#define RRVALUE_ONLY_HARD 1 /*+ The level accepts only Hard Tasks +*/ |
#define RRVALUE_ONLY_SOFT 2 /*+ The level accepts only Soft Tasks +*/ |
#define RRVALUE_ONLY_NRT 4 /*+ The level accepts only NRT Tasks +*/ |
#define RRVALUE_ONLY_VALUE 8 /*+ The level accepts only Value Tasks+*/ |
/*+ Registration function: |
TIME slice the slice for the Round Robin queue |
int createmain 1 if the level creates the main task 0 otherwise |
struct multiboot_info *mb used if createmain specified +*/ |
void RRVALUE_register_level(TIME slice, |
int createmain, |
struct multiboot_info *mb, |
BYTE models); |
#endif |
/unsupported/trunk/crunch/load/shape.dat |
---|
0,0 → 1,3 |
2 |
0 2448131304 |
60 0 |
/unsupported/trunk/crunch/load/vpattern.dat |
---|
0,0 → 1,708 |
707 |
1000000 3000000 1290000 1375649 80 90 |
1000000 100000 43000 45150 3 6 |
1000000 1500002 1481283 1579713 18 30 |
1000000 2921002 1208851 1289115 80 65 |
1000000 2358002 1004771 1071328 23 24 |
1100000 100000 43000 45147 3 6 |
1200000 100000 43000 45147 3 6 |
1300000 100000 43000 45147 3 6 |
1400000 100000 43000 45147 3 6 |
1500000 100000 43000 45147 3 6 |
1600000 100000 43000 45147 3 6 |
1700000 100000 43000 45147 3 6 |
1800000 100000 43000 45147 3 6 |
1900000 100000 43000 45147 3 6 |
2000000 100000 43000 45147 3 6 |
2100000 100000 43000 45147 3 6 |
2200000 100000 43000 45147 3 6 |
2300000 100000 43000 45147 3 6 |
2400000 100000 43000 45147 3 6 |
2500000 100000 43000 45147 3 6 |
2600000 100000 43000 45147 3 6 |
2700000 100000 43000 45147 3 6 |
2800000 100000 43000 45147 3 6 |
2900000 100000 43000 45147 3 6 |
3000000 100000 43000 45147 3 6 |
3100000 100000 43000 45147 3 6 |
3200000 100000 43000 45147 3 6 |
3300000 100000 43000 45147 3 6 |
3400000 100000 43000 45147 3 6 |
3458002 943002 438430 467037 13 29 |
3458002 319002 66758 70519 79 40 |
3458002 1971002 1811919 1932461 58 100 |
3500000 100000 43000 45162 3 6 |
3600000 100000 43000 45162 3 6 |
3700000 100000 43000 45162 3 6 |
3800000 100000 43000 45162 3 6 |
3900000 100000 43000 45162 3 6 |
4000000 3000000 1290000 1375618 80 90 |
4000000 100000 43000 45162 3 6 |
4100000 100000 43000 45162 3 6 |
4200000 100000 43000 45162 3 6 |
4300000 100000 43000 45162 3 6 |
4400000 100000 43000 45162 3 6 |
4500000 100000 43000 45162 3 6 |
4600000 100000 43000 45162 3 6 |
4700000 100000 43000 45162 3 6 |
4800000 100000 43000 45162 3 6 |
4900000 100000 43000 45162 3 6 |
5000000 100000 43000 45162 3 6 |
5100000 100000 43000 45162 3 6 |
5200000 100000 43000 45162 3 6 |
5300000 100000 43000 45162 3 6 |
5400000 100000 43000 45162 3 6 |
5500000 100000 43000 45162 3 6 |
5529004 280002 51947 54714 61 99 |
5600000 100000 43000 45150 3 6 |
5700000 100000 43000 45150 3 6 |
5800000 100000 43000 45150 3 6 |
5900000 100000 43000 45150 3 6 |
5909006 783002 701100 747318 23 94 |
5909006 221002 28449 29636 42 93 |
5909006 2986002 135321 143613 62 5 |
5909006 2192002 1202931 1282748 85 33 |
6000000 100000 43000 45164 3 6 |
6100000 100000 43000 45164 3 6 |
6200000 100000 43000 45164 3 6 |
6300000 100000 43000 45164 3 6 |
6400000 100000 43000 45164 3 6 |
6500000 100000 43000 45164 3 6 |
6600000 100000 43000 45164 3 6 |
6700000 100000 43000 45164 3 6 |
6800000 100000 43000 45164 3 6 |
6900000 100000 43000 45164 3 6 |
7000000 3000000 1290000 1375645 80 90 |
7000000 100000 43000 45151 3 6 |
7100000 100000 43000 45151 3 6 |
7200000 100000 43000 45151 3 6 |
7300000 100000 43000 45151 3 6 |
7400000 100000 43000 45151 3 6 |
7500000 100000 43000 45151 3 6 |
7600000 100000 43000 45151 3 6 |
7700000 100000 43000 45151 3 6 |
7800000 100000 43000 45151 3 6 |
7900000 100000 43000 45151 3 6 |
8000000 100000 43000 45151 3 6 |
8100000 100000 43000 45151 3 6 |
8200000 100000 43000 45151 3 6 |
8201008 2675002 2422758 2584205 26 11 |
8201008 1692002 1000061 1066298 76 36 |
8300000 100000 43000 45165 3 6 |
8400000 100000 43000 45165 3 6 |
8500000 100000 43000 45165 3 6 |
8600000 100000 43000 45165 3 6 |
8700000 100000 43000 45165 3 6 |
8800000 100000 43000 45165 3 6 |
8900000 100000 43000 45165 3 6 |
9000000 100000 43000 45165 3 6 |
9100000 100000 43000 45165 3 6 |
9200000 100000 43000 45165 3 6 |
9300000 100000 43000 45165 3 6 |
9400000 100000 43000 45165 3 6 |
9500000 100000 43000 45165 3 6 |
9600000 100000 43000 45165 3 6 |
9700000 100000 43000 45165 3 6 |
9800000 100000 43000 45165 3 6 |
9900000 100000 43000 45165 3 6 |
9993010 1747002 1102547 1175651 42 24 |
9993010 1500002 259938 276646 35 10 |
9993010 2679002 778228 829611 16 25 |
10000000 3000000 1290000 1375626 80 90 |
10000000 100000 43000 45149 3 6 |
10100000 100000 43000 45149 3 6 |
10200000 100000 43000 45149 3 6 |
10300000 100000 43000 45149 3 6 |
10400000 100000 43000 45149 3 6 |
10500000 100000 43000 45149 3 6 |
10600000 100000 43000 45149 3 6 |
10700000 100000 43000 45149 3 6 |
10800000 100000 43000 45149 3 6 |
10900000 100000 43000 45149 3 6 |
11000000 100000 43000 45149 3 6 |
11100000 100000 43000 45149 3 6 |
11200000 100000 43000 45149 3 6 |
11300000 100000 43000 45149 3 6 |
11400000 100000 43000 45149 3 6 |
11500000 100000 43000 45149 3 6 |
11600000 100000 43000 45149 3 6 |
11700000 100000 43000 45149 3 6 |
11800000 100000 43000 45149 3 6 |
11900000 100000 43000 45149 3 6 |
12000000 100000 43000 45149 3 6 |
12100000 100000 43000 45149 3 6 |
12200000 100000 43000 45149 3 6 |
12300000 100000 43000 45149 3 6 |
12400000 100000 43000 45149 3 6 |
12500000 100000 43000 45149 3 6 |
12600000 100000 43000 45149 3 6 |
12700000 100000 43000 45149 3 6 |
12772012 1857002 1424469 1519060 86 68 |
12800000 100000 43000 45170 3 6 |
12900000 100000 43000 45170 3 6 |
13000000 3000000 1290000 1375641 80 90 |
13000000 100000 43000 45148 3 6 |
13100000 100000 43000 45148 3 6 |
13200000 100000 43000 45148 3 6 |
13300000 100000 43000 45148 3 6 |
13400000 100000 43000 45148 3 6 |
13500000 100000 43000 45148 3 6 |
13600000 100000 43000 45148 3 6 |
13700000 100000 43000 45148 3 6 |
13800000 100000 43000 45148 3 6 |
13900000 100000 43000 45148 3 6 |
14000000 100000 43000 45148 3 6 |
14100000 100000 43000 45148 3 6 |
14200000 100000 43000 45148 3 6 |
14300000 100000 43000 45148 3 6 |
14400000 100000 43000 45148 3 6 |
14500000 100000 43000 45148 3 6 |
14600000 100000 43000 45148 3 6 |
14700000 100000 43000 45148 3 6 |
14729014 1549002 794849 847343 90 5 |
14729014 2566002 692657 738320 99 77 |
14729014 1625002 1528924 1630583 32 67 |
14800000 100000 43000 45150 3 6 |
14900000 100000 43000 45150 3 6 |
15000000 100000 43000 45150 3 6 |
15100000 100000 43000 45150 3 6 |
15200000 100000 43000 45150 3 6 |
15300000 100000 43000 45150 3 6 |
15400000 100000 43000 45150 3 6 |
15500000 100000 43000 45150 3 6 |
15600000 100000 43000 45150 3 6 |
15700000 100000 43000 45150 3 6 |
15800000 100000 43000 45150 3 6 |
15900000 100000 43000 45150 3 6 |
16000000 3000000 1290000 1375627 80 90 |
16000000 100000 43000 45161 3 6 |
16100000 100000 43000 45161 3 6 |
16200000 100000 43000 45161 3 6 |
16300000 100000 43000 45161 3 6 |
16400000 100000 43000 45161 3 6 |
16454016 867002 65308 68968 66 27 |
16500000 100000 43000 45159 3 6 |
16600000 100000 43000 45159 3 6 |
16700000 100000 43000 45159 3 6 |
16800000 100000 43000 45159 3 6 |
16900000 100000 43000 45159 3 6 |
17000000 100000 43000 45159 3 6 |
17100000 100000 43000 45159 3 6 |
17200000 100000 43000 45159 3 6 |
17300000 100000 43000 45159 3 6 |
17400000 100000 43000 45159 3 6 |
17421018 2428002 993501 1059309 19 4 |
17500000 100000 43000 45150 3 6 |
17600000 100000 43000 45150 3 6 |
17700000 100000 43000 45150 3 6 |
17800000 100000 43000 45150 3 6 |
17900000 100000 43000 45150 3 6 |
18000000 100000 43000 45150 3 6 |
18100000 100000 43000 45150 3 6 |
18200000 100000 43000 45150 3 6 |
18300000 100000 43000 45150 3 6 |
18400000 100000 43000 45150 3 6 |
18500000 100000 43000 45150 3 6 |
18600000 100000 43000 45150 3 6 |
18700000 100000 43000 45150 3 6 |
18800000 100000 43000 45150 3 6 |
18900000 100000 43000 45150 3 6 |
19000000 3000000 1290000 1375649 80 90 |
19000000 100000 43000 45151 3 6 |
19100000 100000 43000 45151 3 6 |
19200000 100000 43000 45151 3 6 |
19300000 100000 43000 45151 3 6 |
19400000 100000 43000 45151 3 6 |
19500000 100000 43000 45151 3 6 |
19600000 100000 43000 45151 3 6 |
19700000 100000 43000 45151 3 6 |
19800000 100000 43000 45151 3 6 |
19900000 100000 43000 45151 3 6 |
19949020 1658002 611967 652213 45 83 |
20000000 100000 43000 45149 3 6 |
20100000 100000 43000 45149 3 6 |
20200000 100000 43000 45149 3 6 |
20300000 100000 43000 45149 3 6 |
20400000 100000 43000 45149 3 6 |
20500000 100000 43000 45149 3 6 |
20600000 100000 43000 45149 3 6 |
20700000 100000 43000 45149 3 6 |
20800000 100000 43000 45149 3 6 |
20900000 100000 43000 45149 3 6 |
21000000 100000 43000 45149 3 6 |
21100000 100000 43000 45149 3 6 |
21200000 100000 43000 45149 3 6 |
21300000 100000 43000 45149 3 6 |
21400000 100000 43000 45149 3 6 |
21500000 100000 43000 45149 3 6 |
21600000 100000 43000 45149 3 6 |
21700000 100000 43000 45149 3 6 |
21707022 2180002 406353 432805 65 32 |
21707022 1721002 1085102 1157051 34 19 |
21707022 1813002 117495 124617 24 19 |
21707022 230002 206519 219637 92 41 |
21707022 301002 153832 163425 62 44 |
21707022 869002 617579 658216 35 26 |
21707022 2803002 275935 293732 9 5 |
21800000 100000 43000 45148 3 6 |
21900000 100000 43000 45148 3 6 |
22000000 3000000 1290000 1375583 80 90 |
22000000 100000 43000 45168 3 6 |
22100000 100000 43000 45168 3 6 |
22200000 100000 43000 45168 3 6 |
22300000 100000 43000 45168 3 6 |
22400000 100000 43000 45168 3 6 |
22500000 100000 43000 45168 3 6 |
22600000 100000 43000 45168 3 6 |
22700000 100000 43000 45168 3 6 |
22800000 100000 43000 45168 3 6 |
22900000 100000 43000 45168 3 6 |
23000000 100000 43000 45168 3 6 |
23100000 100000 43000 45168 3 6 |
23200000 100000 43000 45168 3 6 |
23300000 100000 43000 45168 3 6 |
23400000 100000 43000 45168 3 6 |
23500000 100000 43000 45168 3 6 |
23600000 100000 43000 45168 3 6 |
23700000 100000 43000 45168 3 6 |
23800000 100000 43000 45168 3 6 |
23900000 100000 43000 45168 3 6 |
24000000 100000 43000 45168 3 6 |
24100000 100000 43000 45168 3 6 |
24200000 100000 43000 45168 3 6 |
24300000 100000 43000 45168 3 6 |
24400000 100000 43000 45168 3 6 |
24500000 100000 43000 45168 3 6 |
24600000 100000 43000 45168 3 6 |
24610024 66002 12309 12414 33 57 |
24610024 1796002 1780401 1898852 75 3 |
24610024 2972002 614719 655172 15 35 |
24610024 739002 421644 449125 29 75 |
24700000 100000 43000 45165 3 6 |
24800000 100000 43000 45165 3 6 |
24900000 100000 43000 45165 3 6 |
25000000 3000000 1290000 1375654 80 90 |
25000000 100000 43000 45164 3 6 |
25100000 100000 43000 45164 3 6 |
25200000 100000 43000 45164 3 6 |
25300000 100000 43000 45164 3 6 |
25400000 100000 43000 45164 3 6 |
25449026 811002 124146 131715 76 89 |
25449026 2980002 2740975 2923733 18 37 |
25449026 2602002 2283400 2435523 32 76 |
25449026 2446002 1728002 1842967 37 36 |
25500000 100000 43000 45151 3 6 |
25600000 100000 43000 45151 3 6 |
25700000 100000 43000 45151 3 6 |
25800000 100000 43000 45151 3 6 |
25900000 100000 43000 45151 3 6 |
26000000 100000 43000 45151 3 6 |
26100000 100000 43000 45151 3 6 |
26200000 100000 43000 45151 3 6 |
26300000 100000 43000 45151 3 6 |
26400000 100000 43000 45151 3 6 |
26500000 100000 43000 45151 3 6 |
26600000 100000 43000 45151 3 6 |
26700000 100000 43000 45151 3 6 |
26800000 100000 43000 45151 3 6 |
26900000 100000 43000 45151 3 6 |
27000000 100000 43000 45151 3 6 |
27100000 100000 43000 45151 3 6 |
27200000 100000 43000 45151 3 6 |
27300000 100000 43000 45151 3 6 |
27400000 100000 43000 45151 3 6 |
27500000 100000 43000 45151 3 6 |
27600000 100000 43000 45151 3 6 |
27700000 100000 43000 45151 3 6 |
27800000 100000 43000 45151 3 6 |
27900000 100000 43000 45151 3 6 |
27995028 1692002 1269001 1353185 59 87 |
27995028 675002 560238 597010 58 28 |
28000000 3000000 1290000 1375636 80 90 |
28000000 100000 43000 45149 3 6 |
28100000 100000 43000 45149 3 6 |
28200000 100000 43000 45149 3 6 |
28300000 100000 43000 45149 3 6 |
28400000 100000 43000 45149 3 6 |
28500000 100000 43000 45149 3 6 |
28600000 100000 43000 45149 3 6 |
28700000 100000 43000 45149 3 6 |
28770030 1445002 533591 568568 42 94 |
28770030 1684002 283701 301893 70 39 |
28770030 10002 7440 7219 60 38 |
28800000 100000 43000 45162 3 6 |
28880032 857002 416099 443225 36 0 |
28900000 100000 43000 45164 3 6 |
29000000 100000 43000 45164 3 6 |
29100000 100000 43000 45164 3 6 |
29200000 100000 43000 45164 3 6 |
29300000 100000 43000 45164 3 6 |
29400000 100000 43000 45164 3 6 |
29500000 100000 43000 45164 3 6 |
29600000 100000 43000 45164 3 6 |
29700000 100000 43000 45164 3 6 |
29800000 100000 43000 45164 3 6 |
29837034 203002 75765 80101 22 96 |
29900000 100000 43000 45165 3 6 |
30000000 100000 43000 45165 3 6 |
30100000 100000 43000 45165 3 6 |
30140036 1520002 504059 537075 68 8 |
30140036 1742002 169640 180299 28 0 |
30140036 2164002 583449 621753 20 20 |
30200000 100000 43000 45160 3 6 |
30300000 100000 43000 45160 3 6 |
30400000 100000 43000 45160 3 6 |
30500000 100000 43000 45160 3 6 |
30600000 100000 43000 45160 3 6 |
30700000 100000 43000 45160 3 6 |
30800000 100000 43000 45160 3 6 |
30900000 100000 43000 45160 3 6 |
31000000 3000000 1290000 1375655 80 90 |
31000000 100000 43000 45146 3 6 |
31100000 100000 43000 45146 3 6 |
31200000 100000 43000 45146 3 6 |
31300000 100000 43000 45146 3 6 |
31400000 100000 43000 45146 3 6 |
31500000 100000 43000 45146 3 6 |
31600000 100000 43000 45146 3 6 |
31700000 100000 43000 45146 3 6 |
31800000 100000 43000 45146 3 6 |
31900000 100000 43000 45146 3 6 |
32000000 100000 43000 45146 3 6 |
32100000 100000 43000 45146 3 6 |
32200000 100000 43000 45146 3 6 |
32300000 100000 43000 45146 3 6 |
32400000 100000 43000 45146 3 6 |
32404038 1406002 1078611 1150106 82 76 |
32500000 100000 43000 45147 3 6 |
32600000 100000 43000 45147 3 6 |
32700000 100000 43000 45147 3 6 |
32800000 100000 43000 45147 3 6 |
32900000 100000 43000 45147 3 6 |
33000000 100000 43000 45147 3 6 |
33100000 100000 43000 45147 3 6 |
33200000 100000 43000 45147 3 6 |
33300000 100000 43000 45147 3 6 |
33400000 100000 43000 45147 3 6 |
33500000 100000 43000 45147 3 6 |
33600000 100000 43000 45147 3 6 |
33700000 100000 43000 45147 3 6 |
33800000 100000 43000 45147 3 6 |
33900000 100000 43000 45147 3 6 |
33910040 2480002 371141 395283 70 40 |
34000000 3000000 1290000 1375595 80 90 |
34000000 100000 43000 45170 3 6 |
34100000 100000 43000 45170 3 6 |
34200000 100000 43000 45170 3 6 |
34300000 100000 43000 45170 3 6 |
34400000 100000 43000 45170 3 6 |
34500000 100000 43000 45170 3 6 |
34600000 100000 43000 45170 3 6 |
34700000 100000 43000 45170 3 6 |
34800000 100000 43000 45170 3 6 |
34900000 100000 43000 45170 3 6 |
35000000 100000 43000 45170 3 6 |
35100000 100000 43000 45170 3 6 |
35200000 100000 43000 45170 3 6 |
35300000 100000 43000 45170 3 6 |
35400000 100000 43000 45170 3 6 |
35500000 100000 43000 45170 3 6 |
35600000 100000 43000 45170 3 6 |
35700000 100000 43000 45170 3 6 |
35800000 100000 43000 45170 3 6 |
35900000 100000 43000 45170 3 6 |
36000000 100000 43000 45170 3 6 |
36100000 100000 43000 45170 3 6 |
36200000 100000 43000 45170 3 6 |
36300000 100000 43000 45170 3 6 |
36400000 100000 43000 45170 3 6 |
36490042 2661002 264134 281112 3 95 |
36500000 100000 43000 45166 3 6 |
36600000 100000 43000 45166 3 6 |
36700000 100000 43000 45166 3 6 |
36800000 100000 43000 45166 3 6 |
36900000 100000 43000 45166 3 6 |
37000000 3000000 1290000 1375620 80 90 |
37000000 100000 43000 45146 3 6 |
37100000 100000 43000 45146 3 6 |
37200000 100000 43000 45146 3 6 |
37300000 100000 43000 45146 3 6 |
37400000 100000 43000 45146 3 6 |
37500000 100000 43000 45146 3 6 |
37600000 100000 43000 45146 3 6 |
37700000 100000 43000 45146 3 6 |
37800000 100000 43000 45146 3 6 |
37900000 100000 43000 45146 3 6 |
38000000 100000 43000 45146 3 6 |
38100000 100000 43000 45146 3 6 |
38200000 100000 43000 45146 3 6 |
38300000 100000 43000 45146 3 6 |
38400000 100000 43000 45146 3 6 |
38500000 100000 43000 45146 3 6 |
38600000 100000 43000 45146 3 6 |
38700000 100000 43000 45146 3 6 |
38800000 100000 43000 45146 3 6 |
38900000 100000 43000 45146 3 6 |
39000000 100000 43000 45146 3 6 |
39100000 100000 43000 45146 3 6 |
39200000 100000 43000 45146 3 6 |
39251044 545002 504056 537082 20 31 |
39300000 100000 43000 45144 3 6 |
39400000 100000 43000 45144 3 6 |
39500000 100000 43000 45144 3 6 |
39600000 100000 43000 45144 3 6 |
39700000 100000 43000 45144 3 6 |
39800000 100000 43000 45144 3 6 |
39896046 564002 376511 401022 98 80 |
39896046 817002 150939 160339 78 43 |
39896046 353002 99123 105013 73 15 |
39896046 2506002 714365 761476 99 84 |
39900000 100000 43000 45149 3 6 |
40000000 3000000 1290000 1375660 80 90 |
40000000 100000 43000 45147 3 6 |
40100000 100000 43000 45147 3 6 |
40200000 100000 43000 45147 3 6 |
40300000 100000 43000 45147 3 6 |
40400000 100000 43000 45147 3 6 |
40500000 100000 43000 45147 3 6 |
40600000 100000 43000 45147 3 6 |
40700000 100000 43000 45147 3 6 |
40800000 100000 43000 45147 3 6 |
40900000 100000 43000 45147 3 6 |
41000000 100000 43000 45147 3 6 |
41100000 100000 43000 45147 3 6 |
41200000 100000 43000 45147 3 6 |
41300000 100000 43000 45147 3 6 |
41400000 100000 43000 45147 3 6 |
41500000 100000 43000 45147 3 6 |
41600000 100000 43000 45147 3 6 |
41700000 100000 43000 45147 3 6 |
41800000 100000 43000 45147 3 6 |
41900000 100000 43000 45147 3 6 |
42000000 100000 43000 45147 3 6 |
42100000 100000 43000 45147 3 6 |
42200000 100000 43000 45147 3 6 |
42300000 100000 43000 45147 3 6 |
42400000 100000 43000 45147 3 6 |
42500000 100000 43000 45147 3 6 |
42502048 130002 71538 75588 72 0 |
42502048 665002 347830 370323 38 52 |
42502048 1046002 3114 2602 68 72 |
42600000 100000 43000 45153 3 6 |
42700000 100000 43000 45153 3 6 |
42800000 100000 43000 45153 3 6 |
42900000 100000 43000 45153 3 6 |
43000000 3000000 1290000 1375609 80 90 |
43000000 100000 43000 45149 3 6 |
43100000 100000 43000 45149 3 6 |
43200000 100000 43000 45149 3 6 |
43300000 100000 43000 45149 3 6 |
43400000 100000 43000 45149 3 6 |
43500000 100000 43000 45149 3 6 |
43600000 100000 43000 45149 3 6 |
43648050 2643002 1225965 1307299 91 53 |
43700000 100000 43000 45165 3 6 |
43800000 100000 43000 45165 3 6 |
43900000 100000 43000 45165 3 6 |
44000000 100000 43000 45165 3 6 |
44100000 100000 43000 45165 3 6 |
44200000 100000 43000 45165 3 6 |
44300000 100000 43000 45165 3 6 |
44400000 100000 43000 45165 3 6 |
44500000 100000 43000 45165 3 6 |
44600000 100000 43000 45165 3 6 |
44700000 100000 43000 45165 3 6 |
44800000 100000 43000 45165 3 6 |
44900000 100000 43000 45165 3 6 |
45000000 100000 43000 45165 3 6 |
45100000 100000 43000 45165 3 6 |
45200000 100000 43000 45165 3 6 |
45300000 100000 43000 45165 3 6 |
45400000 100000 43000 45165 3 6 |
45500000 100000 43000 45165 3 6 |
45600000 100000 43000 45165 3 6 |
45700000 100000 43000 45165 3 6 |
45800000 100000 43000 45165 3 6 |
45900000 100000 43000 45165 3 6 |
46000000 3000000 1290000 1375638 80 90 |
46000000 100000 43000 45149 3 6 |
46100000 100000 43000 45149 3 6 |
46200000 100000 43000 45149 3 6 |
46300000 100000 43000 45149 3 6 |
46391052 17002 13374 13545 80 45 |
46391052 817002 664620 708390 65 14 |
46391052 2519002 497664 530232 47 65 |
46391052 1878002 1004593 1071143 95 42 |
46391052 286002 119700 127014 87 53 |
46400000 100000 43000 45163 3 6 |
46500000 100000 43000 45163 3 6 |
46600000 100000 43000 45163 3 6 |
46700000 100000 43000 45163 3 6 |
46777054 1430002 558646 595345 96 27 |
46777054 510002 266242 283355 49 2 |
46777054 1797002 1135184 1210461 97 22 |
46800000 100000 43000 45145 3 6 |
46900000 100000 43000 45145 3 6 |
47000000 100000 43000 45145 3 6 |
47100000 100000 43000 45145 3 6 |
47200000 100000 43000 45145 3 6 |
47300000 100000 43000 45145 3 6 |
47400000 100000 43000 45145 3 6 |
47500000 100000 43000 45145 3 6 |
47600000 100000 43000 45145 3 6 |
47700000 100000 43000 45145 3 6 |
47800000 100000 43000 45145 3 6 |
47900000 100000 43000 45145 3 6 |
48000000 100000 43000 45145 3 6 |
48100000 100000 43000 45145 3 6 |
48200000 100000 43000 45145 3 6 |
48300000 100000 43000 45145 3 6 |
48400000 100000 43000 45145 3 6 |
48500000 100000 43000 45145 3 6 |
48600000 100000 43000 45145 3 6 |
48674056 463002 194466 206717 24 90 |
48674056 535002 252525 268647 85 11 |
48700000 100000 43000 45167 3 6 |
48800000 100000 43000 45167 3 6 |
48900000 100000 43000 45167 3 6 |
49000000 3000000 1290000 1375586 80 90 |
49000000 100000 43000 45165 3 6 |
49100000 100000 43000 45165 3 6 |
49200000 100000 43000 45165 3 6 |
49300000 100000 43000 45165 3 6 |
49309058 2898002 1890030 2015829 86 82 |
49309058 368002 109137 115699 97 81 |
49400000 100000 43000 45149 3 6 |
49500000 100000 43000 45149 3 6 |
49600000 100000 43000 45149 3 6 |
49700000 100000 43000 45149 3 6 |
49777060 910002 378373 402977 33 11 |
49800000 100000 43000 45149 3 6 |
49900000 100000 43000 45149 3 6 |
50000000 100000 43000 45149 3 6 |
50100000 100000 43000 45149 3 6 |
50200000 100000 43000 45149 3 6 |
50300000 100000 43000 45149 3 6 |
50400000 100000 43000 45149 3 6 |
50500000 100000 43000 45149 3 6 |
50600000 100000 43000 45149 3 6 |
50700000 100000 43000 45149 3 6 |
50787062 860002 173620 184472 61 41 |
50787062 504002 251581 267714 8 69 |
50800000 100000 43000 45149 3 6 |
50900000 100000 43000 45149 3 6 |
51000000 100000 43000 45149 3 6 |
51100000 100000 43000 45149 3 6 |
51200000 100000 43000 45149 3 6 |
51300000 100000 43000 45149 3 6 |
51391064 2968002 292892 311795 48 40 |
51400000 100000 43000 45148 3 6 |
51500000 100000 43000 45148 3 6 |
51600000 100000 43000 45148 3 6 |
51700000 100000 43000 45148 3 6 |
51800000 100000 43000 45148 3 6 |
51900000 100000 43000 45148 3 6 |
52000000 3000000 1290000 1375603 80 90 |
52000000 100000 43000 45166 3 6 |
52100000 100000 43000 45166 3 6 |
52200000 100000 43000 45166 3 6 |
52300000 100000 43000 45166 3 6 |
52400000 100000 43000 45166 3 6 |
52500000 100000 43000 45166 3 6 |
52600000 100000 43000 45166 3 6 |
52700000 100000 43000 45166 3 6 |
52800000 100000 43000 45166 3 6 |
52900000 100000 43000 45166 3 6 |
53000000 100000 43000 45166 3 6 |
53100000 100000 43000 45166 3 6 |
53200000 100000 43000 45166 3 6 |
53300000 100000 43000 45166 3 6 |
53400000 100000 43000 45166 3 6 |
53500000 100000 43000 45166 3 6 |
53600000 100000 43000 45166 3 6 |
53700000 100000 43000 45166 3 6 |
53800000 100000 43000 45166 3 6 |
53900000 100000 43000 45166 3 6 |
54000000 100000 43000 45166 3 6 |
54100000 100000 43000 45166 3 6 |
54200000 100000 43000 45166 3 6 |
54300000 100000 43000 45166 3 6 |
54400000 100000 43000 45166 3 6 |
54459066 2568002 420130 447532 62 49 |
54459066 2182002 1185687 1264350 63 82 |
54459066 1542002 1453522 1550084 3 22 |
54500000 100000 43000 45148 3 6 |
54600000 100000 43000 45148 3 6 |
54700000 100000 43000 45148 3 6 |
54800000 100000 43000 45148 3 6 |
54900000 100000 43000 45148 3 6 |
55000000 3000000 1290000 1375612 80 90 |
55000000 100000 43000 45165 3 6 |
55100000 100000 43000 45165 3 6 |
55200000 100000 43000 45165 3 6 |
55300000 100000 43000 45165 3 6 |
55400000 100000 43000 45165 3 6 |
55500000 100000 43000 45165 3 6 |
55600000 100000 43000 45165 3 6 |
55700000 100000 43000 45165 3 6 |
55800000 100000 43000 45165 3 6 |
55900000 100000 43000 45165 3 6 |
56000000 100000 43000 45165 3 6 |
56100000 100000 43000 45165 3 6 |
56101068 844002 779368 830787 71 91 |
56200000 100000 43000 45161 3 6 |
56300000 100000 43000 45161 3 6 |
56400000 100000 43000 45161 3 6 |
56500000 100000 43000 45161 3 6 |
56600000 100000 43000 45161 3 6 |
56700000 100000 43000 45161 3 6 |
56800000 100000 43000 45161 3 6 |
56900000 100000 43000 45161 3 6 |
57000000 100000 43000 45161 3 6 |
57045070 2107002 1333939 1422502 89 66 |
57100000 100000 43000 45162 3 6 |
57200000 100000 43000 45162 3 6 |
57300000 100000 43000 45162 3 6 |
57400000 100000 43000 45162 3 6 |
57500000 100000 43000 45162 3 6 |
57600000 100000 43000 45162 3 6 |
57700000 100000 43000 45162 3 6 |
57800000 100000 43000 45162 3 6 |
57900000 100000 43000 45162 3 6 |
58000000 3000000 1290000 1375629 80 90 |
58000000 100000 43000 45148 3 6 |
58100000 100000 43000 45148 3 6 |
58200000 100000 43000 45148 3 6 |
58300000 100000 43000 45148 3 6 |
58400000 100000 43000 45148 3 6 |
58500000 100000 43000 45148 3 6 |
58600000 100000 43000 45148 3 6 |
58700000 100000 43000 45148 3 6 |
58800000 100000 43000 45148 3 6 |
58900000 100000 43000 45148 3 6 |
59000000 100000 43000 45148 3 6 |
59100000 100000 43000 45148 3 6 |
59200000 100000 43000 45148 3 6 |
59252072 2696002 989242 1054767 1 49 |
59252072 2656002 770386 821226 79 27 |
59252072 329002 22627 23424 94 23 |
59300000 100000 43000 45167 3 6 |
59400000 100000 43000 45167 3 6 |
59500000 100000 43000 45167 3 6 |
59600000 100000 43000 45167 3 6 |
59681074 1794002 1556982 1660485 4 1 |
59681074 2417002 732124 780422 2 49 |
59681074 806002 252797 269008 48 43 |
59700000 100000 43000 45165 3 6 |
59800000 100000 43000 45165 3 6 |
59900000 100000 43000 45165 3 6 |
60000000 100000 43000 45165 3 6 |
60100000 100000 43000 45165 3 6 |
60200000 100000 43000 45165 3 6 |
60300000 100000 43000 45165 3 6 |
60400000 100000 43000 45165 3 6 |
60500000 100000 43000 45165 3 6 |
60600000 100000 43000 45165 3 6 |
60700000 100000 43000 45165 3 6 |
60800000 100000 43000 45165 3 6 |
60900000 100000 43000 45165 3 6 |
/unsupported/trunk/crunch/load/go.bat |
---|
0,0 → 1,0 |
x ..\crunch\rrvalue crunch.dat |
/unsupported/trunk/crunch/load/makefile |
---|
0,0 → 1,43 |
# |
# |
# |
ifndef BASE |
BASE=../.. |
endif |
include $(BASE)/config/config.mk |
PROGS = step1 step1b step2 step2b step3 step4 |
include $(BASE)/config/example.mk |
step1: step1.c |
gcc step1.c -o step1 |
step1b: step1b.c |
gcc step1b.c -o step1b |
runstep1: step1 length.dat |
step1 < length.dat > shape.dat |
runstep1b: step1b length.dat |
step1b < length.dat > shape.dat |
step2: |
make -f $(SUBMAKE) APP=step2 INIT= OTHEROBJS="tune.o" OTHERINCL= |
step2b: |
make -f $(SUBMAKE) APP=step2b INIT= OTHEROBJS="tune.o" OTHERINCL= |
step3: |
make -f $(SUBMAKE) APP=step3 INIT= OTHEROBJS="tune.o" OTHERINCL= |
step4: step4.c |
gcc step4.c -o step4 |
runstep4: step4 hpattern.dat vpattern.dat |
step4 hpattern.dat vpattern.dat > crunch.dat |
clean:: |
rm *.o *.exe |
/unsupported/trunk/crunch/load/step1.c |
---|
0,0 → 1,60 |
/* |
Step 1: Generation of the Shape of the hard periodic load |
--------------------------------------------------------- |
Given the LENGTH.DAT file, we need to produce a random shape for the |
Periodic load. |
The random shape is the limit of bandwith that a certain time can be |
available for creating hard tasks. Hard task creation is disabled |
if the currently used bandwidth is higher than the limit. |
The random shape is contained into the SHAPE.DAT file. The file contains |
a sequence of numbers in the form: <time> <b>, |
where <time> is the time in seconds to wich refers the threshold, |
and <b> is the maximum bandwidth that can be used after <time>. |
The data is ordered by time. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#define MAX_BANDWIDTH 0xFFFFFFFF |
int x; |
int x_total[1000], x_B[1000]; |
int main() |
{ |
unsigned length; |
unsigned i; |
unsigned total; |
scanf("%d",&length); |
srand(time(0)); |
total = 0; |
x=0; |
while (total < length) { |
i = rand()%90; // percentage of use |
x_total[x] = total; |
x_B[x] = (MAX_BANDWIDTH/100)*i; |
fprintf(stderr,"x=%6d B=%d\n", x_total[x], i); |
x++; |
total += rand()%30+5; |
} |
printf("%d\n",x+1); |
for (i=0; i<x; i++) { |
printf("%u %u\n",x_total[i], x_B[i]); |
} |
printf("%u 0\n",length); |
return 0; |
} |
/unsupported/trunk/crunch/load/step2.c |
---|
0,0 → 1,455 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: step2.c,v 1.1 2004-07-05 14:17:15 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:15 $ |
------------ |
**/ |
/* |
* Copyright (C) 2000 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 |
* |
*/ |
#include "kernel/kern.h" |
#include "string.h" |
#include "ll/i386/x-dos.h" |
#include "modules/rr.h" |
#include "modules/dummy.h" |
#include "modules/edf.h" |
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include "drivers/keyb.h" |
#include "ctype.h" |
#include "tune.h" |
int ending=0; |
// Patterns |
#define MAX_PATTERN 10000 |
int max_pattern = 0; |
TIME pattern_t[MAX_PATTERN]; |
TIME pattern_period[MAX_PATTERN]; |
TIME pattern_wcet[MAX_PATTERN]; |
TIME pattern_iter[MAX_PATTERN]; |
void record_pattern(TIME t, TIME period, TIME wcet) |
{ |
pattern_t[max_pattern] = t; |
pattern_period[max_pattern] = period; |
pattern_wcet[max_pattern] = wcet; |
max_pattern++; |
} |
#define WCET_SLACK 500 |
void tune_pattern(void) |
{ |
int i,w; |
for (i=0; i<max_pattern; i++) { |
w = (pattern_wcet[i]*80)/100-WCET_SLACK; |
// if (w>pattern_wcet[i]-WCET_SLACK) w=pattern_wcet[i]-WCET_SLACK; |
pattern_iter[i] = tune_CPU_speed(w); |
} |
} |
// Shape modification |
#define DEFAULT_SHIFT 1000000 |
#define MAX_SHAPE 1000 |
bandwidth_t shape=0; // current shape threshold |
int current_shape = 0; |
bandwidth_t shape_B[MAX_SHAPE]; |
TIME shape_T[MAX_SHAPE]; |
int max_shape; |
void shape_event(void *arg) |
{ |
struct timespec t; |
shape = shape_B[current_shape]; |
current_shape++; |
if (current_shape == max_shape) |
ending = 1; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC((shape_T[current_shape]*1000000+DEFAULT_SHIFT),&t); |
// cprintf("At Time=%10ld.%10ld T=%10d Shape=%10d\n",t.tv_sec,t.tv_nsec, |
// shape_T[current_shape],shape_B[current_shape]); |
kern_event_post(&t,shape_event,NULL); |
} |
void start_shape(void) |
{ |
struct timespec t; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC(DEFAULT_SHIFT,&t); |
kern_cli(); |
kern_event_post(&t,shape_event,NULL); |
kern_sti(); |
} |
// Hard task |
#define ASTER_LIM 80 |
void *hard_task(void *arg) |
{ |
int j, x, y; |
char s[2]; |
x = 0; |
y = rand() % 6 + 3; |
s[0] = '*'; s[1] = 0; |
while (x < ASTER_LIM) { |
for (j=0; j<50; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
task_endcycle(); |
puts_xy(x,y,WHITE," "); |
x++; |
} |
return (void *)0; |
} |
#define MAX_PERIOD 100 |
// Load creation |
void *create_load(void *arg) |
{ |
PID p; |
HARD_TASK_MODEL m; |
TIME period = 0; |
TIME wcet = 0; |
int x; // adaptive bandwidth... |
int counter=0; |
char buf[100]; |
hard_task_default_model(m); |
x = MAX_PERIOD/3; |
place(0,11); |
// waiting for the start time :-) |
while (sys_gettime(NULL)<DEFAULT_SHIFT); |
while (1) { |
sprintf(buf,"Shape: %5.3f Band: %5.3f period: %10ld wcet: %10ld Time: %d", |
(double)shape/(double)MAX_BANDWIDTH, |
(double)EDF_usedbandwidth(0)/(double)MAX_BANDWIDTH, |
period, wcet, sys_gettime(NULL)/1000000); |
puts_xy(0,10,WHITE,buf); |
period = (x+rand() % (MAX_PERIOD-x+1))*1000; |
wcet = rand()%1000 * (period/1500); |
if ((MAX_BANDWIDTH/period)*wcet > shape - EDF_usedbandwidth(0)) |
wcet = (shape - EDF_usedbandwidth(0))/period; |
if (wcet < period/40) wcet=period/40; |
if (wcet < 500) wcet=500; |
if (EDF_usedbandwidth(0) + (MAX_BANDWIDTH/period)*wcet < shape) { |
hard_task_def_mit(m, period); |
hard_task_def_wcet(m, wcet); |
p = task_create("hard_task",hard_task,&m,NULL); |
if (p == -1) { |
x += rand()%10-4; |
} |
else { |
record_pattern(sys_gettime(NULL),period,wcet); |
cprintf("%d ",++counter); |
task_activate(p); |
x *= 3; |
x /= 4; |
} |
if (x<MAX_PERIOD/3) x = MAX_PERIOD/3; |
if (x > MAX_PERIOD) x = MAX_PERIOD; |
} |
if (ending) return (void *)0; |
} |
} |
// Read/Write part |
#define FILEBUF_DIM 10000 |
/* This is the buffer used by read_myfile */ |
char myfilebuf[FILEBUF_DIM]; |
/* This is the number of bytes read by read_myfile */ |
int myfilebuf_length; |
/* the buffer b is scannedc to search for numbers |
at the first non-number the function stops */ |
int geti(char *b, int *pos, int maxpos) |
{ |
int res = 0; |
// skip first chars |
while (!isdigit(b[*pos])) { |
(*pos)++; |
if (*pos == maxpos) return -1; // Error!!! |
} |
// read the numbers |
do { |
res = (res * 10) + b[*pos] - '0'; |
(*pos)++; |
} while (isdigit(b[*pos])); |
return res; |
} |
void parse_shape(void) |
{ |
int curr_filepos = 0; |
int i = 0; |
// read the number of tasks into the data file |
max_shape = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
if (max_shape == -1) { |
cprintf("Error parsing shape.dat file...\n"); |
sys_end(); |
} |
for (i=0; i<max_shape; i++) { |
// read the seven datas |
shape_T[i] = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
shape_B[i] = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
// check the last one for an error |
if (shape_B[i] == -1) { |
cprintf("Error parsing shape %d...\n",i); |
sys_end(); |
} |
} |
} |
void read_shapes(void) |
{ |
char name[]="shape.dat"; |
/* DOS file descriptor */ |
DOS_FILE *f; |
/* Error code */ |
int err; |
/* open the DOS file for reading (you can specify only "r" or "w") */ |
f = DOS_fopen(name,"r"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening %s...\n", err, name); |
myfilebuf_length = 0; |
return; |
} |
/* read up to 1000 chars */ |
myfilebuf_length = DOS_fread(&myfilebuf,1,FILEBUF_DIM,f); |
/* check for errors */ |
err = DOS_error(); |
cprintf("Read %d bytes from %s...\n", myfilebuf_length, name); |
if (err) { |
cprintf("Error %d reading %s...\n", err, name); |
myfilebuf_length = 0; |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/* This function write myfile.out (up to 30 chars) */ |
void write_hpattern(void *arg) |
{ |
DOS_FILE *f; /* DOS file descriptor */ |
int err=0; /* Error code */ |
int writtenbytes = 0; /* number of files written */ |
char buf[100]; |
int i; |
/* open the DOS file for writing (you can specify only "r" or "w") */ |
f = DOS_fopen("hpattern.dat","w"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening hpattern.dat...\n", err); |
return; |
} |
sprintf(buf,"%d\r\n",max_pattern); |
writtenbytes += DOS_fwrite(buf,1,strlen(buf),f); |
for (i=0; i<max_pattern; i++) { |
sprintf(buf,"%ld %ld %ld %ld\r\n", pattern_t[i], pattern_period[i], |
pattern_wcet[i], pattern_iter[i]); |
writtenbytes += DOS_fwrite(buf,1,strlen(buf),f); |
/* check for errors */ |
err = DOS_error(); |
if (err) break; |
} |
cprintf("Written %d bytes into hpattern.dat...\n", writtenbytes); |
if (err) { |
cprintf("Error %d writing hpattern.dat...\n", err); |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
void read_myfile(void); |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
EDF_register_level(EDF_ENABLE_ALL); |
RR_register_level(RRTICK, RR_MAIN_NO, mb); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
SEM_register_module(); |
read_shapes(); |
return TICK; |
} |
NRT_TASK_MODEL keyb_model; |
TASK __init__(void *arg) |
{ |
NRT_TASK_MODEL nrt; |
KEYB_PARMS kparms = BASE_KEYB; |
HARTPORT_init(); |
nrt_task_default_model(keyb_model); |
nrt_task_def_system(keyb_model); |
nrt_task_def_nokill(keyb_model); |
keyb_def_task(kparms,(TASK_MODEL *)&keyb_model); |
KEYB_init(&kparms); |
set_exchandler_grx(); |
nrt_task_default_model(nrt); |
srand(sys_gettime(NULL)); |
clear(); |
sys_atrunlevel(write_hpattern, NULL, RUNLEVEL_AFTER_EXIT); |
parse_shape(); |
start_shape(); |
task_activate(task_create("create_load",create_load,&nrt,NULL)); |
cputs("\nWaiting the end of the periodic tasks...\n"); |
while (task_counter != 1); |
// the task create_load preempt __init__ until all is finished! |
tune_pattern(); |
return (void *)0; |
} |
// never called!!! |
int main() |
{ |
return 0; |
} |
/unsupported/trunk/crunch/crunch/dosfs.c |
---|
0,0 → 1,177 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: dosfs.c,v 1.1 2004-07-05 14:17:13 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:13 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
#include <kernel/kern.h> |
#include <ll/i386/x-dos.h> |
#include <ctype.h> |
#include "crunch.h" |
#define FILEBUF_DIM 1000000 |
/* |
* |
* Read functions |
* |
*/ |
/* This is the buffer used by read_myfile */ |
char myfilebuf[FILEBUF_DIM]; |
/* This is the number of bytes read by read_myfile */ |
int myfilebuf_length; |
/* This function read myfile.txt (up to 1000 chars) */ |
void read_myfile(char *name) |
{ |
/* DOS file descriptor */ |
DOS_FILE *f; |
/* Error code */ |
int err; |
/* open the DOS file for reading (you can specify only "r" or "w") */ |
f = DOS_fopen(name,"r"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening %s...\n", err, name); |
myfilebuf_length = 0; |
return; |
} |
/* read up to 1000 chars */ |
myfilebuf_length = DOS_fread(&myfilebuf,1,FILEBUF_DIM,f); |
/* check for errors */ |
err = DOS_error(); |
cprintf("Read %d bytes from %s...\n", myfilebuf_length, name); |
if (err) { |
cprintf("Error %d reading %s...\n", err, name); |
myfilebuf_length = 0; |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/* |
* |
* Parsing functions |
* |
*/ |
int geti(char *b, int *pos, int maxpos); |
/* |
* This function crunches the buffer that contains the configuration file. |
* m is the maximum size of the t array... |
*/ |
void crunch_file(struct task_struct *t, int *curr_table_dim, int m) |
{ |
int curr_filepos = 0; |
int max_task_pos; |
int i = 0; |
// read the number of tasks into the data file |
max_task_pos = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
if (max_task_pos == -1) { |
cprintf("Error parsing configuration file...\n"); |
*curr_table_dim = 0; |
} |
for (i=0; i<max_task_pos; i++) { |
// read the seven datas |
t[i].index = i; |
t[i].time = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].type = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].reldline = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].wcet = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].iterations = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].value = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].penalty = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
// check the last one for an error |
if (t[i].penalty == -1) { |
cprintf("Error parsing task %d...\n",i); |
break; |
} |
} |
*curr_table_dim = i; |
} |
/* the buffer b is scannedc to search for numbers |
at the first non-number the function stops */ |
int geti(char *b, int *pos, int maxpos) |
{ |
int res = 0; |
// skip first chars |
while (!isdigit(b[*pos])) { |
(*pos)++; |
if (*pos == maxpos) return -1; // Error!!! |
} |
// read the numbers |
do { |
res = (res * 10) + b[*pos] - '0'; |
(*pos)++; |
} while (isdigit(b[*pos])); |
return res; |
} |
/unsupported/trunk/crunch/crunch/rrvalue.c |
---|
0,0 → 1,749 |
/* |
* 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: rrvalue.c,v 1.1 2004-07-05 14:17:13 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:13 $ |
------------ |
This file contains the scheduling module RRVALUE (Round Robin) |
Read rrvalue.h for further details. |
**/ |
/* |
* 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 WARRSOFTANTY; without even the implied waRRSOFTanty 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 |
* |
*/ |
#include "rrvalue.h" |
#include <ll/stdio.h> |
#include <ll/string.h> |
#include <kernel/model.h> |
#include <kernel/descr.h> |
#include <kernel/var.h> |
#include <kernel/func.h> |
/*+ Status used in the level +*/ |
#define RRVALUE_READY MODULE_STATUS_BASE |
#define RRVALUE_DELAY MODULE_STATUS_BASE+1 |
#define RRVALUE_IDLE MODULE_STATUS_BASE+2 |
/*+ the level redefinition for the Round Robin level +*/ |
typedef struct { |
level_des l; /*+ the standard level descriptor +*/ |
int nact[MAX_PROC]; /*+ number of pending activations +*/ |
QQUEUE ready; /*+ the ready queue +*/ |
int slice; /*+ the level's time slice +*/ |
TIME period[MAX_PROC]; /*+ activation period (reldlines for value tasks)+*/ |
struct timespec reactivation_time[MAX_PROC]; |
/*+ the time at witch the reactivation timer is post, |
absdlines for value tasks +*/ |
int reactivation_timer[MAX_PROC]; |
/*+ the recativation timer +*/ |
BYTE periodic[MAX_PROC]; |
struct multiboot_info *multiboot; /*+ used if the level have to insert |
the main task +*/ |
BYTE models; /*+ Task Model that the Module can Handle +*/ |
int totalvalue; |
int value[MAX_PROC]; |
int penalty[MAX_PROC]; |
int max_tasks; /*+ Max number of tasks that the level can afford +*/ |
} RRVALUE_level_des; |
static char *RRVALUE_status_to_a(WORD status) |
{ |
if (status < MODULE_STATUS_BASE) |
return status_to_a(status); |
switch (status) { |
case RRVALUE_READY: return "RRVALUE_Ready"; |
case RRVALUE_DELAY: return "RRVALUE_Delay"; |
case RRVALUE_IDLE : return "RRVALUE_Idle"; |
default : return "RRVALUE_Unknown"; |
} |
} |
/* this is the periodic reactivation of the task... it is posted only |
if the task is a periodic task */ |
static void RRVALUE_timer_reactivate(void *par) |
{ |
PID p = (PID) par; |
RRVALUE_level_des *lev; |
// kern_printf("react"); |
lev = (RRVALUE_level_des *)level_table[proc_table[p].task_level]; |
if (proc_table[p].status == RRVALUE_IDLE) { |
/* the task has finished the current activation and must be |
reactivated */ |
TIMESPEC_ASSIGN(&proc_table[p].request_time, |
&lev->reactivation_time[p]); |
ll_gettime(TIME_EXACT, &proc_table[p].request_time); |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
event_need_reschedule(); |
} |
else if (lev->nact[p] >= 0) |
/* the task has not completed the current activation, so we save |
the activation incrementing nact... */ |
lev->nact[p]++; |
/* repost the event at the next period end... */ |
ADDUSEC2TIMESPEC(lev->period[p], &lev->reactivation_time[p]); |
lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p], |
RRVALUE_timer_reactivate, |
(void *)p); |
/* tracer stuff */ |
// trc_logevent(TRC_INTACTIVATION,&p); |
} |
/*+ this function is called when a task finish his delay +*/ |
static void RRVALUE_timer_delay(void *par) |
{ |
PID p = (PID) par; |
RRVALUE_level_des *lev; |
lev = (RRVALUE_level_des *)level_table[proc_table[p].task_level]; |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
proc_table[p].delay_timer = NIL; /* Paranoia */ |
// kern_printf(" DELAY TIMER %d ", p); |
event_need_reschedule(); |
} |
static int RRVALUE_level_accept_task_model(LEVEL l, TASK_MODEL *m) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if ((m->pclass == NRT_PCLASS || m->pclass == (NRT_PCLASS | l)) && lev->models & RRVALUE_ONLY_NRT) |
return 0; |
else if ((m->pclass == SOFT_PCLASS || m->pclass == (SOFT_PCLASS | l)) && lev->models & RRVALUE_ONLY_SOFT) |
return 0; |
else if ((m->pclass == HARD_PCLASS || m->pclass == (HARD_PCLASS | l)) && lev->models & RRVALUE_ONLY_HARD) |
return 0; |
else if ((m->pclass == VALUE_PCLASS || m->pclass == (VALUE_PCLASS | l)) && lev->models & RRVALUE_ONLY_VALUE) |
return 0; |
else |
return -1; |
} |
static int RRVALUE_level_accept_guest_model(LEVEL l, TASK_MODEL *m) |
{ |
return -1; |
} |
static void RRVALUE_level_status(LEVEL l) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
PID p = qq_queryfirst(&lev->ready); |
kern_printf("Slice: %d \n", lev->slice); |
while (p != NIL) { |
kern_printf("Pid: %d\t Name: %20s Status: %s\n",p,proc_table[p].name, |
RRVALUE_status_to_a(proc_table[p].status)); |
p = proc_table[p].next; |
} |
for (p=0; p<MAX_PROC; p++) |
if (proc_table[p].task_level == l && proc_table[p].status != RRVALUE_READY |
&& proc_table[p].status != FREE ) |
kern_printf("Pid: %d\t Name: %20s Status: %s\n",p,proc_table[p].name, |
RRVALUE_status_to_a(proc_table[p].status)); |
} |
/* This is not efficient but very fair :-) |
The need of all this stuff is because if a task execute a long time |
due to (shadow!) priority inheritance, then the task shall go to the |
tail of the queue many times... */ |
static PID RRVALUE_level_scheduler(LEVEL l) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
PID p; |
for (;;) { |
p = qq_queryfirst(&lev->ready); |
if (p == -1) |
return p; |
//{kern_printf("(s%d)",p); return p;} |
// kern_printf("(p=%d l=%d avail=%d wcet =%d)\n",p,l,proc_table[p].avail_time, proc_table[p].wcet); |
if (proc_table[p].avail_time <= 0) { |
proc_table[p].avail_time += proc_table[p].wcet; |
qq_extract(p,&lev->ready); |
qq_insertlast(p,&lev->ready); |
} |
else |
//{kern_printf("(s%d)",p); return p;} |
return p; |
} |
} |
static int RRVALUE_level_guarantee(LEVEL l, bandwidth_t *freebandwidth) |
{ |
/* the RRVALUE level always guarantee... the function is defined because |
there can be an aperiodic server at a level with less priority than |
the RRVALUE that need guarantee (e.g., a TBS server) */ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
// kern_printf("R%d ",lev->max_tasks>0); |
return lev->max_tasks > 0; |
} |
static int RRVALUE_task_create(LEVEL l, PID p, TASK_MODEL *m) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
// kern_printf("create %d mod %d\n",p,m->pclass); |
/* the task state is set at SLEEP by the general task_create |
the only thing to set remains the capacity stuffs that are set |
to the values passed in the model... */ |
/* I used the wcet field because using wcet can account if a task |
consume more than the timeslice... */ |
if (lev->models & RRVALUE_ONLY_NRT && |
(m->pclass == NRT_PCLASS || m->pclass == (NRT_PCLASS | l))) { |
NRT_TASK_MODEL *nrt = (NRT_TASK_MODEL *)m; |
// kern_printf("nrt"); |
if (nrt->slice) { |
proc_table[p].avail_time = nrt->slice; |
proc_table[p].wcet = nrt->slice; |
} |
else { |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
} |
proc_table[p].control |= CONTROL_CAP; |
if (nrt->arrivals == SAVE_ARRIVALS) |
lev->nact[p] = 0; |
else |
lev->nact[p] = -1; |
lev->periodic[p] = 0; |
lev->period[p] = 0; |
lev->value[p] = 0; |
lev->penalty[p] = 0; |
} |
else if (lev->models & RRVALUE_ONLY_SOFT && |
(m->pclass == SOFT_PCLASS || m->pclass == (SOFT_PCLASS | l))) { |
SOFT_TASK_MODEL *soft = (SOFT_TASK_MODEL *)m; |
// kern_printf("soft"); |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
proc_table[p].control |= CONTROL_CAP; |
if (soft->arrivals == SAVE_ARRIVALS) |
lev->nact[p] = 0; |
else |
lev->nact[p] = -1; |
if (soft->periodicity == PERIODIC) { |
lev->periodic[p] = 1; |
lev->period[p] = soft->period; |
} |
else { |
lev->periodic[p] = 0; |
lev->period[p] = 0; |
} |
lev->value[p] = 0; |
lev->penalty[p] = 0; |
} |
else if (lev->models & RRVALUE_ONLY_HARD && |
(m->pclass == HARD_PCLASS || m->pclass == (HARD_PCLASS | l))) { |
HARD_TASK_MODEL *hard = (HARD_TASK_MODEL *)m; |
// kern_printf("hard"); |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
proc_table[p].control |= CONTROL_CAP; |
lev->nact[p] = 0; |
if (hard->periodicity == PERIODIC) { |
lev->periodic[p] = 1; |
lev->period[p] = hard->mit; |
} |
else { |
lev->periodic[p] = 0; |
lev->period[p] = 0; |
} |
lev->value[p] = 0; |
lev->penalty[p] = 0; |
} |
if (lev->models & RRVALUE_ONLY_VALUE && |
(m->pclass == VALUE_PCLASS || m->pclass == (VALUE_PCLASS | l))) { |
VALUE_TASK_MODEL *v = (VALUE_TASK_MODEL *)m; |
proc_table[p].avail_time = lev->slice; |
proc_table[p].wcet = lev->slice; |
proc_table[p].control |= CONTROL_CAP; |
lev->nact[p] = -1; |
lev->periodic[p] = 0; |
lev->value[p] = v->value; |
lev->penalty[p] = v->penalty; |
lev->period[p] = v->dline; |
} |
lev->max_tasks--; |
return 0; /* OK */ |
} |
static void RRVALUE_task_detach(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
//lev->totalvalue += lev->penalty[p]; |
lev->max_tasks++; |
} |
static int RRVALUE_task_eligible(LEVEL l, PID p) |
{ |
return 0; /* if the task p is chosen, it is always eligible */ |
} |
#ifdef __TEST1__ |
extern int testactive; |
extern struct timespec s_stime[]; |
extern TIME s_curr[]; |
extern TIME s_PID[]; |
extern int useds; |
#endif |
static void RRVALUE_task_dispatch(LEVEL l, PID p, int nostop) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
struct timespec t; |
/* the task state is set EXE by the scheduler() |
we extract the task from the ready queue |
NB: we can't assume that p is the first task in the queue!!! */ |
qq_extract(p, &lev->ready); |
// kill the task if it already has missed the deadline |
t = proc_table[p].request_time; |
ADDUSEC2TIMESPEC(lev->period[p],&t); |
if (TIMESPEC_A_LT_B(&t,&schedule_time)) |
proc_table[p].control |= KILL_REQUEST; |
} |
static void RRVALUE_task_epilogue(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
/* check if the slice is finished and insert the task in the coRRVALUEect |
qqueue position */ |
if (proc_table[p].avail_time <= 0) { |
proc_table[p].avail_time += proc_table[p].wcet; |
qq_insertlast(p,&lev->ready); |
proc_table[p].control |= KILL_REQUEST; |
} |
else |
/* curr is >0, so the running task have to run for another cuRRVALUE usec */ |
qq_insertfirst(p,&lev->ready); |
proc_table[p].status = RRVALUE_READY; |
} |
static void RRVALUE_task_activate(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
/* Test if we are trying to activate a non sleeping task */ |
/* save activation (only if needed... */ |
if (proc_table[p].status != SLEEP && proc_table[p].status != RRVALUE_IDLE) { |
if (lev->nact[p] != -1) |
lev->nact[p]++; |
return; |
} |
ll_gettime(TIME_EXACT, &proc_table[p].request_time); |
/* Insert task in the coRRVALUEect position */ |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
/* Set the reactivation timer */ |
TIMESPEC_ASSIGN(&lev->reactivation_time[p], &proc_table[p].request_time); |
ADDUSEC2TIMESPEC(lev->period[p], &lev->reactivation_time[p]); |
if (lev->periodic[p]) |
{ |
// timespec stuffs moved up for value tasks! |
lev->reactivation_timer[p] = kern_event_post(&lev->reactivation_time[p], |
RRVALUE_timer_reactivate, |
(void *)p); |
} |
} |
static void RRVALUE_task_insert(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
/* Similar to RRVALUE_task_activate, but we don't check in what state |
the task is and we don't set the request_time */ |
/* Insert task in the coRRVALUEect position */ |
proc_table[p].status = RRVALUE_READY; |
qq_insertlast(p,&lev->ready); |
} |
static void RRVALUE_task_extract(LEVEL l, PID p) |
{ |
/* Extract the running task from the level |
. we have already extract it from the ready queue at the dispatch time. |
. the capacity event have to be removed by the generic kernel |
. the wcet don't need modification... |
. the state of the task is set by the calling function |
So, we do nothing!!! |
*/ |
} |
static void RRVALUE_task_endcycle(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if (lev->nact[p] > 0) { |
/* continue!!!! */ |
ll_gettime(TIME_EXACT, &proc_table[p].request_time); |
lev->nact[p]--; |
// qq_insertlast(p,&lev->ready); |
qq_insertfirst(p,&lev->ready); |
proc_table[p].status = RRVALUE_READY; |
} |
else |
proc_table[p].status = RRVALUE_IDLE; |
} |
static void RRVALUE_task_end(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
struct timespec t; |
lev->nact[p] = -1; |
/* we delete the reactivation timer */ |
if (lev->periodic[p]) { |
event_delete(lev->reactivation_timer[p]); |
lev->reactivation_timer[p] = -1; |
} |
/* then, we insert the task in the free queue */ |
proc_table[p].status = FREE; |
q_insert(p,&freedesc); |
// account for the value only if it<finishes in time |
if (lev->penalty[p] || lev->value[p]) { |
ll_gettime(TIME_EXACT,&t); |
if (TIMESPEC_A_LT_B(&t, &lev->reactivation_time[p])) |
lev->totalvalue += lev->penalty[p] + lev->value[p]; |
} |
lev->max_tasks++; |
} |
static void RRVALUE_task_sleep(LEVEL l, PID p) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if (lev->nact[p] >= 0) lev->nact[p] = 0; |
/* we delete the reactivation timer */ |
if (lev->periodic[p]) { |
event_delete(lev->reactivation_timer[p]); |
lev->reactivation_timer[p] = -1; |
} |
proc_table[p].status = SLEEP; |
} |
static void RRVALUE_task_delay(LEVEL l, PID p, TIME usdelay) |
{ |
// RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
struct timespec wakeuptime; |
/* equal to RRVALUE_task_endcycle */ |
proc_table[p].status = RRVALUE_DELAY; |
/* we need to delete this event if we kill the task while it is sleeping */ |
ll_gettime(TIME_EXACT,&wakeuptime); |
ADDUSEC2TIMESPEC(usdelay,&wakeuptime); |
proc_table[p].delay_timer = kern_event_post(&wakeuptime, |
RRVALUE_timer_delay, |
(void *)p); |
} |
static int RRVALUE_guest_create(LEVEL l, PID p, TASK_MODEL *m) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); return 0; } |
static void RRVALUE_guest_detach(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_dispatch(LEVEL l, PID p, int nostop) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_epilogue(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_activate(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_insert(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_extract(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_endcycle(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_end(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_sleep(LEVEL l, PID p) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
static void RRVALUE_guest_delay(LEVEL l, PID p,DWORD tickdelay) |
{ kern_raise(XUNVALID_GUEST,exec_shadow); } |
/* Registration functions */ |
/*+ This init function install the "main" task +*/ |
static void RRVALUE_call_main(void *l) |
{ |
LEVEL lev; |
PID p; |
NRT_TASK_MODEL m; |
void *mb; |
lev = (LEVEL)l; |
nrt_task_default_model(m); |
nrt_task_def_level(m,lev); /* with this we are sure that the task aRRVALUEives |
to the coRRVALUEect level */ |
mb = ((RRVALUE_level_des *)level_table[lev])->multiboot; |
nrt_task_def_arg(m,mb); |
nrt_task_def_usemath(m); |
nrt_task_def_nokill(m); |
nrt_task_def_ctrl_jet(m); |
p = task_create("Main", __init__, (TASK_MODEL *)&m, NULL); |
if (p == NIL) |
printk("\nPanic!!! can't create main task...\n"); |
RRVALUE_task_activate(lev,p); |
} |
/*+ Registration function: |
TIME slice the slice for the Round Robin queue |
int createmain 1 if the level creates the main task 0 otherwise |
struct multiboot_info *mb used if createmain specified +*/ |
void RRVALUE_register_level(TIME slice, |
int createmain, |
struct multiboot_info *mb, |
BYTE models, int m) |
{ |
LEVEL l; /* the level that we register */ |
RRVALUE_level_des *lev; /* for readableness only */ |
PID i; |
printk("RRVALUE_register_level\n"); |
/* request an entry in the level_table */ |
l = level_alloc_descriptor(); |
/* alloc the space needed for the RRVALUE_level_des */ |
lev = (RRVALUE_level_des *)kern_alloc(sizeof(RRVALUE_level_des)); |
printk(" lev=%d\n",(int)lev); |
/* update the level_table with the new entry */ |
level_table[l] = (level_des *)lev; |
/* fill the standard descriptor */ |
strncpy(lev->l.level_name, RRVALUE_LEVELNAME, MAX_LEVELNAME); |
lev->l.level_code = RRVALUE_LEVEL_CODE; |
lev->l.level_version = RRVALUE_LEVEL_VERSION; |
lev->l.level_accept_task_model = RRVALUE_level_accept_task_model; |
lev->l.level_accept_guest_model = RRVALUE_level_accept_guest_model; |
lev->l.level_status = RRVALUE_level_status; |
lev->l.level_scheduler = RRVALUE_level_scheduler; |
lev->l.level_guarantee = RRVALUE_level_guarantee; |
lev->l.task_create = RRVALUE_task_create; |
lev->l.task_detach = RRVALUE_task_detach; |
lev->l.task_eligible = RRVALUE_task_eligible; |
lev->l.task_dispatch = RRVALUE_task_dispatch; |
lev->l.task_epilogue = RRVALUE_task_epilogue; |
lev->l.task_activate = RRVALUE_task_activate; |
lev->l.task_insert = RRVALUE_task_insert; |
lev->l.task_extract = RRVALUE_task_extract; |
lev->l.task_endcycle = RRVALUE_task_endcycle; |
lev->l.task_end = RRVALUE_task_end; |
lev->l.task_sleep = RRVALUE_task_sleep; |
lev->l.task_delay = RRVALUE_task_delay; |
lev->l.guest_create = RRVALUE_guest_create; |
lev->l.guest_detach = RRVALUE_guest_detach; |
lev->l.guest_dispatch = RRVALUE_guest_dispatch; |
lev->l.guest_epilogue = RRVALUE_guest_epilogue; |
lev->l.guest_activate = RRVALUE_guest_activate; |
lev->l.guest_insert = RRVALUE_guest_insert; |
lev->l.guest_extract = RRVALUE_guest_extract; |
lev->l.guest_endcycle = RRVALUE_guest_endcycle; |
lev->l.guest_end = RRVALUE_guest_end; |
lev->l.guest_sleep = RRVALUE_guest_sleep; |
lev->l.guest_delay = RRVALUE_guest_delay; |
/* fill the RRVALUE descriptor part */ |
for (i = 0; i < MAX_PROC; i++) { |
lev->nact[i] = -1; |
NULL_TIMESPEC(&lev->reactivation_time[i]); |
lev->reactivation_timer[i] = -1; |
lev->periodic[i] = 0; |
lev->period[i] = 0; |
lev->value[i] = 0; |
lev->penalty[i] = 0; |
} |
qq_init(&lev->ready); |
if (slice < RRVALUE_MINIMUM_SLICE) slice = RRVALUE_MINIMUM_SLICE; |
if (slice > RRVALUE_MAXIMUM_SLICE) slice = RRVALUE_MAXIMUM_SLICE; |
lev->slice = slice; |
lev->multiboot = mb; |
lev->models = models; |
lev->totalvalue = 0; |
lev->max_tasks = m; |
if (createmain) |
sys_atrunlevel(RRVALUE_call_main,(void *) l, RUNLEVEL_INIT); |
} |
/*+ returns the current total value +*/ |
int RRVALUE_getvalue(LEVEL l) |
{ |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if (lev->l.level_code == RRVALUE_LEVEL_CODE && |
lev->l.level_version == RRVALUE_LEVEL_VERSION) |
return lev->totalvalue; |
else |
return 0; |
} |
/* |
* These functions are needed only to link with the crunch application |
* They should not be used in other applications. |
*/ |
#include <modules/edf.h> |
void crunch_register_models(struct multiboot_info *mb) |
{ |
EDF_register_level(EDF_ENABLE_ALL); |
RRVALUE_register_level(10000, RRVALUE_MAIN_NO, mb, |
RRVALUE_ONLY_HARD|RRVALUE_ONLY_SOFT|RRVALUE_ONLY_VALUE,5); |
} |
int crunch_taskaccepted(PID p) |
{ |
LEVEL l = proc_table[p].task_level; |
RRVALUE_level_des *lev = (RRVALUE_level_des *)(level_table[l]); |
if (lev->max_tasks > 0) { |
lev->totalvalue -= lev->penalty[p]; |
return 1; |
} |
else { |
return 0; |
} |
} |
int crunch_getvalue() |
{ |
return RRVALUE_getvalue(2); |
} |
/unsupported/trunk/crunch/crunch/crunch.c |
---|
0,0 → 1,614 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: crunch.c,v 1.1 2004-07-05 14:17:12 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:12 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
/* |
* Crunch.c |
*/ |
//#define DEBUG_CONFFILE |
//#define DEBUG_MASTER_HARDCREATE |
//#define DEBUG_MASTER_VALUECREATE |
#include "valmodel.h" |
#include "crunch.h" |
#include <kernel/kern.h> |
/* |
* This small application simply reads the tasks and executes them. |
* When they are all finished, the system shuts down. |
*/ |
/* |
* this table contains all the tasks information collected from the |
* configuration file |
*/ |
#define MAX_PATTERN 100000 |
struct task_struct pattern[MAX_PATTERN]; |
int pattern_dim; |
/* This is some data collected by the task destructors that |
* can be useful for understanding how the Module works */ |
/* this int contains the value as seen by the application */ |
int current_value = 0; |
int max_value = 0; |
int min_value = 0; |
int max_created_value = 0; |
int min_created_value = 0; |
/* the number of finished tasks */ |
int current_finished_tasks = 0; |
/* this flag is triggered by the master task when it finishes */ |
int finished = 0; |
/* number of instances of an hard tasks |
NOTE that it is 79 and not 80 as in the generation algorithm!!! */ |
#define ASTER_LIM 79 |
// Master task stuffs |
PID master_pid; // the PID of the master task |
int current_task; // the current position in the pattern array |
// number of periodic tasks currently running... |
int current_periodic_tasks = 0; |
PID info_pid; // the PID of the master task |
/* |
* This function prints all the data read from the configuration file |
*/ |
void print_conffile(char *name) |
{ |
int i; |
cprintf("--------------------------------------------------------------------\n"); |
cprintf("Configuration file name : %s\n", name); |
cprintf("Number of tasks in the pattern : %d\n", pattern_dim); |
cprintf(" Time Hard/Value Dline WCET Iterations Value Penalty\n"); |
cprintf("--------------------------------------------------------------------\n"); |
for (i=0; i<pattern_dim; i++) { |
cprintf("%10d %10d %10d %10d %10d %5d %7d\n", |
pattern[i].time, |
pattern[i].type, |
pattern[i].reldline, |
pattern[i].wcet, |
pattern[i].iterations, |
pattern[i].value, |
pattern[i].penalty); |
} |
cprintf("--------------------------------------------------------------------\n"); |
} |
/* |
* main() |
*/ |
void scenario(void); |
void create_master_task(void); |
void create_info_task(void); |
void update_scenario(void); |
void print_statistics(void); |
int main(int argc, char **argv) |
{ |
srand(18); |
set_exchandler_grx(); |
/* |
* Parse the configuration file |
*/ |
crunch_file(pattern, &pattern_dim, MAX_PATTERN); |
if (!pattern_dim) { |
cprintf("Nothing to do!\n"); |
sys_end(); |
} |
/* |
* Print configuration file |
*/ |
#ifdef DEBUG_CONFFILE |
print_conffile(argv[1]); return 0; |
#endif |
/* |
* Print the scenario |
*/ |
scenario(); |
/* |
* Create the high priority task that will create all the periodic |
* and value tasks. |
*/ |
create_master_task(); |
/* |
* Create a periodic task to display some statistical informations |
*/ |
create_info_task(); |
/* |
* While in idle time, update the scenario |
*/ |
while (!finished || task_counter != 3) { |
update_scenario(); |
} |
print_statistics(); |
return 0; |
} |
/* |
* |
* MASTER TASK STUFFS |
* |
*/ |
void activate_master_task(void *); |
void *master_task(void *); |
void *hard_task(void *); |
void *value_task(void *); |
void create_master_task() |
{ |
NRT_TASK_MODEL nrt; |
struct timespec t; |
nrt_task_default_model(nrt); |
nrt_task_def_usemath(nrt); |
nrt_task_def_ctrl_jet(nrt); |
nrt_task_def_save_arrivals(nrt); |
master_pid = task_create("master", master_task, &nrt, NULL); |
if(master_pid == -1) { |
cprintf("Cannot create the master task!!!\n"); |
sys_end(); |
} |
current_task = 0; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC(pattern[0].time, &t); |
kern_cli(); |
kern_event_post(&t, activate_master_task, NULL); |
kern_sti(); |
} |
void activate_master_task(void *arg) |
{ |
task_activate(master_pid); |
} |
void *master_task(void *arg) |
{ |
int current_time; |
HARD_TASK_MODEL hard; |
PID phard; |
VALUE_TASK_MODEL value; |
PID group_container_pid[100]; |
int group_container_pattern[100]; |
int group_container_index; |
// used to record the group_creation for value task |
int i; |
PID p; |
task_nopreempt(); |
hard_task_default_model(hard); |
hard_task_def_usemath(hard); |
value_task_default_model(value); |
value_task_def_usemath(value); |
do { |
// current_task indexes the next task to be activated. |
current_time = pattern[current_task].time; |
// create and activate all the hard tasks with the same starting time |
if (!pattern[current_task].type) { |
do { |
#ifdef DEBUG_MASTER_HARDCREATE |
{ int i=current_task; cprintf("%10d %10d %10d %10d %10d %5d %7d\n", |
pattern[i].time, pattern[i].type, pattern[i].reldline, |
pattern[i].wcet, pattern[i].iterations, pattern[i].value, |
pattern[i].penalty); } |
#endif |
hard_task_def_mit(hard, pattern[current_task].reldline); |
hard_task_def_wcet(hard, pattern[current_task].wcet); |
hard_task_def_arg(hard, (void *)current_task); |
phard = task_create("hard_task", hard_task, &hard, NULL); |
if (phard == NIL) { |
clear(); |
cprintf("Cannot create hard task! (errno=%d)\n", errno); |
sys_end(); |
} |
else { |
task_activate(phard); |
current_periodic_tasks++; |
} |
current_task++; |
} while (current_task != pattern_dim && |
pattern[current_task].time == current_time && |
!pattern[current_task].type); |
} |
// create and activate all the soft tasks with the same starting time |
if (current_task != pattern_dim && |
pattern[current_task].time == current_time && |
pattern[current_task].type) { |
group_container_index = 0; |
kern_cli(); |
while (current_task != pattern_dim && |
pattern[current_task].time == current_time && |
pattern[current_task].type) { |
#ifdef DEBUG_MASTER_VALUECREATE |
{ int i=current_task; cprintf("V%10d %10d %10d %10d %10d %5d %7d\n", |
pattern[i].time, pattern[i].type, pattern[i].reldline, |
pattern[i].wcet, pattern[i].iterations, pattern[i].value, |
pattern[i].penalty); } |
#endif |
// kern_printf("master_task: current_value=%d\n",current_value); |
value_task_def_wcet(value,pattern[current_task].wcet); |
value_task_def_dline(value,pattern[current_task].reldline); |
value_task_def_value(value,pattern[current_task].value); |
value_task_def_penalty(value,pattern[current_task].penalty); |
value_task_def_arg(value, (void *)current_task); |
p = group_create("value_task", value_task, (TASK_MODEL *)&value, NULL); |
// kern_printf("\nCreating %d PID = %d\n",current_task, p); |
// we need to know which task we are inserting, so we insert it in |
// a list to check them later |
group_container_pid[group_container_index]=p; |
group_container_pattern[group_container_index]=current_task; |
group_container_index++; |
current_task++; |
} |
/* {kern_printf("group_container: index=%d, 0=%d, 1=%d, 2=%d, 3=%d\n", |
group_container_index, group_container_pid[0], group_container_pid[1], |
group_container_pid[2], group_container_pid[3]);}*/ |
guarantee(); |
// kern_printf("group_container_index=%d\n",group_container_index); |
for (i=0; i<group_container_index; i++) { |
// {kern_printf("i=%d, group_container: index=%d, 0=%d, 1=%d, 2=%d, 3=%d\n",i, |
// group_container_index, group_container_pid[0], group_container_pid[1], |
// group_container_pid[2], group_container_pid[3]);} |
p = group_container_pid[i]; |
// kern_printf("+%d\n",p); |
max_created_value += pattern[group_container_pattern[i]].value; |
min_created_value -= pattern[group_container_pattern[i]].penalty; |
if (p == NIL) continue; |
if (crunch_taskaccepted(p)) { |
// we need to pass the original model for the task... |
// but just the common part is needed O:-) |
// account for the penalty before the task starts |
current_value -= pattern[group_container_pattern[i]].penalty; |
max_value += pattern[group_container_pattern[i]].value; |
min_value -= pattern[group_container_pattern[i]].penalty; |
value_task_def_arg(value, (void *)group_container_pattern[i]); |
group_create_accept(p,(TASK_MODEL *)&value); |
// kern_printf("Accetto task PID=%d\n",p); |
} |
else { |
group_container_pid[i] = NIL; |
// kern_printf("Rigetto task PID=%d\n",p); |
group_create_reject(p); |
} |
} |
kern_sti(); |
for (i=0; i<group_container_index; i++) { |
// kern_printf("Attivo %d PID=%d\n",i,group_container_pid[i]); |
if (group_container_pid[i] != NIL) |
task_activate(group_container_pid[i]); |
} |
} |
if (current_task != pattern_dim) { |
struct timespec t; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC(pattern[current_task].time, &t); |
kern_cli(); |
kern_event_post(&t, activate_master_task, NULL); |
task_endcycle(); |
} |
} while(current_task != pattern_dim); |
/* since all the tasks has been activated, the master_task will stop |
forever. |
In that way we can look at the elapsed time consumed by the master task. |
*/ |
// task_nopreempt(); |
finished = 1; |
task_endcycle(); |
return (void *)0; |
} |
#define DEFAULT_SHIFT 1000000 |
void *hard_task(void *arg) |
{ |
struct timespec dl, curr; // for deadline checking |
int index, j, x, y, temp; |
char s[2]; |
struct timespec t; |
int b; |
task_setcanceltype(TASK_CANCEL_ASYNCHRONOUS,&temp); |
index = (int)arg; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC((DEFAULT_SHIFT*2)/3,&t); |
b = TIMESPEC_A_LT_B(&proc_table[exec_shadow].request_time,&t); |
do { |
x = 0; |
y = rand() % 6 + 3; |
s[0] = '*'; s[1] = 0; |
while (x < ASTER_LIM) { |
for (j=0; j<pattern[index].iterations; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
// Dline check :-) it is not perfect, but it works :-) |
kern_cli(); |
ll_gettime(TIME_EXACT,&curr); |
dl = proc_table[exec_shadow].request_time; |
ADDUSEC2TIMESPEC(pattern[index].reldline, &dl); |
if (TIMESPEC_A_LT_B(&dl,&curr)) { |
cprintf("\n\nPERIODIC TASK %d: Deadline miss!!!\n", index); |
cprintf("current time= %10ld sec, %10ld ns\n", curr.tv_sec, curr.tv_nsec); |
cprintf("deadline = %10ld sec, %10ld ns\n", dl.tv_sec, dl.tv_nsec); |
sys_end(); |
} |
task_endcycle(); |
puts_xy(x,y,WHITE," "); |
x++; |
} |
} while (b && !finished); |
kern_cli(); |
// account for a finished task |
current_finished_tasks++; |
current_periodic_tasks--; |
// Dline check :-) it is not perfect, but it works :-) |
ll_gettime(TIME_EXACT,&curr); |
dl=proc_table[exec_shadow].request_time; |
ADDUSEC2TIMESPEC(pattern[index].reldline, &dl); |
if (TIMESPEC_A_LT_B(&dl,&curr)) { |
cprintf("\n\nPERIODIC TASK %d: Deadline miss!!!\n", index); |
cprintf("current time= %10ld sec, %10ld ns\n", curr.tv_sec, curr.tv_nsec); |
cprintf("deadline = %10ld sec, %10ld ns\n", dl.tv_sec, dl.tv_nsec); |
sys_end(); |
} |
return (void *)0; |
} |
void *value_task(void *arg) |
{ |
struct timespec dl, curr; // for deadline checking |
int index, j, x, y, temp; |
char s[2]; |
task_setcanceltype(TASK_CANCEL_ASYNCHRONOUS,&temp); |
index = (int)arg; |
// kern_printf("Ú%dÙ",index); |
x = rand() % 26 + 1; |
y = rand() % 3 + 10; |
s[0] = '*'; s[1] = 0; |
for (j=0; j<pattern[index].iterations; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
// kern_printf("*%d*\n",exec_shadow); |
kern_cli(); |
// account for a finished task |
current_finished_tasks++; |
// Dline check :-) it is not perfect, but it works :-) |
ll_gettime(TIME_EXACT,&curr); |
TIMESPEC_ASSIGN(&dl, &proc_table[exec_shadow].request_time); |
ADDUSEC2TIMESPEC(pattern[index].reldline, &dl); |
if (TIMESPEC_A_GT_B(&dl,&curr)) { |
// The task finishes in time. account for the value |
current_value += pattern[index].penalty + pattern[index].value; |
} |
// kern_printf("value: arg=%d current_value=%d pen=%d val=%d\n",arg,current_value, |
// ((struct task_struct *)arg)->penalty, |
// ((struct task_struct *)arg)->value); |
return (void *)0; |
} |
void *info_task(void *); |
void create_info_task(void) |
{ |
HARD_TASK_MODEL hard; |
hard_task_default_model(hard); |
hard_task_def_usemath(hard); |
hard_task_def_mit(hard, 2000000); |
hard_task_def_wcet(hard, 2000); |
info_pid = task_create("info_task", info_task, &hard, NULL); |
task_activate(info_pid); |
} |
void *info_task(void *arg) |
{ |
int x; |
task_setcanceltype(TASK_CANCEL_ASYNCHRONOUS,&x); |
for (;;) { |
update_scenario(); |
task_endcycle(); |
} |
} |
void print_statistics(void) |
{ |
TIME sum; |
clear(); |
jet_getstat(master_pid, &sum, 0, 0, 0); |
task_activate(master_pid); // let the master task die... |
task_kill(info_pid); |
clear(); |
cprintf("CRUNCH 1.12 - by Paolo Gai 2001\n\n"); |
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n"); |
cprintf("Final Results:\n\n"); |
cprintf("The Master task elapsed time : %d microseconds.\n\n",(int)sum); |
cprintf("Total number of tasks : %9d\n", pattern_dim); |
cprintf("Total number of scheduled tasks: %9d\n\n",current_task); |
cprintf("Per.tasks created but not ended: %9d\n\n",current_periodic_tasks); |
cprintf("Maximum created value : %9d\n",max_created_value); |
cprintf("Minimum created value : %9d\n\n",min_created_value); |
cprintf("Maximum value : %9d\n",max_value); |
cprintf("Minimum value : %9d\n\n",min_value); |
cprintf("Total Value (from Module) : %9d\n",crunch_getvalue()); |
cprintf("Total Value (from CRUNCH) : %9d\n",current_value); |
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n"); |
} |
/* |
* Scenario |
*/ |
void scenario(void) |
{ |
char buf[100]; |
clear(); |
puts_xy(0, 0,BLUE , "CRUNCH 1.12"); |
puts_xy(15,0,GREEN, "by Paolo Gai 2001"); |
puts_xy(0, 2,WHITE, "ÄÄÄ Hard Periodic Tasks ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"); |
puts_xy(0, 9,WHITE, "ÂÄÄ Soft Aperiodic Tasks ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"); |
puts_xy(0,10,WHITE, "³ ³"); |
puts_xy(0,11,WHITE, "³ ³"); |
puts_xy(0,12,WHITE, "³ ³"); |
puts_xy(0,13,WHITE, "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"); |
puts_xy(29,10,YELLOW, "Statistics:"); |
sprintf(buf,"Total: %5d Already created: Periodic:",pattern_dim); |
puts_xy(29,11,CYAN, buf); |
puts_xy(29,12,BLUE, "Value reported (by Modules):"); |
puts_xy(29,13,RED, " (by CRUNCH ):"); |
puts_xy(69,12,7, "Min:"); |
puts_xy(69,13,7, "Max:"); |
puts_xy(0,14,WHITE, "ÄÄÄ Debug space for Logging Module functions... ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"); |
place(0,15); |
} |
void update_scenario(void) |
{ |
char buf[100]; |
sprintf(buf,"%5d",current_task); |
puts_xy(58,11,WHITE,buf); |
sprintf(buf,"%5d",current_periodic_tasks); |
puts_xy(75,11,WHITE,buf); |
sprintf(buf,"%5d",crunch_getvalue()); |
puts_xy(58,12,WHITE,buf); |
sprintf(buf,"%5d",current_value); |
puts_xy(58,13,WHITE,buf); |
sprintf(buf,"%6d",min_value); |
puts_xy(74,12,WHITE,buf); |
sprintf(buf,"%6d",max_value); |
puts_xy(74,13,WHITE,buf); |
} |
/unsupported/trunk/crunch/crunch/initfile.c |
---|
0,0 → 1,116 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: initfile.c,v 1.1 2004-07-05 14:17:13 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:13 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
#include "kernel/kern.h" |
#include "modules/rr.h" |
#include "modules/rr2.h" |
#include "modules/dummy.h" |
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include "drivers/keyb.h" |
#include "valmodel.h" |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
int argc; |
char *argv[100]; |
void read_myfile(char *name); |
int main(int argc, char **argv); |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
clear(); |
RR2_register_level(RRTICK, RR2_MAIN_NO, mb); |
crunch_register_models(mb); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
SEM_register_module(); |
__compute_args__(mb, &argc, argv); |
if (argc == 2) |
read_myfile(argv[1]); |
return TICK; |
} |
NRT_TASK_MODEL keyb_model; |
TASK __init__(void *arg) |
{ |
KEYB_PARMS kparms = BASE_KEYB; |
HARTPORT_init(); |
nrt_task_default_model(keyb_model); |
nrt_task_def_system(keyb_model); |
nrt_task_def_nokill(keyb_model); |
keyb_def_task(kparms,(TASK_MODEL *)&keyb_model); |
KEYB_init(&kparms); |
if (argc == 2) |
main(argc,argv); |
else |
cprintf("Usage: x imagefile conffile\n"); |
return (void *)0; |
} |
/unsupported/trunk/crunch/crunch/test.dat |
---|
0,0 → 1,41 |
This is the configuration file for the CRUNCH program. |
Any character that is not a number (zero...nine) will be skipped. |
You should write a line for every task you want to create. |
The file MUST be ordered by time and then by task type. |
The lines are formed by seven numbers that represent, in order: |
- the time at which the task should be created (in microseconds) |
- the type of the task. Zero means a hard task, one means a value task |
- the relative deadline of the task (in microseconds) |
- the worst case execution time of the task (in microseconds) |
- the number of iterations done by the dummy cycle |
- the value of the task (between zero and one hundred) |
- the penalty of the task (between zero and one hundred) |
If you want to create more than one task at the same time, remember that |
hard task should come in the file BEFORE value tasks. |
If the task is a value task and there are more than one task created at |
the same time, a group activation is performed. |
-------------------------------------------------------------------------- |
The first line contains the number of tasks to be created. |
-------------------------------------------------------------------------- |
Number of tasks: 6 |
time hard/value dline wcet iterations value penalty |
1000000 0 50000 2000 200 0 0 |
1300000 0 50000 2000 200 0 0 |
1300000 1 100000 5000 2000000 1 10 |
1300000 1 100000 5000 3000 2 20 |
3000000 1 100000 5000 3000 4 40 |
5000000 0 100000 5000 3000 0 0 |
/unsupported/trunk/crunch/crunch/rrvalue.h |
---|
0,0 → 1,136 |
/* |
* 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: rrvalue.h,v 1.1 2004-07-05 14:17:13 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:13 $ |
------------ |
This file contains the scheduling module RRVALUE (Round Robin for |
Hard & Soft & Value Model) |
Title: |
RRVALUE (Round Robin) version 2 |
Task Models Accepted: |
NRT_TASK_MODEL - Non-Realtime Tasks |
weight field is ignored |
slice field is used to set the slice of a task, if it is !=0 |
policy field is ignored |
inherit field is ignored |
SOFT_TASK_MODEL - Soft tasks |
only the periodicity and the met are used. |
HARD_TASK_MODEL - Hard tasks |
only the periodicity and the period are used. |
VALUE_TASK_MODEL - Value tasks |
nothing is used yet |
Description: |
See the RRSOFT Description. |
It also accepts VALUE_TASK Models |
Exceptions raised: |
XUNVALID_GUEST |
This level doesn't support guests. When a guest operation |
is called, the exception is raised. |
Restrictions & special features: |
- if specified, it creates at init time a task, |
called "Main", attached to the function __init__(). |
- There must be only one module in the system that creates a task |
attached to the function __init__(). |
- The level tries to guarantee that a task uses a "full" timeslice |
before going to the queue tail. "full" means that a task can execute |
a maximum time of slice+sys_tick due to the approx. done by |
the Virtual Machine. If a task execute more time than the slice, |
the next time it execute less... |
**/ |
/* |
* 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 __RRVALUE_H__ |
#define __RRVALUE_H__ |
#include <ll/ll.h> |
#include <kernel/config.h> |
#include <sys/types.h> |
#include <kernel/types.h> |
#include <modules/codes.h> |
#include "valmodel.h" |
extern TASK __init__(void *arg); |
/*+ Const: +*/ |
#define RRVALUE_MINIMUM_SLICE 1000 /*+ Minimum Timeslice +*/ |
#define RRVALUE_MAXIMUM_SLICE 500000 /*+ Maximum Timeslice +*/ |
#define RRVALUE_MAIN_YES 1 /*+ The level creates the main +*/ |
#define RRVALUE_MAIN_NO 0 /*+ The level does'nt create the main +*/ |
#define RRVALUE_ONLY_HARD 1 /*+ The level accepts only Hard Tasks +*/ |
#define RRVALUE_ONLY_SOFT 2 /*+ The level accepts only Soft Tasks +*/ |
#define RRVALUE_ONLY_NRT 4 /*+ The level accepts only NRT Tasks +*/ |
#define RRVALUE_ONLY_VALUE 8 /*+ The level accepts only Value Tasks+*/ |
#define RRVALUE_LEVELNAME "RRVALUE base" |
#define RRVALUE_LEVEL_CODE 167 |
#define RRVALUE_LEVEL_VERSION 1 |
/*+ Registration function: |
TIME slice the slice for the Round Robin queue |
int createmain 1 if the level creates the main task 0 otherwise |
struct multiboot_info *mb used if createmain specified +*/ |
void RRVALUE_register_level(TIME slice, |
int createmain, |
struct multiboot_info *mb, |
BYTE models, |
int max_tasks); |
/*+ returns the current total value +*/ |
int RRVALUE_getvalue(LEVEL l); |
#endif |
/unsupported/trunk/crunch/crunch/crunch.h |
---|
0,0 → 1,66 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: crunch.h,v 1.1 2004-07-05 14:17:13 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:13 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
/* This data is collected from the configuration file and |
represent the activation pattern used during the test. */ |
#define TASK_ACTIVATION_TABLE_DIM 100000 |
struct task_struct { |
int index; |
int time; |
int type; |
int reldline; |
int wcet; |
int iterations; |
int value; |
int penalty; |
}; |
void crunch_file(struct task_struct *t, int *curr_table_dim, int m); |
/unsupported/trunk/crunch/crunch/test2.dat |
---|
0,0 → 1,8 |
Number of tasks: 4 |
time hard/value dline wcet iterations value penalty |
1300000 1 100000 5000 2000 1 3 |
1300000 1 100000 5000 3000 2 1 |
3000000 1 100000 5000 3000 2 1 |
30000000 0 100000 5000 3000 2 1 |
/unsupported/trunk/crunch/crunch/valmodel.h |
---|
0,0 → 1,143 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: valmodel.h,v 1.1 2004-07-05 14:17:14 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:14 $ |
------------ |
**/ |
/* |
* Copyright (C) 2001 Paolo Gai and Tomas Lenvall |
* |
* 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 __VALMODEL_H__ |
#define __VALMODEL_H__ |
#include <kernel/types.h> |
#include <kernel/model.h> |
/* |
* Registration functions |
* |
* |
* Note that the module that will handle the aperiodic tasks should also |
* support group creation. To support group creation you need a function |
* that have to be called for "accept" the task. The test application |
* will ensure you that the crunch_taskaccepted function will be called. |
* |
* The periodic tasks will be created as usual, with task_create. |
* |
* Please look at the template that you can use to create your own |
* Scheduling Module (it should be distributed with this file. |
*/ |
/* |
* This function will be called into the __kernel_register_modules__ |
* function in the middle of the registration of the Modules. |
* You can do what you want here. |
* |
* In particular, you should register some scheduling Modules |
* that will be capable to handle these two task models: |
* - HARD_TASK_MODEL: periodic tasks with wcet and period != 0 |
* - VALUE_TASK_MODEL: aperiodic tasks with wcet, reldline, and values |
*/ |
void crunch_register_models(struct multiboot_info *mb); |
/* |
* This function will be used by the test application to accept value tasks. |
* It returns 1 if the task p is accepted, 0 if not. |
*/ |
int crunch_taskaccepted(PID p); |
/* |
* This function just returns the accumulated value by the scheduling |
* modules. |
*/ |
int crunch_getvalue(); |
/* ----------------------------------------------------------------------- |
VALUE_TASK_MODEL: elastic hard Tasks |
----------------------------------------------------------------------- */ |
/* |
* this is the Value Task Model that has been used in the |
* Lab assignments of the Advanced Real-Time Course in |
* the Malardalens University, Sweden |
* |
* This is an aperiodic task with deadline and wcet. |
* if the task run to completion the Module gains some value points |
* if it cannot be run it will loose some (penalty) points |
*/ |
// a random unused number |
#define VALUE_PCLASS 0x6900 |
typedef struct { |
TASK_MODEL t; |
TIME wcet; // the worst case execution time of the task |
TIME dline; // relative deadline |
DWORD value; // the value gained if the task runs to completion |
DWORD penalty; // the penalty gained if the task does not finish |
} VALUE_TASK_MODEL; |
#define value_task_default_model(m) \ |
task_default_model((m).t,VALUE_PCLASS), \ |
(m).wcet = 0, \ |
(m).dline = 0, \ |
(m).value = 0, \ |
(m).penalty = 0 |
#define value_task_def_level(m,l) task_def_level((m).t,l) |
#define value_task_def_arg(m,a) task_def_arg((m).t,a) |
#define value_task_def_stack(m,s) task_def_stack((m).t,s) |
#define value_task_def_stackaddr(m,s) task_def_stackaddr((m).t,s) |
#define value_task_def_group(m,g) task_def_group((m).t,g) |
#define value_task_def_usemath(m) task_def_usemath((m).t) |
#define value_task_def_system(m) task_def_system((m).t) |
#define value_task_def_nokill(m) task_def_nokill((m).t) |
#define value_task_def_ctrl_jet(m) task_def_ctrl_jet((m).t) |
#define value_task_def_wcet(m,w) (m).wcet = (w) |
#define value_task_def_dline(m,d) (m).dline = (d) |
#define value_task_def_value(m,v) (m).value = (v) |
#define value_task_def_penalty(m,p) (m).penalty = (p) |
#define value_task_def_joinable(m) task_def_joinable((m).t) |
#define value_task_def_unjoinable(m) task_def_unjoinable((m).t) |
#endif |
/unsupported/trunk/crunch/crunch/go.bat |
---|
0,0 → 1,0 |
x rrvalue ..\load\crunch.dat |
/unsupported/trunk/crunch/crunch/makefile |
---|
0,0 → 1,15 |
# |
# |
# |
ifndef BASE |
BASE=../.. |
endif |
include $(BASE)/config/config.mk |
PROGS = rrvalue |
include $(BASE)/config/example.mk |
rrvalue: |
make -f $(SUBMAKE) APP=rrvalue INIT= OTHEROBJS="initfile.o crunch.o dosfs.o" OTHERINCL= |
/unsupported/trunk/crunch/pubcrunch/dosfs.c |
---|
0,0 → 1,177 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: dosfs.c,v 1.1 2004-07-05 14:17:17 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:17 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
#include <kernel/kern.h> |
#include <ll/i386/x-dos.h> |
#include <ctype.h> |
#include "crunch.h" |
#define FILEBUF_DIM 1000000 |
/* |
* |
* Read functions |
* |
*/ |
/* This is the buffer used by read_myfile */ |
char myfilebuf[FILEBUF_DIM]; |
/* This is the number of bytes read by read_myfile */ |
int myfilebuf_length; |
/* This function read myfile.txt (up to 1000 chars) */ |
void read_myfile(char *name) |
{ |
/* DOS file descriptor */ |
DOS_FILE *f; |
/* Error code */ |
int err; |
/* open the DOS file for reading (you can specify only "r" or "w") */ |
f = DOS_fopen(name,"r"); |
/* check for open errors */ |
if (!f) { |
/* error!! */ |
err = DOS_error(); |
/* note that if you call DOS_error() here, it return 0!!! */ |
cprintf("Error %d opening %s...\n", err, name); |
myfilebuf_length = 0; |
return; |
} |
/* read up to 1000 chars */ |
myfilebuf_length = DOS_fread(&myfilebuf,1,FILEBUF_DIM,f); |
/* check for errors */ |
err = DOS_error(); |
cprintf("Read %d bytes from %s...\n", myfilebuf_length, name); |
if (err) { |
cprintf("Error %d reading %s...\n", err, name); |
myfilebuf_length = 0; |
/* there is not return because I want to close the file! */ |
} |
/* Close the file */ |
DOS_fclose(f); |
} |
/* |
* |
* Parsing functions |
* |
*/ |
int geti(char *b, int *pos, int maxpos); |
/* |
* This function crunches the buffer that contains the configuration file. |
* m is the maximum size of the t array... |
*/ |
void crunch_file(struct task_struct *t, int *curr_table_dim, int m) |
{ |
int curr_filepos = 0; |
int max_task_pos; |
int i = 0; |
// read the number of tasks into the data file |
max_task_pos = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
if (max_task_pos == -1) { |
cprintf("Error parsing configuration file...\n"); |
*curr_table_dim = 0; |
} |
for (i=0; i<max_task_pos; i++) { |
// read the seven datas |
t[i].index = i; |
t[i].time = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].type = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].reldline = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].wcet = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].iterations = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].value = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
t[i].penalty = geti(myfilebuf, &curr_filepos, myfilebuf_length); |
// check the last one for an error |
if (t[i].penalty == -1) { |
cprintf("Error parsing task %d...\n",i); |
break; |
} |
} |
*curr_table_dim = i; |
} |
/* the buffer b is scannedc to search for numbers |
at the first non-number the function stops */ |
int geti(char *b, int *pos, int maxpos) |
{ |
int res = 0; |
// skip first chars |
while (!isdigit(b[*pos])) { |
(*pos)++; |
if (*pos == maxpos) return -1; // Error!!! |
} |
// read the numbers |
do { |
res = (res * 10) + b[*pos] - '0'; |
(*pos)++; |
} while (isdigit(b[*pos])); |
return res; |
} |
/unsupported/trunk/crunch/pubcrunch/group5.c |
---|
0,0 → 1,805 |
/* |
* Copyright (C) 2000 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 |
* |
*/ |
#include "edf.h" |
#include "valmodel.h" |
#include <ll/stdio.h> |
#include <ll/string.h> |
#include <kernel/model.h> |
#include <kernel/descr.h> |
#include <kernel/var.h> |
#include <kernel/func.h> |
#include <kernel/trace.h> |
//#define edf_printf kern_printf |
#define edf_printf printk |
/*+ Status used in the level +*/ |
#define EDF_READY MODULE_STATUS_BASE /*+ - Ready status +*/ |
#define EDF_DELAY MODULE_STATUS_BASE+1 /*+ - Delay status +*/ |
#define EDF_WCET_VIOLATED MODULE_STATUS_BASE+2 /*+ when wcet is finished +*/ |
#define EDF_WAIT MODULE_STATUS_BASE+3 /*+ to wait the deadline +*/ |
#define EDF_IDLE MODULE_STATUS_BASE+4 /*+ to wait the deadline +*/ |
#define EDF_ZOMBIE MODULE_STATUS_BASE+5 /*+ to wait the free time +*/ |
/* For group create */ |
#define EDF_NOTYET_GUARANTEED 1 |
#define EDF_GUARANTEED 2 |
#define EDF_REJECTED 3 |
/*+ flags +*/ |
#define EDF_FLAG_SPORADIC 1 |
#define EDF_FLAG_NORAISEEXC 2 |
#define EDF_FLAG_APERIODIC 3 |
static LEVEL ModuleLevel; //Ugling to save the level we r registered at. |
/*+ the level redefinition for the Earliest Deadline First level +*/ |
typedef struct{ |
level_des l; /*+ the standard level descriptor +*/ |
TIME period[MAX_PROC]; /*+ The task periods; the deadlines are |
stored in the priority field +*/ |
int deadline_timer[MAX_PROC]; |
/*+ The task deadline timers +*/ |
int flag[MAX_PROC]; /*+ used to manage the JOB_TASK_MODEL and the |
periodicity +*/ |
QUEUE ready; /*+ the ready queue +*/ |
int flags; /*+ the init flags... +*/ |
bandwidth_t U; /*+ the used bandwidth +*/ |
int guarantee_status[MAX_PROC]; /* for the group create */ |
QUEUE arrived; /* for all the tasks that arrive */ |
/* VALUE_TASK specific data */ |
long accumulatedValue; /* The accumulated system value */ |
TIME dline[MAX_PROC]; |
int value[MAX_PROC]; |
int penalty[MAX_PROC]; |
} EDF_level_des; |
static char *EDF_status_to_a(WORD status) |
{ |
if (status < MODULE_STATUS_BASE) |
return status_to_a(status); |
switch (status) { |
case EDF_READY : return "EDF_Ready"; |
case EDF_DELAY : return "EDF_Delay"; |
case EDF_WCET_VIOLATED: return "EDF_Wcet_Violated"; |
case EDF_WAIT : return "EDF_Sporadic_Wait"; |
case EDF_IDLE : return "EDF_Idle"; |
case EDF_ZOMBIE : return "EDF_Zombie"; |
default : return "EDF_Unknown"; |
} |
} |
static void EDF_timer_deadline(void *par) |
{ |
PID p = (PID) par; |
EDF_level_des *lev; |
edf_printf("$"); |
lev = (EDF_level_des *)level_table[proc_table[p].task_level]; |
switch (proc_table[p].status) { |
case EDF_ZOMBIE: |
/* we finally put the task in the ready queue */ |
proc_table[p].status = FREE; |
q_insertfirst(p,&freedesc); |
/* and free the allocated bandwidth */ |
if(lev->flag[p] == EDF_FLAG_APERIODIC){ |
//!!!!! FRIG™R den allokerade bandbredden h„r!!!! |
// kanske n†ge mera |
}else{ |
/* SPORADIC, could be removed. (we do not use them)*/ |
lev->U -= (MAX_BANDWIDTH/lev->period[p]) * proc_table[p].wcet; |
} |
break; |
case EDF_IDLE: |
/* tracer stuff */ |
trc_logevent(TRC_INTACTIVATION,&p); |
/* similar to EDF_task_activate */ |
TIMESPEC_ASSIGN(&proc_table[p].request_time, |
&proc_table[p].timespec_priority); |
ADDUSEC2TIMESPEC(lev->period[p], &proc_table[p].timespec_priority); |
proc_table[p].status = EDF_READY; |
q_timespec_insert(p,&lev->ready); |
lev->deadline_timer[p] = kern_event_post(&proc_table[p].timespec_priority, |
EDF_timer_deadline, |
(void *)p); |
edf_printf("(dline p%d ev%d %d.%d)",(int)p,(int)lev->deadline_timer[p],(int)proc_table[p].timespec_priority.tv_sec,(int)proc_table[p].timespec_priority.tv_nsec/1000); |
//printk("(d%d idle priority set to %d)",p,proc_table[p].priority ); |
event_need_reschedule(); |
printk("el%d|",p); |
break; |
case EDF_WAIT: |
/* Without this, the task cannot be reactivated!!! */ |
proc_table[p].status = SLEEP; |
break; |
default: |
/* else, a deadline miss occurred!!! */ |
edf_printf("\nstatus %d\n", (int)proc_table[p].status); |
edf_printf("timer_deadline:AAARRRGGGHHH!!!"); |
kern_raise(XDEADLINE_MISS,p); |
} |
} |
/*+ this function is called when a task finish his delay +*/ |
static void EDF_timer_delay(void *par) |
{ |
PID p = (PID) par; |
EDF_level_des *lev; |
lev = (EDF_level_des *)level_table[proc_table[p].task_level]; |
proc_table[p].status = EDF_READY; |
q_timespec_insert(p,&lev->ready); |
proc_table[p].delay_timer = NIL; /* Paranoia */ |
event_need_reschedule(); |
} |
static int EDF_level_accept_task_model(LEVEL l, TASK_MODEL *m) |
{ |
if(m->pclass == VALUE_PCLASS){ |
/* VALUE_TASK_MODEL */ |
VALUE_TASK_MODEL *v = (VALUE_TASK_MODEL *)m; |
if(v->wcet && v->dline && v->value && v->penalty){ |
if(v->dline >= v->wcet && v->value <= 100 && v->penalty <= 100) |
return 0; |
} |
}else if (m->pclass == HARD_PCLASS || m->pclass == (HARD_PCLASS | l)) { |
/* HARD_TASK_MODEL */ |
HARD_TASK_MODEL *h = (HARD_TASK_MODEL *)m; |
if (h->wcet && h->mit) |
return 0; |
} |
return -1; |
} |
/* We do not accept any guest calls and models */ |
static int EDF_level_accept_guest_model(LEVEL l, TASK_MODEL *m) |
{ return -1; } |
static char *onoff(int i) |
{ |
if (i) |
return "On "; |
else |
return "Off"; |
} |
static void EDF_level_status(LEVEL l) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
PID p = lev->ready; |
kern_printf("Wcet Check : %s\n", |
onoff(lev->flags & EDF_ENABLE_WCET_CHECK)); |
kern_printf("On-line guarantee : %s\n", |
onoff(lev->flags & EDF_ENABLE_GUARANTEE)); |
kern_printf("Used Bandwidth : %u/%u\n", |
lev->U, MAX_BANDWIDTH); |
while (p != NIL) { |
if ((proc_table[p].pclass) == JOB_PCLASS) |
kern_printf("Pid: %2d (GUEST)\n", p); |
else |
kern_printf("Pid: %2d Name: %10s %s: %9ld Dline: %9ld.%6ld Stat: %s\n", |
p, |
proc_table[p].name, |
lev->flag[p] & EDF_FLAG_SPORADIC ? "MinITime" : "Period ", |
lev->period[p], |
proc_table[p].timespec_priority.tv_sec, |
proc_table[p].timespec_priority.tv_nsec/1000, |
EDF_status_to_a(proc_table[p].status)); |
p = proc_table[p].next; |
} |
for (p=0; p<MAX_PROC; p++) |
if (proc_table[p].task_level == l && proc_table[p].status != EDF_READY |
&& proc_table[p].status != FREE ) |
kern_printf("Pid: %2d Name: %10s %s: %9ld Dline: %9ld.%6ld Stat: %s\n", |
p, |
proc_table[p].name, |
lev->flag[p] & EDF_FLAG_SPORADIC ? "MinITime" : "Period ", |
lev->period[p], |
proc_table[p].timespec_priority.tv_sec, |
proc_table[p].timespec_priority.tv_nsec/1000, |
EDF_status_to_a(proc_table[p].status)); |
} |
/* The scheduler only gets the first task in the queue */ |
static PID EDF_level_scheduler(LEVEL l) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
/* { // print 4 dbg the ready queue |
PID p= lev->ready; |
kern_printf("(s"); |
while (p != NIL) { |
kern_printf("%d ",p); |
p = proc_table[p].next; |
} |
kern_printf(") "); |
} |
*/ |
return (PID)lev->ready; |
} |
/* The on-line guarantee is enabled only if the appropriate flag is set... */ |
static int EDF_level_guarantee(LEVEL l, bandwidth_t *freebandwidth) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
PID p; |
//om flaggan sattes i task_create, |
//kanske inte ska vara h„r men det fungerar just nu i alla fall. |
if (lev->flags & EDF_FAILED_GUARANTEE) { |
*freebandwidth = 0; |
return 0; |
} |
/*check all the arrived tasks, guarantee them or not */ |
while(lev->arrived != NIL){ |
p = q_getfirst(&lev->arrived); |
if(lev->flag[p] == EDF_FLAG_APERIODIC){ |
//!!!! h„r ska v†rat acceptans test f”r value task ligga |
lev->guarantee_status[p] = EDF_GUARANTEED; |
}else{ |
/* Accept all the periodic tasks */ |
lev->guarantee_status[p] = EDF_GUARANTEED; |
} |
} |
if (*freebandwidth >= lev->U) { |
*freebandwidth -= lev->U; |
return 1; |
}else |
return 0; |
} |
static int EDF_task_create(LEVEL l, PID p, TASK_MODEL *m) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
/* if the EDF_task_create is called, then the pclass must be a |
valid pclass. */ |
if(m->pclass == VALUE_PCLASS){ |
/* VALUE_TASK_MODEL */ |
//!!!!!!!!!!!! Kan vara smart att sortera value task i kön efter priority fältet !!!!!!!!! |
VALUE_TASK_MODEL *v = (VALUE_TASK_MODEL *)m; |
lev->value[p] = v->value; |
lev->penalty[p] = v->penalty; |
lev->dline[p] = v->dline; |
/* Mark that this is a value task (aperiodic)*/ |
lev->flag[p] = EDF_FLAG_APERIODIC; |
/* Enable wcet check */ |
if (lev->flags & EDF_ENABLE_WCET_CHECK) { |
proc_table[p].avail_time = v->wcet; |
proc_table[p].wcet = v->wcet; |
proc_table[p].control |= CONTROL_CAP; |
} |
}else{ |
/* HARD_TASK_MODEL */ |
HARD_TASK_MODEL *h = (HARD_TASK_MODEL *)m; |
lev->period[p] = h->mit; |
if (h->periodicity == APERIODIC) |
lev->flag[p] = EDF_FLAG_SPORADIC; |
else |
lev->flag[p] = 0; |
lev->deadline_timer[p] = -1; |
/* Enable wcet check */ |
if (lev->flags & EDF_ENABLE_WCET_CHECK) { |
proc_table[p].avail_time = h->wcet; |
proc_table[p].wcet = h->wcet; |
proc_table[p].control |= CONTROL_CAP; |
} |
} |
//detta test kan/SKA man g”ra i level_guarantee, kanske tom i v†rat |
//acceptans test. H„r m†ste man ju „nd† alltid returnera ok (0) |
/* update the bandwidth... */ |
// if (lev->flags & EDF_ENABLE_GUARANTEE) { |
// bandwidth_t b; |
// b = (MAX_BANDWIDTH / h->mit) * h->wcet; |
/* really update lev->U, checking an overflow... */ |
// if (MAX_BANDWIDTH - lev->U > b) |
// lev->U += b; |
// else |
/* The task can NOT be guaranteed (U>MAX_BANDWIDTH)... |
in this case, we don't raise an exception... in fact, after the |
EDF_task_create the task_create will call level_guarantee that return |
-1... return -1 in EDF_task_create isn't correct, because: |
. generally, the guarantee must be done when also the resources |
are registered |
. returning -1 will cause the task_create to return with an errno |
ETASK_CREATE instead of ENO_GUARANTEE!!! |
Why I use the flag??? because if the lev->U overflows, if i.e. I set |
it to MAX_BANDWIDTH, I lose the correct allocated bandwidth... |
*/ |
// lev->flags |= EDF_FAILED_GUARANTEE; |
// } |
/* Insert the tasks in the arrived QUEUE to enable group_create */ |
q_insert(p, &lev->arrived); |
lev->guarantee_status[p] = EDF_NOTYET_GUARANTEED; |
return 0; /* OK, also if the task cannot be guaranteed... */ |
} |
/* Called if task creation did'nt work */ |
static void EDF_task_detach(LEVEL l, PID p) |
{ |
/* the EDF level doesn't introduce any dinamic allocated new field. |
we have only to reset the NO_GUARANTEE FIELD and decrement the allocated |
bandwidth */ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
if (lev->flags & EDF_FAILED_GUARANTEE) |
lev->flags &= ~EDF_FAILED_GUARANTEE; |
else |
lev->U -= (MAX_BANDWIDTH / lev->period[p]) * proc_table[p].wcet; |
//extract the arrived task from the Q |
q_extract(p, &lev->arrived); |
lev->guarantee_status[p] = EDF_NOTYET_GUARANTEED; |
} |
static int EDF_task_eligible(LEVEL l, PID p) |
{ |
return 0; /* if the task p is chosen, it is always eligible */ |
} |
#ifdef __TEST1__ |
extern int testactive; |
extern struct timespec s_stime[]; |
extern TIME s_curr[]; |
extern TIME s_PID[]; |
extern int useds; |
#endif |
static void EDF_task_dispatch(LEVEL l, PID p, int nostop) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
edf_printf("(disp p%d %d.%d)",(int)p,(int)schedule_time.tv_sec,(int)schedule_time.tv_nsec/1000); |
/* the task state is set EXE by the scheduler() |
we extract the task from the ready queue |
NB: we can't assume that p is the first task in the queue!!! */ |
q_extract(p, &lev->ready); |
#ifdef __TEST1__ |
if (testactive) |
{ |
TIMESPEC_ASSIGN(&s_stime[useds], &schedule_time); |
s_curr[useds] = proc_table[p].avail_time; |
s_PID[useds] = p; |
useds++; |
} |
#endif |
} |
static void EDF_task_epilogue(LEVEL l, PID p) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
edf_printf("(epil p%d %d.%d)",p,(int)schedule_time.tv_sec,(int)schedule_time.tv_nsec/1000); |
/* check if the wcet is finished... */ |
if ((lev->flags & EDF_ENABLE_WCET_CHECK) && proc_table[p].avail_time <= 0) { |
/* if it is, raise a XWCET_VIOLATION exception */ |
kern_raise(XWCET_VIOLATION,p); |
proc_table[p].status = EDF_WCET_VIOLATED; |
} |
else { |
/* the task has been preempted. it returns into the ready queue... */ |
q_timespec_insert(p,&lev->ready); |
proc_table[p].status = EDF_READY; |
} |
} |
static void EDF_task_activate(LEVEL l, PID p) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
if (proc_table[p].status == EDF_WAIT) { |
kern_raise(XACTIVATION,p); |
return; |
} |
/* Test if we are trying to activate a non sleeping task */ |
/* Ignore this; the task is already active */ |
if (proc_table[p].status != SLEEP && |
proc_table[p].status != EDF_WCET_VIOLATED) |
return; |
/* Set the deadline for the task*/ |
if(lev->flag[p] == EDF_FLAG_APERIODIC ){ |
/* VALUE_TASK */ |
ll_gettime(TIME_EXACT, &proc_table[p].request_time); |
TIMESPEC_ASSIGN(&proc_table[p].timespec_priority, |
&proc_table[p].request_time); |
ADDUSEC2TIMESPEC(lev->dline[p], &proc_table[p].timespec_priority); |
}else{ |
/* HARD_TASK */ |
/* see also EDF_timer_deadline */ |
/* e.g. set a new deadline for the hard periodic task */ |
ll_gettime(TIME_EXACT, &proc_table[p].request_time); |
TIMESPEC_ASSIGN(&proc_table[p].timespec_priority, |
&proc_table[p].request_time); |
ADDUSEC2TIMESPEC(lev->period[p], &proc_table[p].timespec_priority); |
} |
/* Insert task in the correct position */ |
proc_table[p].status = EDF_READY; |
q_timespec_insert(p,&lev->ready); |
/* Set the deadline timer */ |
lev->deadline_timer[p] = kern_event_post(&proc_table[p].timespec_priority, |
EDF_timer_deadline, |
(void *)p); |
edf_printf("(dline p%d ev%d %d.%d)",p,(int)lev->deadline_timer[p],(int)proc_table[p].timespec_priority.tv_sec,(int)proc_table[p].timespec_priority.tv_nsec/1000); |
} |
static void EDF_task_insert(LEVEL l, PID p) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
/* Similar to EDF_task_activate, but we don't check in what state |
the task is and we don't set the request_time*/ |
/* Insert task in the coEDFect position */ |
proc_table[p].status = EDF_READY; |
q_timespec_insert(p,&lev->ready); |
} |
static void EDF_task_extract(LEVEL l, PID p) |
{ |
/* Extract the running task from the level |
. we have already extract it from the ready queue at the dispatch time. |
. the capacity event have to be removed by the generic kernel |
. the wcet don't need modification... |
. the state of the task is set by the calling function |
. the deadline must remain... |
So, we do nothing!!! |
*/ |
} |
static void EDF_task_endcycle(LEVEL l, PID p) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
edf_printf("(ecyc p%d %d.%d)",p,(int)schedule_time.tv_sec,(int)schedule_time.tv_nsec/1000); |
/* the task has terminated his job before it consume the wcet. All OK! */ |
if (lev->flag[p] & EDF_FLAG_SPORADIC) |
proc_table[p].status = EDF_WAIT; |
else /* pclass = sporadic_pclass */ |
proc_table[p].status = EDF_IDLE; |
/* we reset the capacity counters... */ |
if (lev->flags & EDF_ENABLE_WCET_CHECK) |
proc_table[p].avail_time = proc_table[p].wcet; |
/* when the deadline timer fire, it recognize the situation and set |
correctly all the stuffs (like reactivation, request_time, etc... ) */ |
} |
static void EDF_task_end(LEVEL l, PID p) |
{ |
// EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
kern_printf("EDF_task_end: %s\n", proc_table[p].name); |
proc_table[p].status = EDF_ZOMBIE; |
/* When the deadline timer fire, it put the task descriptor in |
the free queue, and free the allocated bandwidth... */ |
} |
static void EDF_task_sleep(LEVEL l, PID p) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
/* the task has terminated his job before it consume the wcet. All OK! */ |
proc_table[p].status = EDF_WAIT; |
/* we reset the capacity counters... */ |
if (lev->flags & EDF_ENABLE_WCET_CHECK) |
proc_table[p].avail_time = proc_table[p].wcet; |
/* when the deadline timer fire, it recognize the situation and set |
correctly the task state to sleep... */ |
} |
static void EDF_task_delay(LEVEL l, PID p, TIME usdelay) |
{ |
struct timespec wakeuptime; |
// EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
/* equal to EDF_task_endcycle */ |
proc_table[p].status = EDF_DELAY; |
/* we need to delete this event if we kill the task while it is sleeping */ |
ll_gettime(TIME_EXACT, &wakeuptime); |
ADDUSEC2TIMESPEC(usdelay, &wakeuptime); |
proc_table[p].delay_timer = kern_event_post(&wakeuptime, |
EDF_timer_delay, |
(void *)p); |
} |
/* Guest Functions |
These functions manages a JOB_TASK_MODEL, that is used to put |
a guest task in the EDF ready queue. */ |
static void EDF_timer_guest_deadline(void *par) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static int EDF_guest_create(LEVEL l, PID p, TASK_MODEL *m) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
return 0; |
} |
static void EDF_guest_detach(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_dispatch(LEVEL l, PID p, int nostop) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_epilogue(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_activate(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_insert(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_extract(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_endcycle(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_end(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_sleep(LEVEL l, PID p) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
static void EDF_guest_delay(LEVEL l, PID p, TIME usdelay) |
{ |
kern_raise(XUNVALID_GUEST, exec_shadow); |
} |
/* Registration functions */ |
/*+ Registration function: |
int flags the init flags ... see edf.h +*/ |
void EDF_register_level(int flags) |
{ |
LEVEL l; /* the level that we register */ |
EDF_level_des *lev; /* for readableness only */ |
PID i; /* a counter */ |
printk("EDF_register_level\n"); |
/* request an entry in the level_table */ |
l = level_alloc_descriptor(); |
printk(" alloco descrittore %d %d\n",l,(int)sizeof(EDF_level_des)); |
/* alloc the space needed for the EDF_level_des */ |
lev = (EDF_level_des *)kern_alloc(sizeof(EDF_level_des)); |
printk(" lev=%d\n",(int)lev); |
/* update the level_table with the new entry */ |
level_table[l] = (level_des *)lev; |
/* fill the standard descriptor */ |
strncpy(lev->l.level_name, EDF_LEVELNAME, MAX_LEVELNAME); |
lev->l.level_code = EDF_LEVEL_CODE; |
lev->l.level_version = EDF_LEVEL_VERSION; |
lev->l.level_accept_task_model = EDF_level_accept_task_model; |
lev->l.level_accept_guest_model = EDF_level_accept_guest_model; |
lev->l.level_status = EDF_level_status; |
lev->l.level_scheduler = EDF_level_scheduler; |
if (flags & EDF_ENABLE_GUARANTEE) |
lev->l.level_guarantee = EDF_level_guarantee; |
else |
lev->l.level_guarantee = NULL; |
lev->l.task_create = EDF_task_create; |
lev->l.task_detach = EDF_task_detach; |
lev->l.task_eligible = EDF_task_eligible; |
lev->l.task_dispatch = EDF_task_dispatch; |
lev->l.task_epilogue = EDF_task_epilogue; |
lev->l.task_activate = EDF_task_activate; |
lev->l.task_insert = EDF_task_insert; |
lev->l.task_extract = EDF_task_extract; |
lev->l.task_endcycle = EDF_task_endcycle; |
lev->l.task_end = EDF_task_end; |
lev->l.task_sleep = EDF_task_sleep; |
lev->l.task_delay = EDF_task_delay; |
lev->l.guest_create = EDF_guest_create; |
lev->l.guest_detach = EDF_guest_detach; |
lev->l.guest_dispatch = EDF_guest_dispatch; |
lev->l.guest_epilogue = EDF_guest_epilogue; |
lev->l.guest_activate = EDF_guest_activate; |
lev->l.guest_insert = EDF_guest_insert; |
lev->l.guest_extract = EDF_guest_extract; |
lev->l.guest_endcycle = EDF_guest_endcycle; |
lev->l.guest_end = EDF_guest_end; |
lev->l.guest_sleep = EDF_guest_sleep; |
lev->l.guest_delay = EDF_guest_delay; |
/* fill the EDF descriptor part */ |
for(i=0; i<MAX_PROC; i++) { |
lev->period[i] = 0; |
lev->deadline_timer[i] = -1; |
lev->flag[i] = 0; |
lev->value[i] = -1; |
lev->penalty[i] = -1; |
lev->dline[i] = -1; |
} |
lev->ready = NIL; |
lev->flags = flags & 0x07; |
lev->U = 0; |
lev->accumulatedValue = 0; |
} |
int is_accepted(LEVEL l, PID p){ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
if(lev->guarantee_status[p] == EDF_GUARANTEED) |
return 1; |
return 0; |
} |
bandwidth_t EDF_usedbandwidth(LEVEL l) |
{ |
EDF_level_des *lev = (EDF_level_des *)(level_table[l]); |
if (lev->l.level_code == EDF_LEVEL_CODE && |
lev->l.level_version == EDF_LEVEL_VERSION) |
return lev->U; |
else |
return 0; |
} |
/*+ returns the current total value +*/ |
int GROUP5_getvalue(LEVEL l){ |
return ((EDF_level_des *)(level_table[l]))->accumulatedValue; |
} |
/* Interface with the crunch application */ |
void crunch_register_models(struct multiboot_info *mb){ |
// here you can register your scheduling modules |
EDF_register_level(EDF_ENABLE_ALL); // Level 0 |
} |
int crunch_taskaccepted(PID p){ |
return is_accepted(proc_table[p].task_level, p ); |
} |
int crunch_getvalue(/*LEVEL l*/){ |
// here just return the accumulated value by the modules you used. |
// Should call the GROUP5_getvalue(LEVEL l) function. |
return GROUP5_getvalue(ModuleLevel); |
} |
/unsupported/trunk/crunch/pubcrunch/crunch.c |
---|
0,0 → 1,544 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: crunch.c,v 1.1 2004-07-05 14:17:16 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:16 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
/* |
* Crunch.c |
*/ |
//#define DEBUG_CONFFILE |
//#define DEBUG_MASTER_HARDCREATE |
//#define DEBUG_MASTER_VALUECREATE |
#include "valmodel.h" |
#include "crunch.h" |
#include <kernel/kern.h> |
/* |
* This small application simply reads the tasks and executes them. |
* When they are all finished, the system shuts down. |
*/ |
/* |
* this table contains all the tasks information collected from the |
* configuration file |
*/ |
#define MAX_PATTERN 100000 |
struct task_struct pattern[MAX_PATTERN]; |
int pattern_dim; |
/* This is some data collected by the task destructors that |
* can be useful for understanding how the Module works */ |
/* this int contains the value as seen by the application */ |
int current_value = 0; |
/* the number of finished tasks */ |
int current_finished_tasks = 0; |
/* this flag is triggered by the master task when it finishes */ |
int finished = 0; |
/* number of instances of an hard tasks |
NOTE that it is 79 and not 80 as in the generation algorithm!!! */ |
#define ASTER_LIM 79 |
// Master task stuffs |
PID master_pid; // the PID of the master task |
int current_task; // the current position in the pattern array |
// number of periodic tasks currently running... |
int current_periodic_tasks = 0; |
/* |
* This function prints all the data read from the configuration file |
*/ |
void print_conffile(char *name) |
{ |
int i; |
cprintf("--------------------------------------------------------------------\n"); |
cprintf("Configuration file name : %s\n", name); |
cprintf("Number of tasks in the pattern : %d\n", pattern_dim); |
cprintf(" Time Hard/Value Dline WCET Iterations Value Penalty\n"); |
cprintf("--------------------------------------------------------------------\n"); |
for (i=0; i<pattern_dim; i++) { |
cprintf("%10d %10d %10d %10d %10d %5d %7d\n", |
pattern[i].time, |
pattern[i].type, |
pattern[i].reldline, |
pattern[i].wcet, |
pattern[i].iterations, |
pattern[i].value, |
pattern[i].penalty); |
} |
cprintf("--------------------------------------------------------------------\n"); |
} |
/* |
* main() |
*/ |
void scenario(void); |
void create_master_task(void); |
void update_scenario(void); |
void print_statistics(void); |
int main(int argc, char **argv) |
{ |
srand(18); |
set_exchandler_grx(); |
/* |
* Parse the configuration file |
*/ |
crunch_file(pattern, &pattern_dim, MAX_PATTERN); |
if (!pattern_dim) { |
cprintf("Nothing to do!\n"); |
sys_end(); |
} |
/* |
* Print configuration file |
*/ |
#ifdef DEBUG_CONFFILE |
print_conffile(argv[1]); return 0; |
#endif |
/* |
* Print the scenario |
*/ |
scenario(); |
/* |
* Create the high priority task that will create all the periodic |
* and value tasks. |
*/ |
create_master_task(); |
/* |
* While in idle time, update the scenario |
*/ |
while (!finished || task_counter != 2) { |
update_scenario(); |
} |
print_statistics(); |
return 0; |
} |
/* |
* |
* MASTER TASK STUFFS |
* |
*/ |
void activate_master_task(void *); |
void *master_task(void *); |
void *hard_task(void *); |
void *value_task(void *); |
void create_master_task() |
{ |
NRT_TASK_MODEL nrt; |
struct timespec t; |
nrt_task_default_model(nrt); |
nrt_task_def_usemath(nrt); |
nrt_task_def_ctrl_jet(nrt); |
nrt_task_def_save_arrivals(nrt); |
master_pid = task_create("master", master_task, &nrt, NULL); |
if(master_pid == -1) { |
cprintf("Cannot create the master task!!!\n"); |
sys_end(); |
} |
current_task = 0; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC(pattern[0].time, &t); |
kern_cli(); |
kern_event_post(&t, activate_master_task, NULL); |
kern_sti(); |
} |
void activate_master_task(void *arg) |
{ |
task_activate(master_pid); |
} |
void *master_task(void *arg) |
{ |
int current_time; |
HARD_TASK_MODEL hard; |
PID phard; |
VALUE_TASK_MODEL value; |
PID group_container_pid[100]; |
int group_container_pattern[100]; |
int group_container_index; |
// used to record the group_creation for value task |
int i; |
PID p; |
task_nopreempt(); |
hard_task_default_model(hard); |
hard_task_def_usemath(hard); |
value_task_default_model(value); |
value_task_def_usemath(value); |
do { |
// current_task indexes the next task to be activated. |
current_time = pattern[current_task].time; |
// create and activate all the hard tasks with the same starting time |
if (!pattern[current_task].type) { |
do { |
#ifdef DEBUG_MASTER_HARDCREATE |
{ int i=current_task; cprintf("%10d %10d %10d %10d %10d %5d %7d\n", |
pattern[i].time, pattern[i].type, pattern[i].reldline, |
pattern[i].wcet, pattern[i].iterations, pattern[i].value, |
pattern[i].penalty); } |
#endif |
hard_task_def_mit(hard, pattern[current_task].reldline); |
hard_task_def_wcet(hard, pattern[current_task].wcet); |
hard_task_def_arg(hard, (void *)current_task); |
phard = task_create("hard_task", hard_task, &hard, NULL); |
if (phard == NIL) { |
clear(); |
cprintf("Cannot create hard task! (errno=%d)\n", errno); |
sys_end(); |
} |
else { |
task_activate(phard); |
current_periodic_tasks++; |
} |
current_task++; |
} while (current_task != pattern_dim && |
pattern[current_task].time == current_time && |
!pattern[current_task].type); |
} |
// create and activate all the soft tasks with the same starting time |
if (current_task != pattern_dim && |
pattern[current_task].time == current_time && |
pattern[current_task].type) { |
group_container_index = 0; |
kern_cli(); |
while (current_task != pattern_dim && |
pattern[current_task].time == current_time && |
pattern[current_task].type) { |
#ifdef DEBUG_MASTER_VALUECREATE |
{ int i=current_task; cprintf("V%10d %10d %10d %10d %10d %5d %7d\n", |
pattern[i].time, pattern[i].type, pattern[i].reldline, |
pattern[i].wcet, pattern[i].iterations, pattern[i].value, |
pattern[i].penalty); } |
#endif |
// account for the penalty before the task starts |
current_value -= pattern[current_task].penalty; |
// kern_printf("master_task: current_value=%d\n",current_value); |
value_task_def_wcet(value,pattern[current_task].wcet); |
value_task_def_dline(value,pattern[current_task].reldline); |
value_task_def_value(value,pattern[current_task].value); |
value_task_def_penalty(value,pattern[current_task].penalty); |
value_task_def_arg(value, (void *)current_task); |
p = group_create("value_task", value_task, (TASK_MODEL *)&value, NULL); |
// kern_printf("\nCreating %d PID = %d\n",current_task, p); |
// we need to know which task we are inserting, so we insert it in |
// a list to check them later |
group_container_pid[group_container_index]=p; |
group_container_pattern[group_container_index]=current_task; |
group_container_index++; |
current_task++; |
} |
/* {kern_printf("group_container: index=%d, 0=%d, 1=%d, 2=%d, 3=%d\n", |
group_container_index, group_container_pid[0], group_container_pid[1], |
group_container_pid[2], group_container_pid[3]);}*/ |
guarantee(); |
// kern_printf("group_container_index=%d\n",group_container_index); |
for (i=0; i<group_container_index; i++) { |
// {kern_printf("i=%d, group_container: index=%d, 0=%d, 1=%d, 2=%d, 3=%d\n",i, |
// group_container_index, group_container_pid[0], group_container_pid[1], |
// group_container_pid[2], group_container_pid[3]);} |
p = group_container_pid[i]; |
// kern_printf("+%d\n",p); |
if (crunch_taskaccepted(p)) { |
// we need to pass the original model for the task... |
// but just the common part is needed O:-) |
value_task_def_arg(value, (void *)group_container_pattern[i]); |
group_create_accept(p,(TASK_MODEL *)&value); |
// kern_printf("Accetto task PID=%d\n",p); |
} |
else { |
group_container_pid[i] = NIL; |
// kern_printf("Rigetto task PID=%d\n",p); |
group_create_reject(p); |
} |
} |
kern_sti(); |
for (i=0; i<group_container_index; i++) { |
// kern_printf("Attivo %d PID=%d\n",i,group_container_pid[i]); |
if (group_container_pid[i] != NIL) |
task_activate(group_container_pid[i]); |
} |
} |
if (current_task != pattern_dim) { |
struct timespec t; |
NULL_TIMESPEC(&t); |
ADDUSEC2TIMESPEC(pattern[current_task].time, &t); |
kern_cli(); |
kern_event_post(&t, activate_master_task, NULL); |
task_endcycle(); |
} |
} while(current_task != pattern_dim); |
/* since all the tasks has been activated, the master_task will stop |
forever. |
In that way we can look at the elapsed time consumed by the master task. |
*/ |
// task_nopreempt(); |
finished = 1; |
task_endcycle(); |
return (void *)0; |
} |
void *hard_task(void *arg) |
{ |
struct timespec dl, curr; // for deadline checking |
int index, j, x, y; |
char s[2]; |
task_setcanceltype(TASK_CANCEL_ASYNCHRONOUS,&index); |
index = (int)arg; |
x = 0; |
y = rand() % 6 + 3; |
s[0] = '*'; s[1] = 0; |
while (x < ASTER_LIM) { |
for (j=0; j<pattern[index].iterations; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
// Dline check :-) it is not perfect, but it works :-) |
kern_cli(); |
ll_gettime(TIME_EXACT,&curr); |
dl = proc_table[exec_shadow].request_time; |
ADDUSEC2TIMESPEC(pattern[index].reldline, &dl); |
if (TIMESPEC_A_LT_B(&dl,&curr)) { |
cprintf("\n\nPERIODIC TASK %d: Deadline miss!!!\n", index); |
cprintf("current time= %10ld sec, %10ld ns\n", curr.tv_sec, curr.tv_nsec); |
cprintf("deadline = %10ld sec, %10ld ns\n", dl.tv_sec, dl.tv_nsec); |
sys_end(); |
} |
task_endcycle(); |
puts_xy(x,y,WHITE," "); |
x++; |
} |
kern_cli(); |
// account for a finished task |
current_finished_tasks++; |
current_periodic_tasks--; |
// Dline check :-) it is not perfect, but it works :-) |
ll_gettime(TIME_EXACT,&curr); |
dl=proc_table[exec_shadow].request_time; |
ADDUSEC2TIMESPEC(pattern[index].reldline, &dl); |
if (TIMESPEC_A_LT_B(&dl,&curr)) { |
cprintf("\n\nPERIODIC TASK %d: Deadline miss!!!\n", index); |
cprintf("current time= %10ld sec, %10ld ns\n", curr.tv_sec, curr.tv_nsec); |
cprintf("deadline = %10ld sec, %10ld ns\n", dl.tv_sec, dl.tv_nsec); |
sys_end(); |
} |
return (void *)0; |
} |
void *value_task(void *arg) |
{ |
struct timespec dl, curr; // for deadline checking |
int index, j, x, y; |
char s[2]; |
task_setcanceltype(TASK_CANCEL_ASYNCHRONOUS,&index); |
index = (int)arg; |
// kern_printf("Ú%dÙ",index); |
x = rand() % 26 + 1; |
y = rand() % 3 + 10; |
s[0] = '*'; s[1] = 0; |
for (j=0; j<pattern[index].iterations; j++) { |
s[0] = '*' + rand() % 100; |
puts_xy(x,y,rand()%15+1,s); |
} |
// kern_printf("*%d*\n",exec_shadow); |
kern_cli(); |
// account for a finished task |
current_finished_tasks++; |
// Dline check :-) it is not perfect, but it works :-) |
ll_gettime(TIME_EXACT,&curr); |
TIMESPEC_ASSIGN(&dl, &proc_table[exec_shadow].request_time); |
ADDUSEC2TIMESPEC(pattern[index].reldline, &dl); |
if (TIMESPEC_A_GT_B(&dl,&curr)) { |
// The task finishes in time. account for the value |
current_value += pattern[index].penalty + pattern[index].value; |
} |
// kern_printf("value: arg=%d current_value=%d pen=%d val=%d\n",arg,current_value, |
// ((struct task_struct *)arg)->penalty, |
// ((struct task_struct *)arg)->value); |
return (void *)0; |
} |
void print_statistics(void) |
{ |
TIME sum; |
clear(); |
jet_getstat(master_pid, &sum, 0, 0, 0); |
task_activate(master_pid); // let the master task die... |
clear(); |
cprintf("CRUNCH 1.0 - by Paolo Gai 2001\n\n"); |
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n"); |
cprintf("Final Results:\n\n"); |
cprintf("The Master task elapsed time : %d microseconds.\n\n",(int)sum); |
cprintf("Total number of tasks : %5d\n", pattern_dim); |
cprintf("Total number of scheduled tasks: %5d\n\n",current_task); |
cprintf("Per.tasks created but not ended: %5d\n\n",current_periodic_tasks); |
cprintf("Total Value (from Module) : %5d\n",crunch_getvalue()); |
cprintf("Total Value (from CRUNCH) : %5d\n",current_value); |
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n"); |
} |
/* |
* Scenario |
*/ |
void scenario(void) |
{ |
char buf[100]; |
clear(); |
puts_xy(0, 0,BLUE , "CRUNCH 1.0"); |
puts_xy(15,0,GREEN, "by Paolo Gai 2001"); |
puts_xy(0, 2,WHITE, "ÄÄÄ Hard Periodic Tasks ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"); |
puts_xy(0, 9,WHITE, "ÂÄÄ Soft Aperiodic Tasks ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"); |
puts_xy(0,10,WHITE, "³ ³"); |
puts_xy(0,11,WHITE, "³ ³"); |
puts_xy(0,12,WHITE, "³ ³"); |
puts_xy(0,13,WHITE, "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"); |
puts_xy(29,10,YELLOW, "Statistics:"); |
sprintf(buf,"Total: %5d Already created: Periodic:",pattern_dim); |
puts_xy(29,11,CYAN, buf); |
puts_xy(29,12,BLUE, "Value reported (by Modules):"); |
puts_xy(29,13,RED, " (by CRUNCH ):"); |
puts_xy(0,14,WHITE, "ÄÄÄ Debug space for Logging Module functions... ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"); |
place(0,15); |
} |
void update_scenario(void) |
{ |
char buf[100]; |
sprintf(buf,"%5d",current_task); |
puts_xy(58,11,WHITE,buf); |
sprintf(buf,"%5d",current_periodic_tasks); |
puts_xy(75,11,WHITE,buf); |
sprintf(buf,"%5d",crunch_getvalue()); |
puts_xy(58,12,WHITE,buf); |
sprintf(buf,"%5d",current_value); |
puts_xy(58,13,WHITE,buf); |
} |
/unsupported/trunk/crunch/pubcrunch/initfile.c |
---|
0,0 → 1,116 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: initfile.c,v 1.1 2004-07-05 14:17:17 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:17 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
#include "kernel/kern.h" |
#include "modules/rr.h" |
#include "modules/rr2.h" |
#include "modules/dummy.h" |
#include "modules/sem.h" |
#include "modules/hartport.h" |
#include "drivers/keyb.h" |
#include "valmodel.h" |
/*+ sysyem tick in us +*/ |
#define TICK 0 |
/*+ RR tick in us +*/ |
#define RRTICK 10000 |
int argc; |
char *argv[100]; |
void read_myfile(char *name); |
int main(int argc, char **argv); |
TIME __kernel_register_levels__(void *arg) |
{ |
struct multiboot_info *mb = (struct multiboot_info *)arg; |
clear(); |
RR2_register_level(RRTICK, RR2_MAIN_NO, mb); |
crunch_register_models(mb); |
RR_register_level(RRTICK, RR_MAIN_YES, mb); |
dummy_register_level(); |
SEM_register_module(); |
__compute_args__(mb, &argc, argv); |
if (argc == 2) |
read_myfile(argv[1]); |
return TICK; |
} |
NRT_TASK_MODEL keyb_model; |
TASK __init__(void *arg) |
{ |
KEYB_PARMS kparms = BASE_KEYB; |
HARTPORT_init(); |
nrt_task_default_model(keyb_model); |
nrt_task_def_system(keyb_model); |
nrt_task_def_nokill(keyb_model); |
keyb_def_task(kparms,(TASK_MODEL *)&keyb_model); |
KEYB_init(&kparms); |
if (argc == 2) |
main(argc,argv); |
else |
cprintf("Usage: x imagefile conffile\n"); |
return (void *)0; |
} |
/unsupported/trunk/crunch/pubcrunch/test.dat |
---|
0,0 → 1,41 |
This is the configuration file for the CRUNCH program. |
Any character that is not a number (zero...nine) will be skipped. |
You should write a line for every task you want to create. |
The file MUST be ordered by time and then by task type. |
The lines are formed by seven numbers that represent, in order: |
- the time at which the task should be created (in microseconds) |
- the type of the task. Zero means a hard task, one means a value task |
- the relative deadline of the task (in microseconds) |
- the worst case execution time of the task (in microseconds) |
- the number of iterations done by the dummy cycle |
- the value of the task (between zero and one hundred) |
- the penalty of the task (between zero and one hundred) |
If you want to create more than one task at the same time, remember that |
hard task should come in the file BEFORE value tasks. |
If the task is a value task and there are more than one task created at |
the same time, a group activation is performed. |
-------------------------------------------------------------------------- |
The first line contains the number of tasks to be created. |
-------------------------------------------------------------------------- |
Number of tasks: 6 |
time hard/value dline wcet iterations value penalty |
1000000 0 50000 2000 200 0 0 |
1300000 0 50000 2000 200 0 0 |
1300000 1 100000 5000 200000 1 10 |
1300000 1 100000 5000 3000 2 20 |
3000000 1 100000 5000 3000 4 40 |
5000000 0 100000 5000 3000 0 0 |
/unsupported/trunk/crunch/pubcrunch/group5.h |
---|
0,0 → 1,108 |
/** |
This file contains a minimal version of the scheduling module EDF (Earliest Deadline First) |
Title: |
EDF (Earliest Deadline First) |
Task Models Accepted: |
HARD_TASK_MODEL - Hard Tasks (Periodic and Sporadic) |
wcet field and mit field must be != 0. They are used to set the wcet |
and period of the tasks. |
periodicity field can be either PERIODIC or APERIODIC |
drel field is ignored |
Guest Models Accepted: |
none |
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 periodic and sporadic. The sporadic tasks |
are like hard task with periodicity set to APERIODIC; they are guaranteed |
as a periodic task with period equal to the minimum interarrival time. |
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. |
Exceptions raised: |
XUNVALID_GUEST |
This level doesn't support guests. When a guest operation |
is called, the exception is raised. |
These exceptions are pclass-dependent... |
XDEADLINE_MISS |
If a task miss his deadline, the exception is raised. |
XACTIVATION |
If a sporadic task is activated with a rate that is greather than the |
rate declared in the model, this exception is raised and the task is NOT |
activated. |
This exception is also raised if we are trying to activate a periodic task |
stopped with task_sleep before the deadline in which the task_sleep is |
called. |
Restrictions & special features: |
- This level doesn't manage the main task. |
- The level use the priority and timespec_priority fields. |
- A function to return the used bandwidth of a level is provided. |
**/ |
/* |
* Copyright (C) 2000 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 __EDF_H__ |
#define __EDF_H__ |
#include "valmodel.h" |
#include <ll/ll.h> |
#include <kernel/config.h> |
#include <sys/types.h> |
#include <kernel/types.h> |
#include <modules/codes.h> |
//pic a code and a version not used into the file include/modules/codes.h |
#define DOG_LEVELNAME "GROUP5 Scheduling Module" |
#define DOG_LEVEL_CODE 167 |
#define DOG_LEVEL_VERSION 1 |
/*+ flags... +*/ |
#define EDF_ENABLE_WCET_CHECK 1 /*+ Wcet check enabled +*/ |
#define EDF_ENABLE_GUARANTEE 2 /*+ Task Guarantee enabled +*/ |
#define EDF_ENABLE_ALL 3 /*+ All flags enabled +*/ |
#define EDF_FAILED_GUARANTEE 8 /*+ used in the module, unsettable |
in EDF_register_level... +*/ |
/*+ Registration function: |
int flag Options to be used in this level instance... +*/ |
void EDF_register_level(); |
/* checks if the task is accepted */ |
int is_accepted(LEVEL l, PID p); |
/*+ Returns the used bandwidth of a level +*/ |
bandwidth_t EDF_usedbandwidth(LEVEL l); |
#endif |
/unsupported/trunk/crunch/pubcrunch/crunch.h |
---|
0,0 → 1,66 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: crunch.h,v 1.1 2004-07-05 14:17:16 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:16 $ |
------------ |
**/ |
/* |
* 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 |
* |
*/ |
/* This data is collected from the configuration file and |
represent the activation pattern used during the test. */ |
#define TASK_ACTIVATION_TABLE_DIM 100000 |
struct task_struct { |
int index; |
int time; |
int type; |
int reldline; |
int wcet; |
int iterations; |
int value; |
int penalty; |
}; |
void crunch_file(struct task_struct *t, int *curr_table_dim, int m); |
/unsupported/trunk/crunch/pubcrunch/valmodel.h |
---|
0,0 → 1,143 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: valmodel.h,v 1.1 2004-07-05 14:17:18 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:18 $ |
------------ |
**/ |
/* |
* Copyright (C) 2001 Paolo Gai and Tomas Lenvall |
* |
* 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 __VALMODEL_H__ |
#define __VALMODEL_H__ |
#include <kernel/types.h> |
#include <kernel/model.h> |
/* |
* Registration functions |
* |
* |
* Note that the module that will handle the aperiodic tasks should also |
* support group creation. To support group creation you need a function |
* that have to be called for "accept" the task. The test application |
* will ensure you that the crunch_taskaccepted function will be called. |
* |
* The periodic tasks will be created as usual, with task_create. |
* |
* Please look at the template that you can use to create your own |
* Scheduling Module (it should be distributed with this file. |
*/ |
/* |
* This function will be called into the __kernel_register_modules__ |
* function in the middle of the registration of the Modules. |
* You can do what you want here. |
* |
* In particular, you should register some scheduling Modules |
* that will be capable to handle these two task models: |
* - HARD_TASK_MODEL: periodic tasks with wcet and period != 0 |
* - VALUE_TASK_MODEL: aperiodic tasks with wcet, reldline, and values |
*/ |
void crunch_register_models(struct multiboot_info *mb); |
/* |
* This function will be used by the test application to accept value tasks. |
* It returns 1 if the task p is accepted, 0 if not. |
*/ |
int crunch_taskaccepted(PID p); |
/* |
* This function just returns the accumulated value by the scheduling |
* modules. |
*/ |
int crunch_getvalue(); |
/* ----------------------------------------------------------------------- |
VALUE_TASK_MODEL: elastic hard Tasks |
----------------------------------------------------------------------- */ |
/* |
* this is the Value Task Model that has been used in the |
* Lab assignments of the Advanced Real-Time Course in |
* the Malardalens University, Sweden |
* |
* This is an aperiodic task with deadline and wcet. |
* if the task run to completion the Module gains some value points |
* if it cannot be run it will loose some (penalty) points |
*/ |
// a random unused number |
#define VALUE_PCLASS 0x6900 |
typedef struct { |
TASK_MODEL t; |
TIME wcet; // the worst case execution time of the task |
TIME dline; // relative deadline |
DWORD value; // the value gained if the task runs to completion |
DWORD penalty; // the penalty gained if the task does not finish |
} VALUE_TASK_MODEL; |
#define value_task_default_model(m) \ |
task_default_model((m).t,VALUE_PCLASS), \ |
(m).wcet = 0, \ |
(m).dline = 0, \ |
(m).value = 0, \ |
(m).penalty = 0 |
#define value_task_def_level(m,l) task_def_level((m).t,l) |
#define value_task_def_arg(m,a) task_def_arg((m).t,a) |
#define value_task_def_stack(m,s) task_def_stack((m).t,s) |
#define value_task_def_stackaddr(m,s) task_def_stackaddr((m).t,s) |
#define value_task_def_group(m,g) task_def_group((m).t,g) |
#define value_task_def_usemath(m) task_def_usemath((m).t) |
#define value_task_def_system(m) task_def_system((m).t) |
#define value_task_def_nokill(m) task_def_nokill((m).t) |
#define value_task_def_ctrl_jet(m) task_def_ctrl_jet((m).t) |
#define value_task_def_wcet(m,w) (m).wcet = (w) |
#define value_task_def_dline(m,d) (m).dline = (d) |
#define value_task_def_value(m,v) (m).value = (v) |
#define value_task_def_penalty(m,p) (m).penalty = (p) |
#define value_task_def_joinable(m) task_def_joinable((m).t) |
#define value_task_def_unjoinable(m) task_def_unjoinable((m).t) |
#endif |
/unsupported/trunk/crunch/pubcrunch/readme |
---|
0,0 → 1,29 |
CRUNCH Application |
------------------ |
This is the demo application we will use to test the Value Schedulers. |
An example Value scheduler is also included. |
To compile it, please execute |
make pj |
make rrvalue |
to run it, |
x rrvalue test.dat |
test.dat is the data file where you have to write your test patterns to |
see if your module works. The format of the file is explained into the |
file itself. |
To compile your module and link it with the crunch application, please |
modify the makefile adding a rule similar to the rrvalue rule, changing |
rrvalue with your module name. Also please add your group in the PROGS |
environment variable. |
Good Luck |
Paolo |
/unsupported/trunk/crunch/pubcrunch/makefile |
---|
0,0 → 1,23 |
# |
# |
# |
ifndef BASE |
BASE=../.. |
endif |
include $(BASE)/config/config.mk |
PROGS = rrvalue group5 |
include $(BASE)/config/example.mk |
group5: |
make -f $(SUBMAKE) APP=group5 INIT= OTHEROBJS="initfile.o crunch.o dosfs.o" OTHERINCL= |
rrvalue: |
make -f $(SUBMAKE) APP=rrvalue INIT= OTHEROBJS="initfile.o crunch.o dosfs.o" OTHERINCL= |
pj: |
cp rrvalue.obj rrvalue.o |
/unsupported/trunk/crunch/assgnmnt/mymod.c |
---|
0,0 → 1,308 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: mymod.c,v 1.1 2004-07-05 14:17:12 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:12 $ |
------------ |
**/ |
/* |
* Copyright (C) 2001 by 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 |
* |
*/ |
#include "mymod.h" |
#include <ll/string.h> |
#include <kernel/model.h> |
#include <kernel/descr.h> |
#include <kernel/var.h> |
#include <kernel/func.h> |
// other include files if needed |
// NOTE: NO GLOBAL OR STATIC VARIABLES!!! |
// (put them inside the level descriptor!) |
/* Statuses used in the level */ |
#define MYMOD_READY MODULE_STATUS_BASE |
#define MYMOD_WAIT MODULE_STATUS_BASE+3 |
#define MYMOD_IDLE MODULE_STATUS_BASE+4 |
/* the level redefinition for the Module */ |
typedef struct { |
level_des l; /* the standard level descriptor */ |
int myvar[100]; /* other local (private) variables of the module */ |
} MYMOD_level_des; |
// example of OSLib event |
static void MYMOD_timer_deadline(void *par) |
{ |
// usually the void *par is a pointer to a structure or a PID |
// if it is a PID, you can do that to retrieve it and the correspondent |
// level descriptor |
PID p = (PID) par; |
MYMOD_level_des *lev; |
lev = (MYMOD_level_des *)level_table[proc_table[p].task_level]; |
// now you know the PID of the task and the level descriptor |
// ... so, you know all the things you need |
} |
static int MYMOD_level_accept_task_model(LEVEL l, TASK_MODEL *m) |
{ |
// your code here |
return 0; // dummy number |
} |
static int MYMOD_level_accept_guest_model(LEVEL l, TASK_MODEL *m) |
{ |
// your code here |
return 0; // dummy number |
} |
static void MYMOD_level_status(LEVEL l) |
{ |
} |
/* The scheduler only gets the first task in the queue */ |
static PID MYMOD_level_scheduler(LEVEL l) |
{ |
return 0; // dummy number |
} |
/* The on-line guarantee is enabled only if the appropriate flag is set... */ |
static int MYMOD_level_guarantee(LEVEL l, bandwidth_t *freebandwidth) |
{ |
return 0; // dummy number |
} |
static int MYMOD_task_create(LEVEL l, PID p, TASK_MODEL *m) |
{ |
return 0; // dummy number |
} |
static void MYMOD_task_detach(LEVEL l, PID p) |
{ |
} |
static int MYMOD_task_eligible(LEVEL l, PID p) |
{ |
return 0; // dummy number |
} |
static void MYMOD_task_dispatch(LEVEL l, PID p, int nostop) |
{ |
} |
static void MYMOD_task_epilogue(LEVEL l, PID p) |
{ |
} |
static void MYMOD_task_activate(LEVEL l, PID p) |
{ |
} |
static void MYMOD_task_insert(LEVEL l, PID p) |
{ |
} |
static void MYMOD_task_extract(LEVEL l, PID p) |
{ |
} |
static void MYMOD_task_endcycle(LEVEL l, PID p) |
{ |
} |
static void MYMOD_task_end(LEVEL l, PID p) |
{ |
} |
static void MYMOD_task_sleep(LEVEL l, PID p) |
{ |
} |
static void MYMOD_task_delay(LEVEL l, PID p, TIME usdelay) |
{ |
} |
static int MYMOD_guest_create(LEVEL l, PID p, TASK_MODEL *m) |
{ |
return 0; // dummy number |
} |
static void MYMOD_guest_detach(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_dispatch(LEVEL l, PID p, int nostop) |
{ |
} |
static void MYMOD_guest_epilogue(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_activate(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_insert(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_extract(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_endcycle(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_end(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_sleep(LEVEL l, PID p) |
{ |
} |
static void MYMOD_guest_delay(LEVEL l, PID p, TIME usdelay) |
{ |
} |
/* Registration functions */ |
/*+ Registration function: |
int flags the init flags ... see MYMOD.h +*/ |
void MYMOD_register_level(int flags) |
{ |
LEVEL l; /* the level that we register */ |
MYMOD_level_des *lev; /* for readableness only */ |
PID i; /* a counter */ |
/* request an entry in the level_table */ |
l = level_alloc_descriptor(); |
/* alloc the space needed for the MYMOD_level_des */ |
lev = (MYMOD_level_des *)kern_alloc(sizeof(MYMOD_level_des)); |
/* update the level_table with the new entry */ |
level_table[l] = (level_des *)lev; |
/* fill the standard descriptor */ |
strncpy(lev->l.level_name, MYMOD_LEVELNAME, MAX_LEVELNAME); |
lev->l.level_code = MYMOD_LEVEL_CODE; |
lev->l.level_version = MYMOD_LEVEL_VERSION; |
lev->l.level_accept_task_model = MYMOD_level_accept_task_model; |
lev->l.level_accept_guest_model = MYMOD_level_accept_guest_model; |
lev->l.level_status = MYMOD_level_status; |
lev->l.level_scheduler = MYMOD_level_scheduler; |
lev->l.level_guarantee = MYMOD_level_guarantee; |
lev->l.task_create = MYMOD_task_create; |
lev->l.task_detach = MYMOD_task_detach; |
lev->l.task_eligible = MYMOD_task_eligible; |
lev->l.task_dispatch = MYMOD_task_dispatch; |
lev->l.task_epilogue = MYMOD_task_epilogue; |
lev->l.task_activate = MYMOD_task_activate; |
lev->l.task_insert = MYMOD_task_insert; |
lev->l.task_extract = MYMOD_task_extract; |
lev->l.task_endcycle = MYMOD_task_endcycle; |
lev->l.task_end = MYMOD_task_end; |
lev->l.task_sleep = MYMOD_task_sleep; |
lev->l.task_delay = MYMOD_task_delay; |
lev->l.guest_create = MYMOD_guest_create; |
lev->l.guest_detach = MYMOD_guest_detach; |
lev->l.guest_dispatch = MYMOD_guest_dispatch; |
lev->l.guest_epilogue = MYMOD_guest_epilogue; |
lev->l.guest_activate = MYMOD_guest_activate; |
lev->l.guest_insert = MYMOD_guest_insert; |
lev->l.guest_extract = MYMOD_guest_extract; |
lev->l.guest_endcycle = MYMOD_guest_endcycle; |
lev->l.guest_end = MYMOD_guest_end; |
lev->l.guest_sleep = MYMOD_guest_sleep; |
lev->l.guest_delay = MYMOD_guest_delay; |
/* fill the MYMOD descriptor part */ |
for (i=0; i<100; i++) |
lev->myvar[i] = 0; |
} |
/*+ this function will accept or reject tasks during group creation +*/ |
int MYMOD_taskaccepted(PID p) |
{ |
} |
/*+ returns the current total value +*/ |
int MYMOD_getvalue(LEVEL l) |
{ |
} |
// put here the other interface functions added |
/* Interface with the crunch application */ |
void crunch_register_models(struct multiboot_info *mb); |
{ |
// here you can register your scheduling modules |
} |
int crunch_taskaccepted(PID p); |
{ |
// here maybe you can call MYMOD_taskaccepted()!!! |
} |
int crunch_getvalue() |
{ |
// here just return the accumulated value by the modules you used |
} |
/unsupported/trunk/crunch/assgnmnt/valmodel.h |
---|
0,0 → 1,143 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: valmodel.h,v 1.1 2004-07-05 14:17:12 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:12 $ |
------------ |
**/ |
/* |
* Copyright (C) 2001 Paolo Gai and Tomas Lenvall |
* |
* 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 __VALMODEL_H__ |
#define __VALMODEL_H__ |
#include <kernel/types.h> |
#include <kernel/model.h> |
/* |
* Registration functions |
* |
* |
* Note that the module that will handle the aperiodic tasks should also |
* support group creation. To support group creation you need a function |
* that have to be called for "accept" the task. The test application |
* will ensure you that the crunch_taskaccepted function will be called. |
* |
* The periodic tasks will be created as usual, with task_create. |
* |
* Please look at the template that you can use to create your own |
* Scheduling Module (it should be distributed with this file. |
*/ |
/* |
* This function will be called into the __kernel_register_modules__ |
* function in the middle of the registration of the Modules. |
* You can do what you want here. |
* |
* In particular, you should register some scheduling Modules |
* that will be capable to handle these two task models: |
* - HARD_TASK_MODEL: periodic tasks with wcet and period != 0 |
* - VALUE_TASK_MODEL: aperiodic tasks with wcet, reldline, and values |
*/ |
void crunch_register_models(struct multiboot_info *mb); |
/* |
* This function will be used by the test application to accept value tasks. |
* It returns 1 if the task p is accepted, 0 if not. |
*/ |
int crunch_taskaccepted(PID p); |
/* |
* This function just returns the accumulated value by the scheduling |
* modules. |
*/ |
int crunch_getvalue(); |
/* ----------------------------------------------------------------------- |
VALUE_TASK_MODEL: elastic hard Tasks |
----------------------------------------------------------------------- */ |
/* |
* this is the Value Task Model that has been used in the |
* Lab assignments of the Advanced Real-Time Course in |
* the Malardalens University, Sweden |
* |
* This is an aperiodic task with deadline and wcet. |
* if the task run to completion the Module gains some value points |
* if it cannot be run it will loose some (penalty) points |
*/ |
// a random unused number |
#define VALUE_PCLASS 0x6900 |
typedef struct { |
TASK_MODEL t; |
TIME wcet; // the worst case execution time of the task |
TIME dline; // relative deadline |
DWORD value; // the value gained if the task runs to completion |
DWORD penalty; // the penalty gained if the task does not finish |
} VALUE_TASK_MODEL; |
#define value_task_default_model(m) \ |
task_default_model((m).t,VALUE_PCLASS), \ |
(m).wcet = 0, \ |
(m).dline = 0, \ |
(m).value = 0, \ |
(m).penalty = 0 |
#define value_task_def_level(m,l) task_def_level((m).t,l) |
#define value_task_def_arg(m,a) task_def_arg((m).t,a) |
#define value_task_def_stack(m,s) task_def_stack((m).t,s) |
#define value_task_def_stackaddr(m,s) task_def_stackaddr((m).t,s) |
#define value_task_def_group(m,g) task_def_group((m).t,g) |
#define value_task_def_usemath(m) task_def_usemath((m).t) |
#define value_task_def_system(m) task_def_system((m).t) |
#define value_task_def_nokill(m) task_def_nokill((m).t) |
#define value_task_def_ctrl_jet(m) task_def_ctrl_jet((m).t) |
#define value_task_def_wcet(m,w) (m).wcet = (w) |
#define value_task_def_dline(m,d) (m).dline = (d) |
#define value_task_def_value(m,v) (m).value = (v) |
#define value_task_def_penalty(m,p) (m).penalty = (p) |
#define value_task_def_joinable(m) task_def_joinable((m).t) |
#define value_task_def_unjoinable(m) task_def_unjoinable((m).t) |
#endif |
/unsupported/trunk/crunch/assgnmnt/mymod.h |
---|
0,0 → 1,103 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@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: mymod.h,v 1.1 2004-07-05 14:17:12 pj Exp $ |
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2004-07-05 14:17:12 $ |
------------ |
**/ |
/* |
* Copyright (C) 2001 by 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 |
* |
*/ |
/* put here a description of the module */ |
/* change MYMOD with GROUPXXX, where XXX is your group number */ |
#ifndef __MYMOD_H__ |
#define __MYMOD_H__ |
#include <valmodel.h> |
#include <kernel/model.h> |
// maybe you need here some include file |
// then... we define a new Task Model without modifying |
// the standard kernel distribution |
// pick a code and a version not used into the file include/modules/codes.h |
#define MYMOD_LEVELNAME "GROUPXXX Scheduling Module" |
#define MYMOD_LEVEL_CODE 167 |
#define MYMOD_LEVEL_VERSION 1 |
// if the module raises some new exception list them here |
// pincking up unused numbers from include/bits/errno.h |
/*+ Registration function: |
int parameter Options to be used in this level instance... +*/ |
void MYMOD_register_level(int parameter); |
/*+ this function will accept or reject tasks during group creation +*/ |
int MYMOD_taskaccepted(PID p); |
/*+ returns the current total value +*/ |
int MYMOD_getvalue(LEVEL l); |
/* here you can also put some other functions similar for example |
to the EDF_usedbandwidth() in the file include/modules/edf.h */ |
#endif |
/unsupported/trunk/crunch/assgnmnt/readme |
---|
0,0 → 1,16 |
Lab Assignment 3 |
---------------- |
In this directory you will find these files: |
README - this file |
MYMODULE.* - a template Scheduling Module |
VALMODEL.H - the Value Model and the interface functions with the test |
application. |
Important: |
You only need to provide a scheduling Module composed by a .h and a .c file! |
Good luck |
Paolo and Tomas |
/unsupported/trunk/crunch/readme |
---|
0,0 → 1,95 |
VALUE SCHEDULER SUITE |
--------------------- |
by Paolo Gai 2001 |
--------------------- |
NOTE (2004/07/05): This version of crunch WAS working with an old version of |
shark. it should not be too difficult to make it working on the new |
versions. But be aware that the Scheduling Modules interface has |
changed... |
--------------------- |
This is a set of programs I wrote for the assignments in the Malardalens |
University, Sweden. |
The assignment for the students was the creation of a value scheduler that |
can handle overload. |
--------------------------------------------------------------------------- |
Directories: |
- This directoty should contain only this file and a makefile that should |
help in the creation of the applications. |
- The LOAD directory contains a little application that can be used to |
generate some random load composed by a set of HARD and VALUE tasks with |
different execution time. |
- The CRUNCH directory contains all the source code of the value schedulers |
done by me and by the students, plus an application called CRUNCH used |
to test the performance of the schedulers. |
- The OUT directory contains all the compiled CRUNCH applications. |
Every bynary image contains the CRUNCH application configured with |
different scheduling algorithms. |
--------------------------------------------------------------------------- |
LOAD GENERATION |
The load generation produces a .dat file suited for the CRUNCH |
application. The produced file contains a set of hard periodic tasks and |
a set of value tasks. |
The load generation can be tuned in various ways, and a set of small |
C programs are provided to step-by-step generate the load. |
Start: Length of the load pattern |
--------------------------------- |
First, we need the length of the load pattern. This information has |
to be given in the LENGTH.DAT configuration file (that file contains only |
the number of seconds that the load should cope. |
Step 1: Generation of the Shape of the hard periodic load |
--------------------------------------------------------- |
Given the LENGTH.DAT file, we need to produce a random shape for the |
Periodic load. |
The random shape is the limit of bandwith that a certain time can be |
available for creating hard tasks. Hard task creation is disabled |
if the currently used bandwidth is higher than the limit. |
The random shape is contained into the SHAPE.DAT file. The file contains |
a sequence of numbers in the form: <time> <b>, |
where <time> is the time in seconds to wich refers the threshold, |
and <b> is the maximum bandwidth that can be used after <time>. |
The data is ordered by time. |
Step 2: Generation of the Hard Task pattern |
------------------------------------------- |
Given the Shape of the pattern to be created, a small application |
really generates the load that will be handled by the CRUNCH application. |
The output of this phase is contained into the file HPATTERN.DAT. |
Step 3: Generation of the Value pattern |
--------------------------------------- |
Starting from the informations contained into the SHAPE.DAT, step 3 |
produces an aperiodic load. |
The load is formed by a set of different tasks with different wcets and |
dline. |
a first set (called random) is really random with random periods and wcets |
a second set (called bad) creates a set of big tasks with long dline and |
a set of tasks with short dline, similar to the pattern used by Baruah |
(in any case it remains offline. |
Step 4: Creation of the file for the value scheduler |
---------------------------------------------------- |
Finally, the step4 takes as imput the outputs from step3 and step2 toi create |
the initialization file for crunch... |