This course provides a comprehensive introduction to the discipline of Operating Systems, posing particular attention to the design and the implementation of the key building elements of Operating Systems. The overall onion-like structure of an Operating Systems is presented, with details of each layer of the onion, followed by a description of the key components, like primary memory, permanent storage, processor, interprocess communication. Moreover, the course tries to couple the theoretical explanation with concrete examples coming from the Linux operating system.