Nucleus
Barry Preemptive and lockless scheduler a1eaf26 (3 years, 1 month ago)
/*
* This file controls the system clock and contains the functions related to
* getting and setting the time from various sources. It keeps a monotonic
* clock internally, but can also make use of the tasks' clocks, and the RTC.
*/
#include <stdint.h>
#include <nucleus/cpu.h>
#include <nucleus/task.h>
void balance_scheduler(void);
uint32_t monotonic = 0;
/* Timer interrupt */
void
timer_handler(struct InterruptFrame *frame)
{
if (cpu->id == 0)
monotonic++;
if (!current)
return;
/* Book-keep the scheduler */
Scheduler *s = cpu->scheduler;
if (monotonic % 300000 == 0)
balance_scheduler();
if (s->timeslice == 0)
schedule();
s->timeslice--;
}