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]); } }
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); } }
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, ¶ms); if (j < 0) ptask_syserror("gen()", "error in creating task"); ptask_activate_at(j, offset[i], MILLI); } }
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(); }