1988년 시작된 코스 - 프로그래머 관점으로 새로 만듦

책 사라. 신버전으로. 사과는 하지 않겠다. 너네 부모님이 학비 주신 거잖아.

CS 213은 모든 CS 과목의 기초가 되는 코스임

대부분의 시스템 과목은 구현에 초점을 두고 가르친다.

코스 웹페이지: http://www.cs.cmu.edu/~213

Cheating

코드 공유나 남의 코드를 보는 것은 부정행위로 간주됨

솔루션 검색하지 말 것 - 검색 자체를 부정행위로 간주

랩 소스코드는 업로드하지 않는 게 좋겠다.

Realities

추상화는 중요하지만 현실을 잊지는 마라

Reality 1

Int는 정수가 아니고, Float는 실수가 아니다.

e.g 1) ?

Float의 경우 참

Int의 경우 거짓

오버플로, 언더플로가 발생할 수 있다.

e.g 2) ?

Unsigned, Signed Int의 경우 참

Float의 경우 거짓

???

Reality 2

어셈블리를 알아야 한다.

어셈블리로 프로그램을 만들 일은 없다. 컴파일러가 훨씬 잘 한다.

이 강의가 이전 강의와 다른 점은 32비트 어셈블리를 사용한다는 것 (?)

Reality 3

메모리는 중요하다.

C 컴파일러는 바운드 체크를 하지 않으므로 메모리 레퍼런싱 에러가 많이 발생한다.

메모리 레퍼런싱 에러는 발견하기 어렵다. 오염된 부분이 한참 뒤에 액세스될 수도 있고..

Reality 4

인스트럭션 개수가 성능을 말해주지는 못한다.

책 표지가 이거 관련된 거였네.. 한국판 표지는 왜 바꾼 걸까

Reality 5

컴퓨터는 프로그램 실행보다 더 많은 일을 한다.

Data IO, 네트워킹 등

Course Components

  • Lectures
  • Recitations
  • Labs
    • 가장 중요한 요소
    • 이걸 안 하면 아무것도 배울 수 있는 것이 없다.
  • Exams

Programs and Data

  • 비트 연산, 산술 연산(arithmetic), 어셈블리
  • C 제어 및 데이터 구조의 표현
  • 아키텍쳐와 컴파일러
  • 과제
    • L1: Data Lab
    • L2: Bomb Lab
    • L3: Attack Lab - Return Oriented Programming

Memory Hierachy

  • 과제
    • L4: Cache Lab

Exceptional Control Flow

  • 하드웨어에서 소프트웨어로 (부드럽게) 이동
  • 인터럽트, 문맥 전환, 시그널, 점프 등
  • 과제
    • L5: tshlab - 리눅스 셸 작성

Virtual Memory

  • Memory as very long array of bytes
  • 성능에 미치는 영향
  • 과제
    • L6: malloclab - malloc, free 함수 작성

Networking and Concurrency

  • 고수준과 저수준의 IO, 네트워크 프로그래밍
  • 과제
    • L7: proxylab