시스템 소프트웨어 분야 PBL 자료

2026/10/27 (Updated: 2026/10/27). The latest version of this page is available at https://yoon.ws/note/sys-sw-pbl/.

본 글에서는 PBL 과제를 만들 때 참고할 만한 국내외 여러 자료를 소개한다.

경고: 대부분의 PBL 과제에서는 규정상 학습자가 해결한 답안을 공개적으로 업로드하는 것을 금지하고 있습니다. 공개적으로 답안을 업로드하는 것은 라이선스를 위반하는 저작권 침해 행위이며, 다른 학생들의 학습에 피해를 주는 행위입니다. 부디 답안을 공개적으로 업로드하지 마십시오.

운영체제

Pintos

https://github.com/casys-kaist/pintos-kaist

Pintos는 Stanford University에서 개발한 과제로 아마 가장 잘 알려진 운영체제 과제일 것이다. 기본적으로 교과서에서 배운 전통적인 운영체제 디자인을 따른다고 알고 있으며, 기억이 맞다면 synchronization 부분(thread 등)이 강조되었던 것으로 기억한다. KAIST 버전은 기존 32비트 버전의 Pintos를 최신 환경에 맞게 64비트 버전으로 개편한 것이다.

JOS

https://github.com/casys-kaist/jos

JOS는 MIT에서 개발한 과제로 Pintos보다는 현실적인 시스템 이슈들에 집중한 것 같다. 예를 들면, Lab1에서 학습하는 bootloader 부분은 전통적인 OS 수업에서는 많이 다루지는 않지만, 현대 시스템을 완전히 이해하는 데 필요한 내용이다. 그 밖에도 page fault handling, preemption과 같은 하드웨어 primitive와 긴밀히 상호작용을 하는 운영체제 부분을 더 강조한 것으로 기억한다.

내가 석사 과정에서 들은 코스웍에서는 JOS를 이용한 가상머신을 만드는 PBL을 진행했었다. 가상화 하드웨어 primitive에 직접 접근하여 하이퍼바이저를 제작하는 학습이었는데, 비교적 최신의 하드웨어 primitive를 직접 실습해 볼 수 있다는 점이 정말 매력적이었다.

KeOS

https://github.com/casys-kaist/KeOS

KeOS는 KAIST에서 비교적 최근에 개발한 교육용 운영체제이다. 특이한 점으로는 C 혹은 C++ 대신 Rust 프로그래밍 언어를 사용하기에, 운영체제의 개념뿐만 아니라 Rust를 이용한 프로그래밍 또한 동시에 학습할 수 있다. Rust 프로그래밍 언어가 실제 현실에서 얼마나 많이 쓰이는지는 차치하고(점점 많이 쓰이기는 하는 것 같다), Rust 언어를 이용해 개발하다 보면 C/C++에서는 놓치고 지나칠 수 있는 동시성 제어 및 메모리 안전 패턴을 학습할 수 있었던 점이 좋았던 것 같다.

네트워크

KENS

https://github.com/ANLAB-KAIST/KENSv3

KENS는 네트워크 스택을 직접 구현해 볼 수 있는 과제이다. 어떤 네트워크 과목을 수강하게 되면, 실습이 기존에 이미 구현된 네트워크 기능들을 사용할 때 쓰는 소켓 API(bind/accept/connect 등)의 사용법을 배우는 것에 그치는 경우도 있다. 이 과제에서는 여기서 한 걸음 더 나아가 위의 기능들을 직접 구현하며, 현대의 네트워크 시스템이 어떻게 구현되어 있는지는 학습할 수 있다. 특히, 이 과제는 네트워크 시스템의 기능들(connection setup, flow control, retransmission 등)을 직접 구현해 볼 뿐만 아니라, 이들이 운영체제의 다른 부분(시스템 콜, 디바이스, 타이머)과 어떻게 상호작용을 하는지를 학습할 수 있다.

MIT 6.5840 Raft 과제

http://nil.csail.mit.edu/6.5840/2025/labs/lab-raft1.html

이 과목은 4학년 과목으로 네트워크 수업을 들은 학생들이 현대의 분산 시스템에 필수적인 몇몇 알고리즘과 시스템을 직접 구현해 볼 수 있게끔 한다. 특히, 이 중 분산 컨센서스 알고리즘인 Raft를 직접 구현하는 과제가 가장 흥미로웠다. 이 과제에서는 학생들이 직접 구현한 알고리즘을 테스팅하는 코드가 포함되어 있는데, 정말 여러 코너 케이스를 커버하기 때문에 학생들이 많은 시행착오를 할 수 있었다. 그 때문인지 이 과제는 좋아하는 학생은 정말 좋아하고 싫어하는 학생은 정말 싫어했던 기억이 난다.

기타 과목

이 밖에도 이번 데이터베이스 수업을 준비하며 발견한 CMU의 BusTub라는 교육용 RDBMS도 흥미롭게 보았다. RDBMS의 Buffer Pool Manager, Index 등의 내부 구현을 직접 해보는 과제로 보이는데, 학습하는 내용이 시스템 소프트웨어에 치우쳐 있어 강의계획서와 일치하지 않는 부분이 많아 아쉽게도 이번 수업에는 활용하지 못했다. 다음 수업에는 강의 계획부터 이런 과제를 활용할 수 있도록 설계를 해볼지 생각 중이다.

학습 가이드라인