Concurrency
Implemented new system calls clone() and join(). clone() creates a kernel thread, join() waits for a thread. Used clone() to build a thread library, with thread_create(). For thread safety, I implemented a ticket lock with lock_init(), lock_acquire(), lock_release(), and implemented a conditional variable with cv_signal() and cv_wait() functions.