Explain what semaphores are, their usage, implementation given to avoid busy waiting and binary semaphores.
Semaphore definition
Usage for mutual exclusion and process synchronization
Implementation to avoid spinlock using block and wakeup
Binary semaphores