Example #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]);
	}
}
Example #2
0
void gsem_init(gsem_t *gs)
{
  pmux_create_pc(&gs->m, 99);
  pthread_cond_init(&gs->c, 0);
  gs->nsignals = 0;
  gs->narrived = 0;
}
Example #3
0
void set_sem_sezC(int protocol) {

    pthread_mutex_init(&mx_sezNorm, 0);
    printf("Selected protocol : -%d-  \n", protocol);

    if (protocol == PRIO_INHERITANCE) {
        printf("PRIO_INHERITANCE  \n");
        pmux_create_pi(&mx_sezA);
        pmux_create_pi(&mx_sezB);

    } else if (protocol == PRIO_CEILING) {
        printf("PRIO_CEILING   \n");
        pmux_create_pc(&mx_sezA, PRIO);
        pmux_create_pc(&mx_sezB, PRIO);

    } else {

        pthread_mutex_init(&mx_sezA, 0);
        pthread_mutex_init(&mx_sezB, 0);
    }
}
Example #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();
}
Example #5
0
/**
   This function returns a free descriptor, or -1 if there are no more
   free descriptors. _tp is organised as a linked list, first_free is
   the head of the list. This extracts from the head. It uses the
   _tp_mutex to protect the critical section.
*/
static int allocate_tp() {
    int x = first_free;
    if (x == _TP_NOMORE)
        return -1;
    else {
        pthread_mutex_lock(&_tp_mutex);
        if (_tp[x].free == _TP_BUSY) { /*< already taken by another thread ! */
            pthread_mutex_unlock(&_tp_mutex);
            return -1;
        }
        first_free = _tp[x].free;
        _tp[x].free = _TP_BUSY;

        if (ptask_protocol == PRIO_INHERITANCE)
            pmux_create_pi(&_tp[x].mux);
        else if (ptask_protocol == PRIO_CEILING)
            pmux_create_pc(&_tp[x].mux, 99);
        else
            pthread_mutex_init(&_tp[x].mux, 0);

        pthread_mutex_unlock(&_tp_mutex);
        return x;
    }
}