컴퓨터 시스템: 프로그래머의 관점 (글로벌 에디션)
컴퓨터 시스템이 프로그램을 실행하고 정보를 저장하는 방식에 대한 종합적인 심층 분석입니다. 이 과정은 고수준 프로그래밍과 하드웨어 기반의 구조 사이의 간격을 메우며, 머신 레벨 표현, 프로세서 아키텍처, 메모리 계층 구조 및 동시 프로그래밍을 다룹니다.
강좌 개요
📚 콘텐츠 요약
컴퓨터 시스템이 프로그램을 실행하고 정보를 저장하는 방식에 대한 종합적인 심층 분석. 이 과정은 고수준 프로그래밍과 기반 하드웨어 사이의 간극을 메우며, 머신 레벨 표현, 프로세서 아키텍처, 메모리 계층 구조, 동시 프로그래밍을 다룹니다.
하드웨어-소프트웨어 인터페이스를 이해함으로써 시스템 프로그래밍의 예술을 마스터하세요.
저자: Randal E. Bryant, David R. O'Hallaron
감사의 말: 카네기 멜론 대학교 15-213 강의의 수강생 및 강사들에 의해 지원됨. Manasa S.와 Mohit Tahiliani의 기여도 포함.
🎯 학습 목표
- 시스템 내에서 비트와 맥락을 사용하여 정보가 어떻게 표현되는지 식별하기.
- 소스 코드에서 실행 파일까지의 컴파일 시스템의 네 단계를 추적하기.
- 하드웨어의 조직 구조와 저장 장치의 계층적 특성을 설명하기.
- 십진수, 이진수, 16진수 표기법 간 변환하고 머신 레벨 주소 지정(엔디언)을 설명하기.
- C에서 비트 수준 및 논리 연산을 수행하고 산술 시프트의 결과를 예측하기.
- 정수 인코딩을 분석하여 오버플로우 취약점과 형변환 오류를 식별하기.
- 분석: C 문구(루프, 분기, 절차)와 x86-64 어셈블리 명령어 간의 매핑 관계를 이해하기.
- 해체: 런타임 스택을 분석하여 매개변수 전달, 로컬 변수 저장, 재귀 호출 관리 방식을 설명하기.
- 평가: 다양한 데이터 구조의 메모리 레이아웃을 분석하고 정렬 규칙을 적용하여 전체 저장 요구량 계산하기.
- Y86-64 프로그래머가 볼 수 있는 상태를 정의하고 명령어를 바이트 시퀀스로 인코드/디코드하기.
수업 共 12 课时 · 预计 36.0h
수업
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.