first try at alarm clock

just added a static reference to the slept thread and its timeout.
thread is blocked, then interrupt handler checks timeout and unblocks.

this won't keep track of multiple slept threads.
also maybe screws with interrupt levels improperly in timer_sleetp ()...
.gitignore
Real attempt at alarm_clock

added a list of sleeping threads.
added the sleep_til time inside the thread struct,
so that timer_interrupt knows how long to wait.
loop through all sleeping threads that need to be woken up
in order (using order of sleep_list) in timer_interrupt
alarm clock fixes

safety check for empty sleep_list in timer_interrupt (it's gonna happen all the time)
some spelling issues and other stuff
some random additions for priority scheduling

in thread_tick, it loops through ready threads checking for higher priority threads to run

in synch, lock_acquire has been modified to include donation current thread priority to the lock holder
more in depth lock stuff

lock actually keeps track of old priority, so that it restores it when the lock is released.

still some potential issues here, but extended donation will happen if its all on the same lock and if its in the right order.

or will it? check that.  probably have to mess with how semaphore waiters are handled?
various fixes

just to make it build... all pointer crap and typos
framework for mlfqs

checking the thread_mlfqs bool (set by mlfqs flag at command line)
synch.c skips donation
thread.c has alternate versions of the ready_list
thread.c also has to update priorities, but I'll do that next
fixed some typos

as usual, the build always uncovers issues.  typos, for loop standard stuff, etc.
Fixed "Kernel PANIC"

changed find_file arg to "kernel.bin" as directed in the email "Troubleshooting for Project 2"
Adding splitting input string to process_execute

Splits executable name off of the input string, stores that as the thread name to comply with that convention and so that the kill text is what we want.

Stores a new char* pointer to a string in args, this time starting where the args start.  Right this now this doesn't get handed off anywhere, so it dies all alone in a corner.

There's probably an issue with how this stuff is allocated.  Some pointers, and additionally another array exec_name, are allocated inside process_execute, which terminates before the thread scheduler calls start_process in order to finish setting up the process.  The pointers are fine, we're just passing uints around.  The array I think will be fine because it's allocated using malloc, but I'm not entirely sure how that works...
possible fixes to first keyword stripping
alternate version using provided tokenizer
no allocation needed, it's a second pointer that starts out at fn_copy...
possible fix for strtok_r

also added debug print line
updated debug print line
another iteration of strtok_r

apparently it modifies all the strings its passed pointers to... that's not super cool ... :/
one last time perhaps -_-
one last try

to simplify things, use strlcpy with the distance to first space instead...