프로젝트 목록
Case Study2025.11 - 2025.12

Pintos Kernel

커널 프로그래밍 및 운영체제 실습

8-depth Priority Donation, Widowed Frame 디버깅, Demand Paging 기반 메모리 관리

Project

Pintos Kernel

Role

System Engineer

Period

2025.11 - 2025.12

Team

KAIST Jungle 4인 팀

Overview

하드웨어 위에서 직접 동작하는 교육용 운영체제의 핵심 모듈을 구현했습니다. 우선순위 역전 해결, 무한 Page Fault 디버깅, 가상 메모리 관리 등 저수준 시스템 문제를 해결하며 CS 기초 역량을 확보했습니다.

핵심 성과

전체 테스트 All Pass

Threads 25개 + User Programs 76개 + Virtual Memory 40개 테스트 전체 통과

저수준 디버깅 경험

소프트웨어-하드웨어 상태 불일치(Widowed Frame) 문제를 GDB로 추적하여 해결

Technical Challenges

3 Cases
01

우선순위 역전(Inversion) 현상의 근본적 해결

Priority Donation: 8-depth 중첩 락 체인 해결

Impact

donate-nest/chain 테스트 통과

Challenge

높은 우선순위(H) 스레드가 낮은 우선순위(L) 스레드가 점유한 락을 기다릴 때, 중간 우선순위(M) 스레드가 L을 선점해버리면 H가 무한정 대기하는 우선순위 역전이 발생했습니다.

Solution

Priority Donation 메커니즘을 설계하고 구현했습니다. 락 대기 시 보유자에게 우선순위를 기부하고, 중첩된 락 대기 상황까지 재귀적으로 전파합니다.

Donation: 락 대기 시 보유자에게 자신의 높은 우선순위를 일시적으로 기부

Chain Handling: Nested Donation까지 재귀적으로 전파 (depth limit: 8)

Revert: 락 해제 시 기부받은 우선순위 반납 및 본래 우선순위로 복귀

02

소프트웨어-하드웨어 상태 불일치 문제 추적

Widowed Frame 디버깅: 무한 Page Fault 해결

Impact

mmap-* 테스트 전체 통과

Challenge

mmap된 메모리 접근 시 Page Fault가 무한 반복되며 프로세스가 exit(-1)로 강제 종료되었습니다. page->frame은 존재하지만 실제 PML4 매핑은 없는 '고아 프레임' 상태였습니다.

Solution

vm_do_claim_page에서 프레임 존재 여부만 확인하던 로직에 PML4 매핑 검증을 추가했습니다. 고아 상태 감지 시 pml4_set_page로 매핑을 복구합니다.

Before: page->frame != NULL이면 true 반환 → PML4 매핑 누락 시 무한 루프

After: pml4_get_page로 하드웨어 매핑 검증 → 누락 시 pml4_set_page로 복구

GDB로 Page Fault Handler 진입점 추적하여 원인 특정

03

Page Fault 기반 지연 로딩 전략

Demand Paging: 가상 공간 확장 및 지연 로딩

Impact

한정된 물리 메모리 극복 및 가상 공간 활용

Challenge

프로세스 실행 시 모든 세그먼트를 메모리에 올리면 물리 메모리가 금방 부족해지는 문제가 있었습니다.

Solution

Page Fault가 발생했을 때만 해당 페이지를 로드하는 Demand Paging을 구현했습니다.

Supplemental Page Table (SPT): 페이지 메타데이터(디스크 위치, 쓰기 가능 여부) 관리

Page Fault Handler: 디스크에서 데이터를 읽어 물리 프레임에 매핑 후 재시작

Stack Growth: rsp 레지스터 감시하여 스택 영역 접근 시 자동 페이지 할당

Key Results

4개 모듈

OS 핵심 기능 구현

Threads, User Programs, Virtual Memory, File System

GDB 디버깅

Widowed Frame 해결

SW-HW 상태 불일치로 인한 무한 Page Fault를 GDB로 추적하여 수정

Tech Stack

C (C99)x86 AssemblyLinux (Ubuntu)QEMU EmulatorGDB (Kernel Debugging)MakefileVirtual MemoryPagingMulti-threadingSynchronization

Next Project

Aidiary

AI 기반 육아 기록 플랫폼