Prerequisite (if any): Introduction to Programming or Systems Programming, Foundations of Computing Systems Lab (prerequisite/corequisite)

Course Content

Boolean logic and its implementation - binary digits (bits), transistors and switching circuits, basic gates and boolean operations using gates, composability of gates and building blocks of digital circuits such as multi-bit gates, and multiplexers/demultiplexers. (3 lectures)

Combinational circuits - Binary number system, signed numbers (two’s complement), adder and multiplier circuits (3 lectures)

Sequential circuits - latches and flip-flops, registers, SRAM and DRAM cells and their characteristics, memory hierarchy (3 lectures)

Instruction Set Architecture - program counter, register set, basic operations - arithmetic, branch, and I/O operations, instruction encodings (machine instructions) (3 lectures)

CPU design - instruction and data memory, operations within a CPU such as fetch, decode, execute, and writeback (6 lectures)

Assembler - Instruction mnemonics, instruction sequences, symbols, working of an assembler - symbol table and two-pass assembler (6 lectures)

Stack machines - PUSH and POP instructions, procedures and subroutines, execution stack and argument passing (6 lectures)

Compilation - Lexing and parsing, Abstract syntax tree, syntax-directed translation, illustration of these concepts through an expression to postfix conversion (6 lectures)

Operating systems - Program loading and execution, program isolation (processes, virtual memory and threads) (6 lectures)

Learning Outcomes

  1. Understand the abstractions and interfaces that are the building blocks of modern computer systems

  2. Appreciate the interactions and challenges related to the fundamental building blocks of a computer system (Computer Architecture and Organization, Operating Systems, and Compilers)

Text Books

  1. Noam Nisan, and Shimon Schocken, The Elements of Computing Systems: Building a Modern Computer from First Principles, The MIT Press. ISBN-10: 0262640686 ISBN-13: 978-0262640688


  1. Harold Abelson, Gerald Jay Sussman, and Julie Sussman, Structure and Interpretation of Computer Programs, Published by The MIT Press, ISBN-10: 8173715270, ISBN-13: 978-8173715273

  2. Randal E. Bryant, and David R. O'Hallaron, Computer Systems: A Programmer's Perspective, Published by Pearson Education India, ISBN-10: 9332573905, ISBN-13: 978-9332573901

  3. Maurice Bach, Design of the UNIX Operating System, Published by Prentice Hall, ISBN-10: 0132017997, ISBN-13: 978-0132017992