Skip to content

ghazariann/SJTU-computer-system-fundamentals

Repository files navigation

SJTU Computer System Fundamentals

Course Overview

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)

Textbook Overview

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.

Key Resources

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

Labs Overview

1. Manipulating Bits

A foundational lab focusing on bit-level manipulations and understanding binary representations.

2. Defusing a Binary Bomb

This lab challenges students to defuse a "binary bomb" by reverse-engineering binary files.

3. The Attack Lab: Understanding Buffer Overflow Bugs

A hands-on lab for students to learn about buffer overflow vulnerabilities and how to exploit them.

4. Y86-64 Simulator

Involves building a simulator for the Y86-64 instruction set, providing deep insights into its functionality.

5. Y86-64 Assembler

This lab delves into the Y86-64 architecture, requiring students to write an assembler for the Y86-64 instruction set.

6. Architecture Lab: Optimizing the Performance of a Pipelined Processor

Focuses on the design and optimization of a pipelined Y86-64 processor, including benchmark program performance optimization.

7. Tiny Shell

Students create a simple Unix shell to understand process control and signaling.

8. Cache Lab: Understanding Cache Memories

A lab designed to demonstrate the significant impact cache memories have on C program performance.

9. Web Proxy

In this lab, students develop a concurrent web proxy to log requests.

10. Malloc Lab: Writing a Dynamic Storage Allocator

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

Acknowledgements

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published