a) In languages that support multi-threading, a thread's execution typically occurs inside some kind of ``callable'' construct such as a function or method. b) The relationship between fork() and wait() is much like the relationship between pthread_create() and pthread_join(). c) Even though Linux's implementation of POSIX Threads allows for the creation of multiple threads, only one of the these threads can be in the `RUNNING` state at a time, even when the underlying machine uses a multiprocessor system. d) Context switches between 2 threads that are part of the same process are usually cheaper than context switches between 2 threads that belong to different processes. e) Abstractions such as mutexes and semaphores may fail in situations where a system is under high load and thus needs to preempt threads more often, which increases the likelihood that they are preempted even while they are executing in a critical section.