Hệ thống Máy tính: Góc nhìn của một Lập trình viên (Phiên bản Toàn cầu)
Một cuộc khảo sát toàn diện về cách các hệ thống máy tính thực thi chương trình và lưu trữ thông tin. Khóa học này nối liền khoảng cách giữa lập trình cấp cao và phần cứng nền tảng, bao gồm biểu diễn mức máy, kiến trúc bộ xử lý, cấu trúc bộ nhớ và lập trình đồng thời.
Tổng quan khóa học
📚 Tóm tắt Nội dung
Một cuộc khảo sát toàn diện về cách các hệ thống máy tính thực thi chương trình và lưu trữ thông tin. Khóa học này nối liền khoảng cách giữa lập trình cấp cao và phần cứng nền tảng, bao gồm biểu diễn ở mức máy, kiến trúc bộ xử lý, phân cấp bộ nhớ và lập trình đồng thời.
Thành thạo nghệ thuật lập trình hệ thống bằng cách hiểu rõ giao diện giữa phần cứng và phần mềm.
Tác giả: Randal E. Bryant, David R. O'Hallaron
Lời cảm ơn: Được hỗ trợ bởi sinh viên và giảng viên khóa học 15-213 tại Đại học Carnegie Mellon. Lời cảm ơn bao gồm những đóng góp từ Manasa S. và Mohit Tahiliani.
🎯 Mục tiêu Học tập
- Xác định cách thông tin được biểu diễn bằng bit và ngữ cảnh trong hệ thống.
- Theo dõi bốn giai đoạn của hệ thống biên dịch từ mã nguồn đến tập lệnh thực thi.
- Mô tả cấu trúc tổ chức của phần cứng và tính chất phân cấp của các thiết bị lưu trữ.
- Chuyển đổi giữa các ký hiệu thập phân, nhị phân và hexa, và giải thích địa chỉ ở mức máy (Endianness).
- Thực hiện các thao tác bit và logic trong C, dự đoán kết quả của các phép dịch số học.
- Phân tích mã hóa số nguyên để nhận diện các lỗ hổng tràn và lỗi chuyển kiểu tiềm ẩn.
- Phân tích sự ánh xạ giữa các cấu trúc C (vòng lặp, nhánh, thủ tục) và các lệnh Assembly x86-64.
- Phân tích sâu ngăn xếp thời gian chạy để giải thích cách truyền tham số, lưu biến cục bộ và quản lý lời gọi đệ quy.
- Đánh giá bố cục bộ nhớ cho các cấu trúc dữ liệu đa dạng và áp dụng quy tắc căn chỉnh để tính toán tổng yêu cầu lưu trữ.
- Định nghĩa Trạng thái người dùng nhìn thấy được của Y86-64 và mã hóa/giải mã lệnh thành chuỗi byte.
Bài học 共 12 课时 · 预计 36.0h
Bài học
Lesson
This lesson introduces the fundamental concepts of computer systems, focusing on how programs are represented as sequences of bytes and interpreted through context. Students will learn how source code is stored using the ASCII standard and gain an overview of the compilation process, hardware components, and the role of the operating system.
This lesson explores how computers represent and manipulate data, focusing on hexadecimal notation, bitwise operations, and the structure of virtual address spaces. Students will learn to perform conversions between number systems, analyze integer and floating-point bit patterns, and understand the implications of memory byte ordering and precision limitations.
This lesson explores the x86-64 Instruction Set Architecture (ISA) as a contract between hardware and software, focusing on the architectural state, registers, and memory abstraction. Students will learn to distinguish between high-level code and machine-level representations while mastering data movement, arithmetic operations, and procedure call conventions.
This lesson explores the Y86-64 instruction set architecture as an educational model for understanding the contract between software and hardware, including its programmer-visible state and load/store design. Students will learn to analyze CPU performance through the fetch-decode-execute cycle, differentiate between RISC and CISC characteristics, and evaluate the impact of pipelining on system throughput.
This lesson explores advanced techniques for optimizing program performance by addressing constant factors, memory aliasing, and instruction-level parallelism. Students will learn to analyze hardware constraints, such as pipeline latency and throughput, to improve code efficiency beyond what compilers can achieve automatically.
This lesson explores the memory hierarchy by contrasting the speed and density of SRAM and DRAM, while explaining how DRAM organization and row-buffer management impact system performance. Students will learn to analyze memory access patterns, such as stride-based array traversal, and understand how hardware design choices like RAS/CAS multiplexing influence effective data access times.
This lesson explores the compiler driver's role in the software build process, focusing on how the linker manages memory layout and separate compilation. Students will learn to optimize program performance by understanding how data alignment and memory access patterns, such as Stride-1, influence cache hit rates and overall system throughput.
This lesson explores Exceptional Control Flow (ECF), which allows computer systems to handle abrupt transitions between instructions triggered by hardware and software events. Students will learn to distinguish between different types of exceptions, manage process lifecycles through system calls like fork and waitpid, and implement robust signal handling.
This lesson explores the fundamentals of virtual memory, focusing on how the Memory Management Unit (MMU) translates virtual addresses to physical addresses to provide process isolation and efficient memory abstraction. Students will learn about hardware-assisted mechanisms like page tables and TLBs, as well as the principles of demand paging, page replacement, and heap management strategies.
This lesson explores the Unix "everything is a file" abstraction, covering core system-level I/O primitives like open, close, read, and write. Students will learn to manage file descriptors, handle short counts using the Robust I/O (RIO) package, and implement I/O redirection and file sharing within the kernel.
This lesson explores the client-server programming model, focusing on the Berkeley Sockets API and the fundamental four-step request-response transaction. Students will learn to implement robust network architectures by differentiating between TCP and UDP communication while understanding the role of hardware components and protocol abstraction in distributed systems.
This lesson explores the taxonomy of concurrency, comparing processes, I/O multiplexing, and threads to understand how they manage logical control flows and system performance. Students will learn to identify the differences between concurrency and parallelism while mastering synchronization techniques like mutexes and semaphores to prevent race conditions in shared-resource systems.