Beispiel #1
0
/*! initialize thread structures and create idle thread */
void kthreads_init ()
{
	extern kprog_t kprog;
	int prio, i, j;

	list_init ( &all_threads );

	active_thread = NULL;
	ksched_init ();

	/* initially create 'idle thread' */
	kernel_proc.proc = NULL;
	kernel_proc.smap = NULL; /* use kernel pool */
	kernel_proc.m.start = NULL;
	kernel_proc.m.size = (size_t) 0xffffffff;

	(void) kthread_create ( idle_thread, NULL, 0, SCHED_FIFO, 0, NULL,
				0, &kernel_proc );

	/* user_proc initialization */
	user_proc.prog = &kprog;
	user_proc.m.size = kprog.m->size;
	user_proc.m.start = (void *) kprog.prog;
	user_proc.proc = (void *) kprog.prog;
	strcpy ( user_proc.name, kprog.prog->name );
	user_proc.heap = user_proc.m.start + (uint) user_proc.proc->heap;
	user_proc.stack = user_proc.m.start + (uint) user_proc.proc->stack;
	user_proc.heap_size = (uint) user_proc.stack - (uint) user_proc.heap;
	user_proc.stack_size = (uint) kprog.prog->end - (uint) user_proc.stack;
	user_proc.thread_stack_size = DEFAULT_THREAD_STACK_SIZE;
	user_proc.proc->p.heap_size = user_proc.heap_size;
	user_proc.proc->p.stack_size = user_proc.stack_size;
	user_proc.proc->p.thread_stack = user_proc.thread_stack_size;

	/* initialize bitmap for threads stack management */
	/* in stack area: kproc->smap_size thread stacks */
	user_proc.smap_size = user_proc.stack_size / user_proc.thread_stack_size;
	ASSERT ( user_proc.smap_size > 0 );

	/* required number of uints for mask */
	i = ( user_proc.smap_size + sizeof(uint)*8 - 1 ) / (sizeof(uint)*8);

	user_proc.smap = kmalloc ( i * sizeof (uint) );
	memset ( user_proc.smap, 0, i * sizeof (uint) );
	for ( j = user_proc.smap_size%(sizeof(uint)*8+1); j < sizeof(uint)*8; j++ )
		user_proc.smap[i-1] |= 1<<j;

	prio = user_proc.proc->p.prio;
	if ( !prio )
		prio = THREAD_DEF_PRIO;

	kthread_create ( user_proc.proc->p.init, NULL, 0, SCHED_FIFO, prio, NULL,
			 0, &user_proc );

	kthreads_schedule ();
}
Beispiel #2
0
/*! initialize thread structures and create idle thread */
void kthreads_init ()
{
	list_init ( &all_threads );
	list_init ( &procs );

	active_thread = NULL;
	ksched_init ();

	/* initially create 'idle thread' */
	kernel_proc.prog = NULL;
	kernel_proc.stack_pool = NULL; /* use kernel pool */
	kernel_proc.m.start = NULL;
	kernel_proc.m.size = (size_t) 0xffffffff;

	(void) kthread_create ( idle_thread, NULL, 0, SCHED_FIFO, 0, NULL,
				NULL, 0, &kernel_proc );

	kthreads_schedule ();
}
Beispiel #3
0
/*! initialize thread structures and create idle thread */
void kthreads_init ()
{
	extern kprog_t prog;
	int prio;

	list_init ( &all_threads );

	active_thread = NULL;
	ksched_init ();

	/* initially create 'idle thread' */
	kernel_proc.prog = NULL;
	kernel_proc.stack_pool = NULL; /* use kernel pool */
	kernel_proc.m.start = NULL;
	kernel_proc.m.size = (size_t) 0xffffffff;

	(void) kthread_create ( idle_thread, NULL, 0, SCHED_FIFO, 0, NULL,
				NULL, 0, &kernel_proc );

	/* user_proc */
	user_proc.prog = &prog;
	user_proc.m.size = prog.m->size;
	user_proc.m.start = user_proc.pi = prog.pi;

	/* initialize memory pool for threads stacks */
	user_proc.stack_pool = ffs_init (
		U2K_GET_ADR ( user_proc.pi->stack, &user_proc ),
		(size_t) prog.pi->end_adr - (size_t) prog.pi->stack + 1 );

	prio = prog.pi->prio;
	if ( !prio )
		prio = THREAD_DEF_PRIO;

	kthread_create ( user_proc.pi->init, NULL, 0, SCHED_FIFO, prio, NULL,
			 NULL, 0, &user_proc );

	kthreads_schedule ();
}
Beispiel #4
0
/*! initialize thread structures and create idle thread */
void kthreads_init ()
{
	int prio;

	list_init ( &all_threads );

	active_thread = NULL;
	ksched_init ();

	(void) kthread_create(idle_thread,NULL,0,SCHED_FIFO,0,NULL,NULL,0);

	/* initialize memory pool for threads */
	pi.heap = kmalloc ( PROG_HEAP_SIZE );
	pi.heap_size = PROG_HEAP_SIZE;

	prio = pi.prio;
	if ( !prio )
		prio = THREAD_DEF_PRIO;

	(void) kthread_create(pi.init,NULL,0,SCHED_FIFO,prio,NULL,NULL,0);

	kthreads_schedule ();
}