I've taught from another text, but this one seems to provide the most solid foundation of any around. It covers all of the basics of operating system responsibilities in a thorough and orderly way, starting with processes, memory, file systems, and security, including information about malicious attacks. This new edition also addresses multiprocessor systems, which have become prevalent in the form of multi-core processors, and the special needs of media processing systems. Toward the end, it also presents case studies of three contemporary OSs, in enough detail to understand the differences between the different OS philosophies and structures. After a relatively brief chapter summarizing Tanenbaum's beliefs about OS design, this ends with a bibliography that even researchers and advanced practitioners will appreciate.
But, if you haven't already found out the hard way, OSs raise surprisingly strong feelings. In my case, the feeling is that the book ignores about 99% of all processors - the ones in your cell phone, car systems, appliances, and everything else that doesn't look like a computer, i.e. the embedded processors. These systems impose critical constraints on timing, memory, and performance, and impose different kinds of constraints according to their usage. It also skims lightly over the server farms that prevail in banking, industry, and commerce, and over the massive demands addressed by things like the Google file system.
Still, this book presents all of the basics. Even when programming an embedded system too small to support an OS, the principles taught here will still be useful. And, when the reader graduates to more specialized topics, like massively parallel supercomputers, high reliability systems, or multi-tierd enterprise systems, this provides a solid foundation on which to build the more unusual structures. There's only so much you can pack into a one-term introduction to operating systems, and this book does a great job of it.