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