Pintos 4주 여정을 시작하며 목표와 공부방식 생각해보기
2026. 10. 8. 15:45ㆍ크래프톤 정글/포스팅
왜 하는가?
Pintos의 목적은 테스트를 통과하는 게 아니라, "한정된 CPU와 메모리를 여러 프로그램이 어떻게 나눠 쓰는가"라는 질문에 직접 구현으로 답해 보는 것이다. 구현 자체보다 중요한 건, 자원이 제한된 상황에서 어떤 문제가 생기고, 어떤 해결책이 있고, 각각 무엇을 얻고 포기하는지 판단해 보는 경험이다. 이 경험과 지식은 개발 중 동시성 버그, 메모리, 성능 문제를 만났을 때 원인을 추론하는 힘이 된다.
따라서 4주 뒤 "스레드를 구현했다, 시스템 콜을 구현했다, 가상 메모리를 구현했다"가 아니라, "CPU와 메모리를 여러 프로그램이 쓸 수 있는 기계로 만들기 위해 어떤 문제를 만났고, 어떤 판단을 했는지"를 내 말로 설명할 수 있는 상태가 목표다.
마음가짐
- 테스트 하나에 시야가 좁아질 때마다 큰 지도로 돌아온다.
- 막히면 남의 풀이가 아니라 막힌 지점을 질문으로 정리해서 해결한다.
- 하루의 시작과 끝에 15분씩, 오늘의 문제와 배운 점을 "한정된 자원 → 문제 → 해결책들 → 결과 (얻은 것과 포기한 것)" 을 적는다.
운영체제 큰 그림

주차별 큰 그림
| 주차 | 프로젝트 | 주요 질문 | 공부할 개념 |
| 1주 | Project 1: Threads | CPU 하나로 여러 실행 흐름을 어떻게 번갈아 돌리나? |
스레드 상태 전이, 스케줄링, 우선순위, 동기화(락, 세마포어) |
| 2주 | Project 2: User Programs | 남의 프로그램을 어떻게 안전하게 실행하나? | 프로세스, 유저/커널 경계, 시스템 콜, 포인터 검증 |
| 3~4주 | Project 3: Virtual Memory | 작은 물리 메모리를 여러 프로그램이 크게 쓰는 것처럼 하려면? |
가상 주소, 페이징, 페이지 폴트, 스택 확장, 메모리 맵 파일, 스왑과 페이지 교체 |
| (안 함) | Project 4: File System | 영구 데이터는 어떻게 관리하나? | - |
공부 방식
- 시작 전 반나절~하루: 책의 운영체제 큰 그림 챕터와 각 파트 도입부를 훑어 지도를 그린다.
- 매주차 시작 전: 그 주에 필요한 개념을 읽고, 사이트의 부록(스레드, 동기화, 가상 주소, 페이지 테이블 등)은 구현하면서 참고서처럼 같이 본다.
- 구현 전에 코드를 먼저 읽고, GDB를 일찍 익히고, 한 번에 하나만 바꾼다.
- 프로젝트가 끝날 때마다 하루 기록을 모아 한 페이지 회고로 정리한다.