50.005 Computer System Engineering

Home / Education / Undergraduate / Courses / 50.005 Computer System Engineering

Course Description

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.


Learning Objectives

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.

Measurable Outcomes

  • 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.

Topics Covered

  • 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