Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/ghazariann/SJTU-computer-system-fundamentals


https://github.com/ghazariann/SJTU-computer-system-fundamentals

Last synced: about 1 month ago
JSON representation

Lists

README

        

# 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](http://www.cs.cmu.edu/afs/cs/academic/class/15213-f17/www/schedule.html))

## 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](https://ipads.se.sjtu.edu.cn/courses/ics/2021/schedule.shtml)
- **Video Playlist**: A series of instructional videos complementing the course material ([ICS-CMU](https://www.youtube.com/watch?v=4CpHpFu_KYM&list=PLbY-cFJNzq7z_tQGq-rxtq_n2QQDf5vnM&index=1&ab_channel=%E5%BE%90%E6%B1%9))

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