00001
00011 #ifndef __KERN_SCHEDULER_H__
00012 #define __KERN_SCHEDULER_H__
00013
00014 #include <list.h>
00015 #include <register.h>
00016
00017 struct Thread;
00018
00019
00020 typedef struct
00021 {
00022
00023 List waitingThreads;
00024 } Resource;
00025
00026
00027 typedef struct
00028 {
00029
00030 struct Thread * currentThread;
00031
00032 List readyThreads;
00033 } Scheduler;
00034
00042 extern int scheduler_initialize (void);
00043
00050 extern void scheduler_tick (void);
00059 extern void scheduler_context_switch (Registers * registers);
00066 extern void scheduler_jump (void);
00067
00076 extern void scheduler_schedule (struct Thread * thread);
00086 extern void scheduler_unschedule (struct Thread * thread);
00097 extern void scheduler_yield (struct Thread * thread);
00098
00108 extern int resource_create (Resource * resource);
00117 extern void resource_destroy (Resource * resource);
00118
00131 extern void resource_wait (Resource * resource, struct Thread * thread, void (* waitingHandler) (struct Thread *, void *), void * waitingData);
00142 extern void resource_rewait (Resource * resource, struct Thread * thread);
00152 extern int resource_wake (Resource * resource, int amount);
00153
00154 #endif
00155