Prerequisites
This course assumes a foundational understanding of several key concepts and skills. Throughout the semester, I will operate under the assumption that you have the following background knowledge:
- Operating Systems: You should be familiar with basic concepts such as processes, file systems, program execution, and virtual memory (e.g., paging, page tables).
- Networking: You should understand the basics of data networking, including the roles of switches and routers, IP, TCP, UDP, and sockets. While detailed knowledge is not required, if these terms are unfamiliar, I recommend reviewing the fundamentals of networking.
- Programming: You should be comfortable with programming, particularly in C. While assignments are designed to be mostly language-independent (and may allow the use of Go, Java, or Python), some assignments will require C programming.
- Linux Systems: You should have basic familiarity with using a Linux system, including navigating the file system, compiling programs, and creating simple shell scripts.
If you are unfamiliar with any of these topics, it should not necessarily deter you from taking the course—most of these concepts are straightforward to learn with some effort. However, you may wish to speak with me if you have significant gaps in this knowledge.
If you feel that you have difficulty with programming in general, I strongly recommend reconsidering your enrollment in the course, as programming proficiency is critical to successfully completing the assignments and understanding the material.