Pintos 운영체제 구현
- 기간: 2025.07. - 2025.08. |
- 크래프톤 정글 9기
교육용 운영체제 Pintos의 쓰레드, 시스템 콜, 가상 메모리 관련 기능을 구현
프로젝트 개요
Stanford 대학의 교육용 운영체제 Pintos를 기반으로 쓰레드 관리, 시스템 콜, 가상 메모리 시스템을 직접 구현하는 프로젝트입니다. 디버깅 과정에서 운영체제가 작동하는 전체 그림을 깊이 이해할 수 있었습니다. C언어를 사용하면서 강타입 언어에 익숙해지는 계기도 되었습니다.
문제 해결
1. Fork 예외 처리


문제: Fork 시스템 콜 발생 시, 부모 프로세스는 자식 프로세스 생성을 요청한 후 세마포어로 대기합니다. 자식이 부모의 자원을 복제하는 중에 실패해 종료되더라도, 부모는 자식의 성공 여부를 알 수 없어 이미 종료된 프로세스의 ID를 반환하는 문제가 발생했습니다.
해결: 부모-자식 프로세스 간 공유 구조체에 성공 플래그를 두어 상태를 전달했습니다. 자식이 모든 복제 작업을 완료했을 때만 성공으로 표시하고, 부모는 세마포어에서 깨어난 후 이 플래그를 확인해 실패를 감지합니다.
추가 설명 - Fork 예외 처리
2. 페이지 폴트 시 스택 확장


문제: 가상 메모리 시스템에서 스택 영역에 접근할 때 페이지가 할당되지 않았으면 페이지 폴트가 발생합니다. 이때 큰 배열을 스택에 할당하면 스택 포인터가 여러 페이지를 한 번에 건너뛸 수 있는데, 테스트에서 65536바이트(16페이지)를 한 번에 요구하는 경우가 있었습니다. 기존엔 push 명령어의 존재 때문에 8바이트 단위로만 푸시가 이루어지므로 페이지 1개만 할당하면 된다고 생각했으나, 오개념이였습니다.
해결: 페이지 폴트 핸들러에서 폴트가 발생한 주소부터 시작해, 이미 할당된 스택 영역에 도달할 때까지 페이지를 반복적으로 할당하는 방식으로 구현했습니다.
추가 설명 - 스택 확장