You will need a lot of those data structures for the scheduler. Depending on which algorithm you use to schedule processes, you will use different data structures. The most popular, a round-robin algorithm will utilize a queue (FIFO).
You'll also do a lot of threading, and fork/exec which aren't really data structure dependent, but utilize a lot of "synchronization" programming.
In the class I took we didn't actually write the operating system, we just used the basic API that the OS provides (such as reading from a buffer, writing to a buffer, fork, exec, etc...), and also utilized higher level languages like C# and Java to implement multithreaded applications.
Understanding the concepts behind resources, producer consumer problems (livelocking, deadlocking) will be very useful.