Exemple #1
0
void
SignalSem(Semaphore_t *sem)
{
	bool ints = SetInts(false);
	if ( !SignalQueue(&sem->queue) )
		sem->value++;
	SetInts(ints);
}
Exemple #2
0
void
FlushSem(Semaphore_t *sem, bool wait_ok)
{
	bool ints = SetInts(false);
	sem->value = 0;
	FlushQueue(&sem->queue, wait_ok);
	SetInts(ints);
}
Exemple #3
0
void
DeleteSem(Semaphore_t *sem)
{
	bool ints = SetInts(false);
	FlushQueue(&sem->queue, false);
	Free(GetName(sem));
	Free(sem);
	SetInts(ints);
}
Exemple #4
0
stack_ptr switch_user_to_kernel(stack_ptr esp) {

    int i = SetInts(0);

	current->stack = esp;
    SetInts(i);

	return kernel_stack;
}
Exemple #5
0
void
schedule()
{
    int i = SetInts(0);

	current = current->next;

	while(current->state == TASK_PAUSED)
		current = current->next;

    SetInts(i);
}
Exemple #6
0
void
resume_task_with_pid(int pid){

    int i = SetInts(0);

	task_t* task = find_task_with_pid(pid);

	if(task != (task_t *) -1)
		task_ready(task);

    SetInts(i);
}
Exemple #7
0
bool
WaitSemTimed(Semaphore_t *sem, unsigned msecs)
{
	bool success;

	bool ints = SetInts(false);
	if ( (success = (sem->value > 0)) )
		sem->value--;
	else
		success = WaitQueueTimed(&sem->queue, msecs);
	SetInts(ints);

	return success;
}
Exemple #8
0
void
pause_task_with_pid(int pid){

    int i = SetInts(0);

	task_t* task = find_task_with_pid(pid);

	if(task != (task_t *) -1)
		task_pause(task);

    SetInts(i);

    _reschedule();
}
int main(void)
{
	int i, j;
	SetInts(&i, &j);
	printf("i=%d, j=%d\n", i, j);
	return 0;
}
Exemple #10
0
void
add_task(task_t* task){

    int i = SetInts(0);

	if(current == 0){
		current = task;
		current->next = current;
	} else  {
		task_t* tmp = current->next;
		current->next = task;
		task->next = tmp;
	}

    SetInts(i);

}
Exemple #11
0
void
remove_task_with_pid(int pid)
{
    int i = SetInts(0);

	task_t* tr = find_task_with_pid(pid);

	if (tr != (task_t *) -1) {
    	task_t* pr = tr->next;

    	while(pr->next->pid != pid)
    		pr = pr->next;

    	pr->next = tr->next;
    }

    SetInts(i);
}
Exemple #12
0
task_t *
create_task(void (*func)(int, char **), int argc, char**argv){

    int i = SetInts(0);

	int pid = next_pid();

    task_t * task;

	if (pid != -1) {
        // FIXME
    	// task = &tasks[pid];
    	// task->next = 0;
    	// task->pid = pid;
    	// task->stack = stacks[pid] + STACK_SIZE;
        //
    	// task_init(task, func, argc, argv);

    	task = &tasks[pid];
    	task->next = 0;
    	task->pid = pid;

        if (current != NULL)
            task->parent_pid = current->pid;
        else
            task->parent_pid = 0;

    	task->stack_base = stacks[pid];
    	task->stack = stacks[pid];

        task_init(task, func, argc, argv);
    }

    SetInts(i);

	return pid == -1 ? (task_t *) -1 : task;
}