The course introduces students to Operating Systems, their concepts and building blocks. The students will learn to understand, apply, and extend these concepts through a focus on systems programming in the UNIX environment. They will be introduced to the main components of modern computer operating systems: resource allocation, process scheduling, memory management, file systems, management of input and output devices, multi-processor systems and synchronization.
After taking and successfully passing this course, the students will be able to
- Use a UNIX operating system as a user and as a developer
- Use one of the common shells (e.g. bash, csh) on the command line and in simple scripts
- Read, understand and explain complex C code
- Understand and use UNIX systems calls, in particular those for file I/O, process and thread management, inter-process communications
- Design and develop systems-level C programs of some significant complexity, for example: a. Servers which can handle multiple simultaneous clients b. Programs which are composed of multiple cooperating processes
- Understand and use process and thread synchronization techniques
- Understand some basic operating systems concepts such as synchronization, process scheduling and memory management