summaryrefslogtreecommitdiff
path: root/kernel/sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index dd75d47..8469005 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -48,6 +48,7 @@ struct task_state {
} __attribute__((packed));
struct task_struct *ctask;
+uint32_t ctaskn;
struct task_state *cstate;
static struct task_struct tasks[NRTASKS];
@@ -194,6 +195,7 @@ void sched_init(void) {
create_proc(&_usrbin_start, (size_t) &_usrbin_size);
create_proc(&_usrbin_start, (size_t) &_usrbin_size);
+ create_proc(&_usrbin_start, (size_t) &_usrbin_size);
switch_to(0, &tasks[0]);
}
@@ -221,12 +223,20 @@ void save_state(void) {
}
void reschedule(void) {
+ int i;
+ uint32_t n;
+
if(ctask == NULL)
return;
- if(ctask == &tasks[0]) {
- switch_to(1, &tasks[1]);
- } else {
- switch_to(0, &tasks[0]);
+ n = ctaskn;
+ for(i = 0; i < NRTASKS; i++) {
+ n = (n + 1) % NRTASKS;
+ if(tasks[n].pid)
+ switch_to(n, &tasks[n]);
}
}
+
+void sched_tick(void) {
+ reschedule();
+}