TP4: obj1 - obj2
This commit is contained in:
parent
e9fb35edda
commit
fd749300ed
28
tp4-obj1-meens/Makefile
Normal file
28
tp4-obj1-meens/Makefile
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
LIB_PATH=$(shell heptc -where)
|
||||||
|
OBJ=extern.c scheduler_c/scheduler.c scheduler_data_c/scheduler_data_types.c
|
||||||
|
|
||||||
|
aaa:
|
||||||
|
heptc -target c scheduler_data.ept
|
||||||
|
heptc extern.epi
|
||||||
|
heptc -target c scheduler.ept
|
||||||
|
gcc -I $(LIB_PATH)/c -I . main.c extern.c -I scheduler_data_c scheduler_c/scheduler.c scheduler_data_c/scheduler_data.c
|
||||||
|
|
||||||
|
al: main
|
||||||
|
|
||||||
|
a: extern.epi
|
||||||
|
heptc $<
|
||||||
|
|
||||||
|
$(OBJ): scheduler_data.ept scheduler.ept a
|
||||||
|
heptc -target c scheduler_data.ept
|
||||||
|
heptc -target c scheduler.ept
|
||||||
|
|
||||||
|
main: $(OBJ)
|
||||||
|
gcc -I $(LIB_PATH)/c -I . main.c $(OBJ)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.log
|
||||||
|
$(RM) *.epci
|
||||||
|
$(RM) *.mls
|
||||||
|
$(RM) *.o *.obj *.obc
|
||||||
|
$(RM) -r *_c
|
||||||
|
$(RM) *.out
|
30
tp4-obj1-meens/extern.c
Normal file
30
tp4-obj1-meens/extern.c
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#include "extern.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "scheduler_data_c/scheduler_data_types.h"
|
||||||
|
|
||||||
|
void Extern__deadline_miss_log_step(int data, int task_id, Extern__deadline_miss_log_out *_out)
|
||||||
|
{
|
||||||
|
printf("Deadline missed: task: %i, data: %i\n", task_id, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Extern__random_step(int max, Extern__random_out *_out)
|
||||||
|
{
|
||||||
|
_out->v = (rand() % max) + 1;
|
||||||
|
/* _out->v = max; */
|
||||||
|
return _out->v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Extern__print_scheduler_state_step(Scheduler_data__scheduler_state s, Extern__print_scheduler_state_out *_out)
|
||||||
|
{
|
||||||
|
printf("Scheduler state - current_date: %i\n", s.current_date);
|
||||||
|
for (size_t i = 0; i < Scheduler_data__ntasks; i++) {
|
||||||
|
int left = s.tasks[i].left;
|
||||||
|
if (s.tasks[i].status == 2)
|
||||||
|
left = 0;
|
||||||
|
printf("[%li] Task - status: %d - current_deadline: %i - left: %i\n",
|
||||||
|
i, s.tasks[i].status, s.tasks[i].current_deadline, left);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
5
tp4-obj1-meens/extern.epi
Normal file
5
tp4-obj1-meens/extern.epi
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
open Scheduler_data
|
||||||
|
|
||||||
|
fun deadline_miss_log(date:int;task_id:int) returns ()
|
||||||
|
fun random(max:int) returns (v:int)
|
||||||
|
fun print_scheduler_state(s:scheduler_state) returns ()
|
26
tp4-obj1-meens/extern.h
Normal file
26
tp4-obj1-meens/extern.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef EXTERN_H
|
||||||
|
#define EXTERN_H
|
||||||
|
|
||||||
|
#include "scheduler_data_c/scheduler_data_types.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int data;
|
||||||
|
int task_id;
|
||||||
|
} Extern__deadline_miss_log_out;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int max;
|
||||||
|
int v;
|
||||||
|
} Extern__random_out;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
} Extern__print_scheduler_state_out;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Extern__deadline_miss_log_step(int data, int task_id, Extern__deadline_miss_log_out *_out);
|
||||||
|
int Extern__random_step(int max, Extern__random_out *_out);
|
||||||
|
void Extern__print_scheduler_state_step(Scheduler_data__scheduler_state s, Extern__print_scheduler_state_out *_out);
|
||||||
|
|
||||||
|
#endif // EXTERN_H
|
||||||
|
|
6
tp4-obj1-meens/extern_types.h
Normal file
6
tp4-obj1-meens/extern_types.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef EXTERN_TYPES_H
|
||||||
|
#define EXTERN_TYPES_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* EXTERN_TYPES_H */
|
21
tp4-obj1-meens/main.c
Normal file
21
tp4-obj1-meens/main.c
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include <unistd.h>
|
||||||
|
/* #include "scheduler_data_c/scheduler_data.h" */
|
||||||
|
/* #include "scheduler_data_c/scheduler_data_types.h" */
|
||||||
|
#include "scheduler_c/scheduler.h"
|
||||||
|
#include "scheduler_c/scheduler_types.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Scheduler__main_out _out;
|
||||||
|
Scheduler__main_mem self;
|
||||||
|
char buffer[100];
|
||||||
|
|
||||||
|
|
||||||
|
Scheduler__main_reset(&self);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
fgets(buffer, 10, stdin);
|
||||||
|
Scheduler__main_step(&_out, &self);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
104
tp4-obj1-meens/scheduler.ept
Normal file
104
tp4-obj1-meens/scheduler.ept
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
open Scheduler_data
|
||||||
|
open Extern
|
||||||
|
|
||||||
|
fun select_aux(ts:task_status; ta:task_attributes;tid:int ;acc:select_acc)
|
||||||
|
returns (acc_o:select_acc)
|
||||||
|
let
|
||||||
|
acc_o =
|
||||||
|
if (ts.status = Ready) and (ta.period < acc.speriod) then
|
||||||
|
{ tid = tid; speriod = ta.period }
|
||||||
|
else acc
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun select_one_task(ts:task_status^ntasks) returns(selected:int)
|
||||||
|
var tmp : select_acc ;
|
||||||
|
let
|
||||||
|
tmp = foldi<<ntasks>> select_aux (ts,tasks,{ tid = ntasks; speriod = int_max }) ;
|
||||||
|
selected = tmp.tid ;
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun start_inst(current_date:int;tsi:task_status;ta:task_attributes)
|
||||||
|
returns (tso:task_status)
|
||||||
|
var c : bool ;
|
||||||
|
let
|
||||||
|
c = (current_date-ta.first_start)%ta.period = 0 ;
|
||||||
|
tso = merge c
|
||||||
|
(true -> {
|
||||||
|
status = Ready;
|
||||||
|
current_deadline = (current_date when c) + (ta.deadline when c);
|
||||||
|
left = random(ta.capacity when c)
|
||||||
|
})
|
||||||
|
(false -> tsi whenot c)
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun update_selected(ts:task_status;selected:int;tid:int) returns (tso:task_status)
|
||||||
|
let
|
||||||
|
tso =
|
||||||
|
if tid = selected then
|
||||||
|
{ ts with .status = Running }
|
||||||
|
else ts
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun rate_monotonic(ts:task_status^ntasks) returns (tso:task_status^ntasks)
|
||||||
|
var selected : int ;
|
||||||
|
let
|
||||||
|
selected = select_one_task(ts) ;
|
||||||
|
tso = mapi<<ntasks>> update_selected (ts, selected^ntasks) ;
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun check_deadline(current_date:int; tsi:task_status; tid:int)
|
||||||
|
returns (tso:task_status)
|
||||||
|
var c: bool ;
|
||||||
|
let
|
||||||
|
c = (tsi.status = Ready)
|
||||||
|
and (tsi.current_deadline = current_date) ;
|
||||||
|
() = deadline_miss_log(current_date when c, tid when c) ;
|
||||||
|
tso = if c then { tsi with .status = Waiting} else tsi ;
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun simulate(tsi:task_status)
|
||||||
|
returns (o:task_status)
|
||||||
|
let
|
||||||
|
o =
|
||||||
|
if tsi.status = Running then
|
||||||
|
if tsi.left <=1 then
|
||||||
|
(* Normal termination, move to Waiting state *)
|
||||||
|
{ tsi with .status = Waiting }
|
||||||
|
else
|
||||||
|
(* No termination, yet *)
|
||||||
|
{
|
||||||
|
status = Ready;
|
||||||
|
current_deadline = tsi.current_deadline ;
|
||||||
|
left = tsi.left - 1
|
||||||
|
}
|
||||||
|
else tsi
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun scheduler(si:scheduler_state) returns (so:scheduler_state)
|
||||||
|
var
|
||||||
|
new_date : int ;
|
||||||
|
tmp1,tmp2,tmp3,fin: task_status^ntasks ;
|
||||||
|
let
|
||||||
|
new_date = si.current_date + 1 ; (* advance time by 1 *)
|
||||||
|
tmp1 = map <<ntasks>> simulate (si.tasks) ;
|
||||||
|
tmp2 = mapi<<ntasks>> check_deadline (new_date^ntasks,tmp1);
|
||||||
|
tmp3 = map <<ntasks>> start_inst (new_date^ntasks,tmp2,tasks);
|
||||||
|
fin = rate_monotonic(tmp3) ; (* scheduling policy *)
|
||||||
|
so = { current_date = new_date; tasks = fin }
|
||||||
|
tel
|
||||||
|
|
||||||
|
|
||||||
|
const init_sstate : scheduler_state = {
|
||||||
|
current_date = -1 ;
|
||||||
|
tasks = {
|
||||||
|
status=Waiting;current_deadline=0;left=0
|
||||||
|
}^2
|
||||||
|
}
|
||||||
|
|
||||||
|
node main() returns ()
|
||||||
|
var sstate, new_sstate : scheduler_state ;
|
||||||
|
let
|
||||||
|
new_sstate = scheduler(sstate) ;
|
||||||
|
sstate = init_sstate fby new_sstate ;
|
||||||
|
() = print_scheduler_state(new_sstate) ;
|
||||||
|
tel
|
28
tp4-obj1-meens/scheduler_data.ept
Normal file
28
tp4-obj1-meens/scheduler_data.ept
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
const ntasks : int = 2
|
||||||
|
const int_max : int = 10
|
||||||
|
|
||||||
|
type task_attributes = {
|
||||||
|
period : int ;
|
||||||
|
capacity : int ;
|
||||||
|
deadline : int ;
|
||||||
|
first_start : int
|
||||||
|
}
|
||||||
|
|
||||||
|
type task_state = Running | Ready | Waiting
|
||||||
|
type task_status = {
|
||||||
|
status : task_state ;
|
||||||
|
current_deadline : int ;
|
||||||
|
left : int
|
||||||
|
}
|
||||||
|
|
||||||
|
type scheduler_state = {
|
||||||
|
current_date : int ;
|
||||||
|
tasks : task_status^ntasks
|
||||||
|
}
|
||||||
|
|
||||||
|
type select_acc = { tid : int; speriod : int }
|
||||||
|
|
||||||
|
const tasks : task_attributes^ntasks = [
|
||||||
|
{ period=5; capacity=2; deadline=5; first_start=0 },
|
||||||
|
{ period=7; capacity=2; deadline=7; first_start=3 }
|
||||||
|
]
|
28
tp4-obj2-meens/Makefile
Normal file
28
tp4-obj2-meens/Makefile
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
LIB_PATH=$(shell heptc -where)
|
||||||
|
OBJ=extern.c scheduler_c/scheduler.c scheduler_data_c/scheduler_data_types.c
|
||||||
|
|
||||||
|
aaa:
|
||||||
|
heptc -target c scheduler_data.ept
|
||||||
|
heptc extern.epi
|
||||||
|
heptc -target c scheduler.ept
|
||||||
|
gcc -I $(LIB_PATH)/c -I . main.c extern.c -I scheduler_data_c scheduler_c/scheduler.c scheduler_data_c/scheduler_data.c
|
||||||
|
|
||||||
|
al: main
|
||||||
|
|
||||||
|
a: extern.epi
|
||||||
|
heptc $<
|
||||||
|
|
||||||
|
$(OBJ): scheduler_data.ept scheduler.ept a
|
||||||
|
heptc -target c scheduler_data.ept
|
||||||
|
heptc -target c scheduler.ept
|
||||||
|
|
||||||
|
main: $(OBJ)
|
||||||
|
gcc -I $(LIB_PATH)/c -I . main.c $(OBJ)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.log
|
||||||
|
$(RM) *.epci
|
||||||
|
$(RM) *.mls
|
||||||
|
$(RM) *.o *.obj *.obc
|
||||||
|
$(RM) -r *_c
|
||||||
|
$(RM) *.out
|
30
tp4-obj2-meens/extern.c
Normal file
30
tp4-obj2-meens/extern.c
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#include "extern.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "scheduler_data_c/scheduler_data_types.h"
|
||||||
|
|
||||||
|
void Extern__deadline_miss_log_step(int data, int task_id, Extern__deadline_miss_log_out *_out)
|
||||||
|
{
|
||||||
|
printf("Deadline missed: task: %i, data: %i\n", task_id, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Extern__random_step(int max, Extern__random_out *_out)
|
||||||
|
{
|
||||||
|
_out->v = (rand() % max) + 1;
|
||||||
|
/* _out->v = max; */
|
||||||
|
return _out->v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Extern__print_scheduler_state_step(Scheduler_data__scheduler_state s, Extern__print_scheduler_state_out *_out)
|
||||||
|
{
|
||||||
|
printf("Scheduler state - current_date: %i\n", s.current_date);
|
||||||
|
for (size_t i = 0; i < Scheduler_data__ntasks; i++) {
|
||||||
|
int left = s.tasks[i].left;
|
||||||
|
if (s.tasks[i].status == 2)
|
||||||
|
left = 0;
|
||||||
|
printf("[%li] Task - status: %d - current_deadline: %i - left: %i\n",
|
||||||
|
i, s.tasks[i].status, s.tasks[i].current_deadline, left);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
}
|
5
tp4-obj2-meens/extern.epi
Normal file
5
tp4-obj2-meens/extern.epi
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
open Scheduler_data
|
||||||
|
|
||||||
|
fun deadline_miss_log(date:int;task_id:int) returns ()
|
||||||
|
fun random(max:int) returns (v:int)
|
||||||
|
fun print_scheduler_state(s:scheduler_state) returns ()
|
26
tp4-obj2-meens/extern.h
Normal file
26
tp4-obj2-meens/extern.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef EXTERN_H
|
||||||
|
#define EXTERN_H
|
||||||
|
|
||||||
|
#include "scheduler_data_c/scheduler_data_types.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int data;
|
||||||
|
int task_id;
|
||||||
|
} Extern__deadline_miss_log_out;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int max;
|
||||||
|
int v;
|
||||||
|
} Extern__random_out;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
} Extern__print_scheduler_state_out;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Extern__deadline_miss_log_step(int data, int task_id, Extern__deadline_miss_log_out *_out);
|
||||||
|
int Extern__random_step(int max, Extern__random_out *_out);
|
||||||
|
void Extern__print_scheduler_state_step(Scheduler_data__scheduler_state s, Extern__print_scheduler_state_out *_out);
|
||||||
|
|
||||||
|
#endif // EXTERN_H
|
||||||
|
|
6
tp4-obj2-meens/extern_types.h
Normal file
6
tp4-obj2-meens/extern_types.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef EXTERN_TYPES_H
|
||||||
|
#define EXTERN_TYPES_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* EXTERN_TYPES_H */
|
21
tp4-obj2-meens/main.c
Normal file
21
tp4-obj2-meens/main.c
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include <unistd.h>
|
||||||
|
/* #include "scheduler_data_c/scheduler_data.h" */
|
||||||
|
/* #include "scheduler_data_c/scheduler_data_types.h" */
|
||||||
|
#include "scheduler_c/scheduler.h"
|
||||||
|
#include "scheduler_c/scheduler_types.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Scheduler__main_out _out;
|
||||||
|
Scheduler__main_mem self;
|
||||||
|
char buffer[100];
|
||||||
|
|
||||||
|
|
||||||
|
Scheduler__main_reset(&self);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
fgets(buffer, 10, stdin);
|
||||||
|
Scheduler__main_step(&_out, &self);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
105
tp4-obj2-meens/scheduler.ept
Normal file
105
tp4-obj2-meens/scheduler.ept
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
open Scheduler_data
|
||||||
|
open Extern
|
||||||
|
|
||||||
|
fun select_aux(ts:task_status; ta:task_attributes;tid:int ;acc:select_acc)
|
||||||
|
returns (acc_o:select_acc)
|
||||||
|
let
|
||||||
|
acc_o =
|
||||||
|
if (ts.status = Ready) and (ta.period < acc.speriod) then
|
||||||
|
{ tid = tid; speriod = ta.period }
|
||||||
|
else acc
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun select_one_task(ts:task_status^ntasks) returns(selected:int)
|
||||||
|
var tmp : select_acc ;
|
||||||
|
let
|
||||||
|
tmp = foldi<<ntasks>> select_aux (ts,tasks,{ tid = ntasks; speriod = int_max }) ;
|
||||||
|
selected = tmp.tid ;
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun start_inst(current_date:int;tsi:task_status;ta:task_attributes)
|
||||||
|
returns (tso:task_status)
|
||||||
|
var c : bool ;
|
||||||
|
let
|
||||||
|
c = (current_date-ta.first_start)%ta.period = 0 ;
|
||||||
|
tso = merge c
|
||||||
|
(true -> {
|
||||||
|
status = Ready;
|
||||||
|
current_deadline =
|
||||||
|
(current_date when c) + (ta.deadline when c);
|
||||||
|
left = (ta.capacity when c)
|
||||||
|
})
|
||||||
|
(false -> tsi whenot c)
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun update_selected(ts:task_status;selected:int;tid:int) returns (tso:task_status)
|
||||||
|
let
|
||||||
|
tso =
|
||||||
|
if tid = selected then
|
||||||
|
{ ts with .status = Running }
|
||||||
|
else ts
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun rate_monotonic(ts:task_status^ntasks) returns (tso:task_status^ntasks)
|
||||||
|
var selected : int ;
|
||||||
|
let
|
||||||
|
selected = select_one_task(ts) ;
|
||||||
|
tso = mapi<<ntasks>> update_selected (ts, selected^ntasks) ;
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun check_deadline(current_date:int; tsi:task_status; tid:int)
|
||||||
|
returns (tso:task_status)
|
||||||
|
var c: bool ;
|
||||||
|
let
|
||||||
|
c = (tsi.status = Ready)
|
||||||
|
and (tsi.current_deadline = current_date) ;
|
||||||
|
() = deadline_miss_log(current_date when c, tid when c) ;
|
||||||
|
tso = if c then { tsi with .status = Waiting} else tsi ;
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun simulate(tsi:task_status)
|
||||||
|
returns (o:task_status)
|
||||||
|
let
|
||||||
|
o =
|
||||||
|
if tsi.status = Running then
|
||||||
|
if tsi.left <=1 then
|
||||||
|
(* Normal termination, move to Waiting state *)
|
||||||
|
{ tsi with .status = Waiting }
|
||||||
|
else
|
||||||
|
(* No termination, yet *)
|
||||||
|
{
|
||||||
|
status = Ready;
|
||||||
|
current_deadline = tsi.current_deadline ;
|
||||||
|
left = tsi.left - 1
|
||||||
|
}
|
||||||
|
else tsi
|
||||||
|
tel
|
||||||
|
|
||||||
|
fun scheduler(si:scheduler_state) returns (so:scheduler_state)
|
||||||
|
var
|
||||||
|
new_date : int ;
|
||||||
|
tmp1,tmp2,tmp3,fin: task_status^ntasks ;
|
||||||
|
let
|
||||||
|
new_date = si.current_date + 1 ; (* advance time by 1 *)
|
||||||
|
tmp1 = map <<ntasks>> simulate (si.tasks) ;
|
||||||
|
tmp2 = mapi<<ntasks>> check_deadline (new_date^ntasks,tmp1);
|
||||||
|
tmp3 = map <<ntasks>> start_inst (new_date^ntasks,tmp2,tasks);
|
||||||
|
fin = rate_monotonic(tmp3) ; (* scheduling policy *)
|
||||||
|
so = { current_date = new_date; tasks = fin }
|
||||||
|
tel
|
||||||
|
|
||||||
|
|
||||||
|
const init_sstate : scheduler_state = {
|
||||||
|
current_date = -1 ;
|
||||||
|
tasks = {
|
||||||
|
status=Waiting;current_deadline=0;left=0
|
||||||
|
}^2
|
||||||
|
}
|
||||||
|
|
||||||
|
node main() returns ()
|
||||||
|
var sstate, new_sstate : scheduler_state ;
|
||||||
|
let
|
||||||
|
new_sstate = scheduler(sstate) ;
|
||||||
|
sstate = init_sstate fby new_sstate ;
|
||||||
|
() = print_scheduler_state(new_sstate) ;
|
||||||
|
tel
|
28
tp4-obj2-meens/scheduler_data.ept
Normal file
28
tp4-obj2-meens/scheduler_data.ept
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
const ntasks : int = 2
|
||||||
|
const int_max : int = 10
|
||||||
|
|
||||||
|
type task_attributes = {
|
||||||
|
period : int ;
|
||||||
|
capacity : int ;
|
||||||
|
deadline : int ;
|
||||||
|
first_start : int
|
||||||
|
}
|
||||||
|
|
||||||
|
type task_state = Running | Ready | Waiting
|
||||||
|
type task_status = {
|
||||||
|
status : task_state ;
|
||||||
|
current_deadline : int ;
|
||||||
|
left : int
|
||||||
|
}
|
||||||
|
|
||||||
|
type scheduler_state = {
|
||||||
|
current_date : int ;
|
||||||
|
tasks : task_status^ntasks
|
||||||
|
}
|
||||||
|
|
||||||
|
type select_acc = { tid : int; speriod : int }
|
||||||
|
|
||||||
|
const tasks : task_attributes^ntasks = [
|
||||||
|
{ period=5; capacity=2; deadline=5; first_start=0 },
|
||||||
|
{ period=7; capacity=4; deadline=7; first_start=3 }
|
||||||
|
]
|
Loading…
Reference in New Issue
Block a user