This repository encompasses materials for the expansive topic of Computer System Fundamentals, as covered by three courses at Shanghai Jiao Tong University (SJTU): Assembly Language (SE2307), Computer Organization (SE2316), and Computer Systems (SE2317). The content mirrors the structure and depth of similar course offered at (CMU)
The course follows the textbook "Computer Systems: A Programmer’s Perspective," which offers fundamental insights into the architecture and operation of computer systems.
- Chapter 1: A Tour of Computer Systems
- Part I: Program Structure and Execution
- Chapter 2: Representing and Manipulating Information
- Chapter 3: Machine-Level Representation of Program
- Chapter 4: Processor Architecture
- Chapter 5: Optimizing Program Performance
- Chapter 6: The Memory Hierarchy
- Part II: Running Programs on a System
- Chapter 7: Linking
- Chapter 8: Exceptional Control Flow
- Chapter 9: Virtual Memory
- Part III: Interaction and Communication between Programs
- Chapter 10: System-Level I/O
- Chapter 11: Network Programming
- Chapter 12: Concurrent Programming
Each chapter's concepts are reinforced through practical homework assignments found in the homeworks
folder of this repository. These assignments are complemented by my handwritten solutions and notes, further enhancing the learning experience.
- Book: "Computer Systems: A Programmer’s Perspective". This book, included in the repository, is supplemented with my personal notes to enhance understanding.
- SJTU Course Schedule: SJTU ICS Course
- Video Playlist: A series of instructional videos complementing the course material (ICS-CMU)
A foundational lab focusing on bit-level manipulations and understanding binary representations.
This lab challenges students to defuse a "binary bomb" by reverse-engineering binary files.
A hands-on lab for students to learn about buffer overflow vulnerabilities and how to exploit them.
Involves building a simulator for the Y86-64 instruction set, providing deep insights into its functionality.
This lab delves into the Y86-64 architecture, requiring students to write an assembler for the Y86-64 instruction set.
Focuses on the design and optimization of a pipelined Y86-64 processor, including benchmark program performance optimization.
Students create a simple Unix shell to understand process control and signaling.
A lab designed to demonstrate the significant impact cache memories have on C program performance.
In this lab, students develop a concurrent web proxy to log requests.
Students write their own version of malloc, free, and realloc routines in C, gaining deep understanding of dynamic storage allocation.
Note: In each lab, I have focused on implementing the core parts of the codebase, primarily marked as 'TODO'.
A special thanks to the faculty and teaching assistants at SJTU for their guidance and support throughout these courses. Their dedication has been instrumental in providing a comprehensive and practical understanding of computer systems.