Beispiel #1
0
void	init(int policy, int prot)
{
	allegro_init();
	set_gfx_mode(GFX_AUTODETECT_WINDOWED, XMAX, YMAX, 0, 0);
	clear_to_color(screen, BGC);
	install_keyboard();
	print_grid(policy, prot);
	
	if (prot == PIP) ptask_init(policy, GLOBAL, PRIO_INHERITANCE);
	else if (prot == PCP) ptask_init(policy, GLOBAL, PRIO_CEILING);
	else {
	  allegro_exit();
	  ptask_syserror("pcp.c", "Wrong protocol");
	}

	if (prot == PIP) { 
	  pmux_create_pi(&mxa);
	  pmux_create_pi(&muxA);
	  pmux_create_pi(&muxB);
	}
	else if (prot == PCP) {
	  pmux_create_pc(&mxa, prio[1]);
	  pmux_create_pc(&muxA, prio[1]);
	  pmux_create_pc(&muxB, prio[1]);
	}
}
Beispiel #2
0
void	gen()
{
    int	i, j; 

    for (i=1; i<nt; i++) {
	j = ptask_create(task, period[i], prio[i], DEFERRED);
	if (j < 0) ptask_syserror("gen()", "error in creating task");
    }

    for (i=1; i<nt; i++) {
	ptask_activate(i);
    }
}
Beispiel #3
0
void gen() {
    int i, j;

    for (i = 1; i < num_tasks; i++) {
        tpars params = TASK_SPEC_DFL;
        params.period = tspec_from(period[i], MILLI);
        params.rdline = tspec_from(dline[i], MILLI);
        params.priority = prio[i];
        params.act_flag = DEFERRED;
        params.processor = 0;
        j = ptask_create_param(task, &params);
        if (j < 0)
            ptask_syserror("gen()", "error in creating task");
        ptask_activate_at(j, offset[i], MILLI);
    }
}
Beispiel #4
0
void ptask_init(int policy, global_policy global, sem_protocol protocol) {
    int i;

    ptask_policy = policy;
    ptask_global = global;
    ptask_protocol = protocol;
    ptask_num_cores = sysconf(_SC_NPROCESSORS_ONLN);

    /* checks that admission control is disabled in case of partitioned edf */
    if ((ptask_policy == SCHED_DEADLINE) && (ptask_global == PARTITIONED)) {
        FILE *f = fopen("/proc/sys/kernel/sched_rt_runtime_us", "r");
        int v = 0;
        fscanf(f, "%d", &v);
        fclose(f);
        if (v != -1) {
            fprintf(stderr, "Cannot set PARTITIONED EDF scheduling, because "
                            "admission control is enabled\n");
            exit(-1);
        }
    }

    /* initializes all private sems with the value 0	*/
    for (i = 0; i < MAX_TASKS; i++) {
        sem_init(&_tsem[i], 0, 0);
        if (i == MAX_TASKS - 1)
            _tp[i].free = _TP_NOMORE;
        else
            _tp[i].free = i + 1;
    }
    first_free = 0;
    if (ptask_protocol == PRIO_INHERITANCE)
        pmux_create_pi(&_tp_mutex);
    else if (ptask_protocol == PRIO_CEILING)
        pmux_create_pc(&_tp_mutex, 99);
    else if (ptask_protocol == NO_PROTOCOL)
        pthread_mutex_init(&_tp_mutex, 0);
    else
        ptask_syserror("ptask_init()", "Semaphore protocol not supported");

    // initialize time
    tspec_init();
}