schedule: add replaceable scheduler struct
authorBrian Norris <banorris@uci.edu>
Mon, 12 Mar 2012 22:49:59 +0000 (15:49 -0700)
committerBrian Norris <banorris@uci.edu>
Mon, 12 Mar 2012 22:49:59 +0000 (15:49 -0700)
I may need to replace the scheduler in the future, so modularize it.

model.h
schedule.c
schedule.h

diff --git a/model.h b/model.h
index 7116d54592575b804f2f90695840335410be4250..73c3d0c0f91ad0e5d246a9bb788adda0f8d76a91 100644 (file)
--- a/model.h
+++ b/model.h
@@ -2,6 +2,7 @@
 #define __MODEL_H__
 
 struct model_checker {
+       struct scheduler *scheduler;
 };
 
 #endif /* __MODEL_H__ */
index d567dd7fd5799f3723acf3d2ff678fa3471e6cea..4ac8b4991b37a70993a10485923c367bc847d4d2 100644 (file)
@@ -1,6 +1,9 @@
+#include <stdlib.h>
+
 #include "libthreads.h"
 #include "schedule.h"
 #include "common.h"
+#include "model.h"
 
 struct thread_list_node {
        struct thread *this;
@@ -58,3 +61,17 @@ struct thread *schedule_choose_next(void)
 {
        return dequeue_thread();
 }
+
+void scheduler_init(struct model_checker *mod)
+{
+       struct scheduler *sched;
+
+       /* Initialize FCFS scheduler */
+       sched = malloc(sizeof(*sched));
+       sched->init = NULL;
+       sched->exit = NULL;
+       sched->add_thread = schedule_add_thread;
+       sched->next_thread = schedule_choose_next;
+       sched->get_current_thread = thread_current;
+       mod->scheduler = sched;
+}
index ac69fa1163bfdfb3d8aff5a1f4ad249cdecb54e0..360b390512b4776d0af54eb331aa91682c4906c0 100644 (file)
@@ -2,7 +2,19 @@
 #define __SCHEDULE_H__
 
 #include "libthreads.h"
+#include "model.h"
 
+struct scheduler {
+       void (*init)(void);
+       void (*exit)(void);
+       void (*add_thread)(struct thread *t);
+       struct thread * (*next_thread)(void);
+       struct thread * (*get_current_thread)(void);
+
+       void *priv;
+};
+
+void scheduler_init(struct model_checker *mod);
 void schedule_add_thread(struct thread *t);
 struct thread *schedule_choose_next(void);