Alarm Clock
Reimplement timer_sleep(), defined in devices/timer.c.
Although a working implementation is provided, it busy waits, that is,
it spins in a loop checking the current time and calling thread_yield() until
enough time has gone by. Reimplement it to avoid busy waiting.
void timer_sleep (int64_t ticks);
Suspends execution of the calling thread until time has advanced by at least x timer ticks. Unless the system is otherwise idle, the thread need not wake up after exactly x ticks. Just put it on the ready queue after they have waited for the right amount of time.
timer_sleep() is useful for threads that operate in real-time, e.g. for
blinking the cursor once per second. The argument to timer_sleep() is
expressed in timer ticks, not in milliseconds or any another unit. There are
TIMER_FREQ timer ticks per second, where TIMER_FREQ is a macro defined in
devices/timer.h. The default value is 100. We don't recommend changing this
value, because any change is likely to cause many of the tests to fail.
Separate functions timer_msleep(), timer_usleep(), and timer_nsleep() do
exist for sleeping a specific number of milliseconds, microseconds, or
nanoseconds, respectively, but these will call timer_sleep() automatically
when necessary. You do not need to modify them.
The alarm clock implementation is not needed for later projects, although it
could be useful for project 4.