Topics on the engineering of computing and networking systems: design challenges; techniques for controlling complexity; operating systems and networking systems: performance; strong modularity; client-server; naming; security and privacy, atomicity and coordination of concurrent activities; user and end-to-end applications. Case studies of working systems and readings from the current literature provide comparisons and contrasts. Students will complete two design/implementation projects.
At the end of the term, students will be able to:
- Explain sources of complexity in computer system design, e.g. incommensurate scaling and emergent properties.
- Exploit systems design principles to cope with the complexity, e.g., modularity, hierarchy, layering, indirection.
- Command software tools to measure performance and understand how actual computing and network systems work.
- Explain the design and implementation of real-world computing and networking (i.e., Internet) systems, e.g., DNS, HTTP, OpenSSL.
- Develop programming skills to develop OS and networking tools and software.
- Use software tools to understand, measure, and design modern computing systems.
- Implement concurrent and network programs in Java.
- Explain the conceptual underpinnings of modern computing system design; apply relevant principles and techniques in conceptual problem solving.
- Key challenges and basic principles in the design of large-scale computing systems
- Process management and multithreaded programming
- Process scheduling, synchronization, deadlock
- Memory management, file system, and I/O system
- End-to-end network performance (e.g., loss, throughput, and delay) and impact on network applications
- Network security: applied cryptography; key certification; confidentiality, integrity, authentication, and availability; types of network attacks; design of secure network protocols
- Network naming and addressing; DNS as a scalable and distributed infrastructure for name resolution in the Internet
- Client-server network programming; HTTP and the World Wide Web