2 - Implemented using a wait queue for every file descriptor
3 - That requires waiting on sockets to be centeralised
5 All wait tasks (reads on VTerm, Pipes, PTYs, network sockets) use the kernel
6 version of select with an inifinite timeout.
7 They then signal the VFS using their VFS node pointer as a reference
9 The VFS function select()
10 - Maintains a list of processes on each node (if select has been called on that node)
11 - Each process maybe has a semaphore on it (to use the semaphore code to maintain the process list)
12 > Could maybe use a mutex instead