Foundations of Computer Systems

This course builds deep knowledge of computer systems, spanning processor architectures, peripheral devices, and communication interfaces. Students explore multicore, superscalar, SIMD, MIMD, and FPGA-based architectures through contemporary case studies including ARM Cortex, Intel Core, and Apple M1/M2 processors. Essential peripherals (HDD, SSD, NVMe, GPU) and modern interfaces including PCI Express, USB standards, Thunderbolt, and M.2 are examined in detail. The course places particular emphasis on hardware-software co-design, covering instruction set architectures (RISC-V, ARM), pipelining, memory hierarchies, caches, and virtual memory management. Students also develop system-level programming skills in assembly language, interrupt handling, device driver basics, and system debugging tools including GDB, Valgrind, perf, and strace.

Course Overview

Foundations of Computer Systems provides a comprehensive understanding of modern computer systems by integrating hardware and software principles. The course explores processor architectures, hardware-software co-design, computer peripherals, communication interfaces, and system-level programming. Through case studies, practical demonstrations, and industry-relevant examples, students develop the knowledge and skills required to analyse, design, and debug modern computing systems.

Learning Objectives

By the end of this course, students will be able to:

  • Analyse modern processor architectures and evaluate performance trade-offs across different computing platforms.
  • Compare peripheral devices and communication interfaces to identify suitable solutions based on performance, power, and cost requirements.
  • Design pipelined RISC-V and ARM-based systems while optimising memory hierarchies and operating system resource management.
  • Implement system-level software, including interrupt-driven I/O routines, device drivers, and debugging workflows.
  • Develop hardware-software co-designed systems and evaluate design choices using appropriate performance metrics.

Learning Outcomes

Upon successful completion of this course, students will be able to:

  • Evaluate the performance, power efficiency, and applications of superscalar, VLIW, SIMD, and multicore processor architectures.
  • Design memory hierarchies, resolve pipeline hazards, and integrate operating system resource management in RISC-V and ARM-based systems.
  • Configure and troubleshoot storage systems, GPU architectures, and high-speed communication interfaces using interrupt-driven I/O and DMA.
  • Develop assembly programs, interrupt service routines, and basic Linux device drivers using system debugging tools.
  • Prototype FPGA-based systems and debug hardware-software interactions using simulators, logic analysers, and kernel profiling tools.
  • Computer Organization and Architecture – William Stallings.
  • Computer Organization and Design: The Hardware/Software Interface – David A. Patterson and John L. Hennessy.
  • Computer Systems: A Programmer's Perspective – Randal E. Bryant and David R. O'Hallaron.
  • Digital Design – M. Morris Mano and Michael D. Ciletti.

Additional Reading

Info not available

Grading

  • Exams: 40%
    • Mid Semester Exam (15%)
    • End Semester Exam (25%)
  • Project: 20%
  • Quizzes: 30%
    • Quiz 1: End of February (10%)
    • Quiz 2: Third week of March (10%)
    • Quiz 3: Second week of April (10%)
  • Participation: 10%