Opps, forgot to svn add these files
This commit is contained in:
		
							parent
							
								
									23284ee7bd
								
							
						
					
					
						commit
						4690e8b015
					
				
							
								
								
									
										14
									
								
								include/minix/sched.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								include/minix/sched.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
#ifndef _MINIX_SCHED_H
 | 
			
		||||
#define _MINIX_SCHED_H
 | 
			
		||||
 | 
			
		||||
#include <minix/ipc.h>
 | 
			
		||||
 | 
			
		||||
_PROTOTYPE(int sched_stop, (endpoint_t scheduler_e, endpoint_t schedulee_e));
 | 
			
		||||
_PROTOTYPE(int sched_start, (endpoint_t scheduler_e, endpoint_t schedulee_e, 
 | 
			
		||||
	endpoint_t parent_e, unsigned maxprio, unsigned quantum,
 | 
			
		||||
	endpoint_t *newscheduler_e));
 | 
			
		||||
_PROTOTYPE(int sched_inherit, (endpoint_t scheduler_e, 
 | 
			
		||||
	endpoint_t schedulee_e, endpoint_t parent_e, unsigned maxprio, 
 | 
			
		||||
	endpoint_t *newscheduler_e));
 | 
			
		||||
 | 
			
		||||
#endif /* _MINIX_SCHED_H */
 | 
			
		||||
							
								
								
									
										81
									
								
								lib/libsys/sched_start.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								lib/libsys/sched_start.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,81 @@
 | 
			
		||||
#include "syslib.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <machine/archtypes.h>
 | 
			
		||||
#include <timers.h>
 | 
			
		||||
 | 
			
		||||
#include "kernel/config.h"
 | 
			
		||||
#include "kernel/const.h"
 | 
			
		||||
#include "kernel/type.h"
 | 
			
		||||
#include "kernel/proc.h"
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*
 | 
			
		||||
 *				sched_inherit				     *
 | 
			
		||||
 *===========================================================================*/
 | 
			
		||||
PUBLIC int sched_inherit(endpoint_t scheduler_e, 
 | 
			
		||||
	endpoint_t schedulee_e, endpoint_t parent_e, unsigned maxprio, 
 | 
			
		||||
	endpoint_t *newscheduler_e)
 | 
			
		||||
{
 | 
			
		||||
	int rv;
 | 
			
		||||
	message m;
 | 
			
		||||
 | 
			
		||||
	assert(_ENDPOINT_P(scheduler_e) >= 0);
 | 
			
		||||
	assert(_ENDPOINT_P(schedulee_e) >= 0);
 | 
			
		||||
	assert(_ENDPOINT_P(parent_e) >= 0);
 | 
			
		||||
	assert(maxprio >= 0);
 | 
			
		||||
	assert(maxprio < NR_SCHED_QUEUES);
 | 
			
		||||
	assert(newscheduler_e);
 | 
			
		||||
	
 | 
			
		||||
	m.SCHEDULING_ENDPOINT	= schedulee_e;
 | 
			
		||||
	m.SCHEDULING_PARENT	= parent_e;
 | 
			
		||||
	m.SCHEDULING_MAXPRIO	= (int) maxprio;
 | 
			
		||||
 | 
			
		||||
	/* Send the request to the scheduler */
 | 
			
		||||
	if ((rv = _taskcall(scheduler_e, SCHEDULING_INHERIT, &m))) {
 | 
			
		||||
		return rv;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Store the process' scheduler. Note that this might not be the
 | 
			
		||||
	 * scheduler we sent the SCHEDULING_INHERIT message to. That scheduler
 | 
			
		||||
	 * might have forwarded the scheduling message on to another scheduler
 | 
			
		||||
	 * before returning the message.
 | 
			
		||||
	 */
 | 
			
		||||
	*newscheduler_e = m.SCHEDULING_SCHEDULER;
 | 
			
		||||
	return (OK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*
 | 
			
		||||
 *				sched_start				     *
 | 
			
		||||
 *===========================================================================*/
 | 
			
		||||
PUBLIC int sched_start(endpoint_t scheduler_e, endpoint_t schedulee_e, 
 | 
			
		||||
	endpoint_t parent_e, unsigned maxprio, unsigned quantum,
 | 
			
		||||
	endpoint_t *newscheduler_e)
 | 
			
		||||
{
 | 
			
		||||
	int rv;
 | 
			
		||||
	message m;
 | 
			
		||||
 | 
			
		||||
	assert(_ENDPOINT_P(scheduler_e) >= 0);
 | 
			
		||||
	assert(_ENDPOINT_P(schedulee_e) >= 0);
 | 
			
		||||
	assert(_ENDPOINT_P(parent_e) >= 0);
 | 
			
		||||
	assert(maxprio >= 0);
 | 
			
		||||
	assert(maxprio < NR_SCHED_QUEUES);
 | 
			
		||||
	assert(quantum > 0);
 | 
			
		||||
	assert(newscheduler_e);
 | 
			
		||||
	
 | 
			
		||||
	m.SCHEDULING_ENDPOINT	= schedulee_e;
 | 
			
		||||
	m.SCHEDULING_PARENT	= parent_e;
 | 
			
		||||
	m.SCHEDULING_MAXPRIO	= (int) maxprio;
 | 
			
		||||
	m.SCHEDULING_QUANTUM	= (int) quantum;
 | 
			
		||||
 | 
			
		||||
	/* Send the request to the scheduler */
 | 
			
		||||
	if ((rv = _taskcall(scheduler_e, SCHEDULING_START, &m))) {
 | 
			
		||||
		return rv;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Store the process' scheduler. Note that this might not be the
 | 
			
		||||
	 * scheduler we sent the SCHEDULING_START message to. That scheduler
 | 
			
		||||
	 * might have forwarded the scheduling message on to another scheduler
 | 
			
		||||
	 * before returning the message.
 | 
			
		||||
	 */
 | 
			
		||||
	*newscheduler_e = m.SCHEDULING_SCHEDULER;
 | 
			
		||||
	return (OK);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								lib/libsys/sched_stop.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								lib/libsys/sched_stop.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
#include "syslib.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*
 | 
			
		||||
 *				sched_stop				     *
 | 
			
		||||
 *===========================================================================*/
 | 
			
		||||
PUBLIC int sched_stop(endpoint_t scheduler_e, endpoint_t schedulee_e)
 | 
			
		||||
{
 | 
			
		||||
	int rv;
 | 
			
		||||
	message m;
 | 
			
		||||
	
 | 
			
		||||
	/* If the kernel is the scheduler, it will implicitly stop scheduling
 | 
			
		||||
	 * once another process takes over or the process terminates */
 | 
			
		||||
	if (scheduler_e == KERNEL || scheduler_e == NONE)
 | 
			
		||||
		return(OK);
 | 
			
		||||
 | 
			
		||||
	/* User-scheduled, perform the call */
 | 
			
		||||
	assert(_ENDPOINT_P(scheduler_e) >= 0);
 | 
			
		||||
	assert(_ENDPOINT_P(schedulee_e) >= 0);
 | 
			
		||||
 | 
			
		||||
	m.SCHEDULING_ENDPOINT	= schedulee_e;
 | 
			
		||||
	if ((rv = _taskcall(scheduler_e, SCHEDULING_STOP, &m))) {
 | 
			
		||||
		return rv;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (OK);
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user