Opps, forgot to svn add these files
This commit is contained in:
parent
23284ee7bd
commit
4690e8b015
3 changed files with 122 additions and 0 deletions
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…
Reference in a new issue