포스트

[크래프톤 정글 8~12주차] Pintos

주간 요약

PintOS
Project 1: Threads
Project 2: User Programs
Project 3: Virtual Memory


학습한 키워드

프로젝트 1

  • Process, Thread
  • Context Switching
  • Deadlock
  • 경쟁 상태 Race Condition
  • CPU Scheduling 알고리즘
    1. FCFS (First Come First Served)
    2. SJF (Shortest Job First)
    3. SRTF (Shortest Remaining Time First)
    4. Round Robin
    5. Multilevel Queue Scheduling
  • Multi-Level Feedback Queue Scheduler (MLFQS)
    1. 4BSD
    2. nice

프로젝트 2

  • User mode vs Kernel mode
  • User Stack
  • System Call
  • Interrupt
  • Register vs Memory
  • rax register
  • Cache
  • File Descriptor
  • Atomic Operation
  • 32 bit OS vs 64 bit OS
  • Segmentation Fault

프로젝트 3

  • Virtual Memory
  • Page Table
  • Translation Lookaside Buffer (TLB)
  • Page Fault
  • Lazy Loading
  • Page Replacement Policy
  • Anonymous page
  • Swap Disk
  • File-backed Page
  • Direct Memory Access


푼 백준 문제

  1. 대표 선수
  2. 부분합
  3. 고냥이
  4. 공유기 설치
  5. 플로이드
  6. AC
  7. 이중 우선순위 큐
  8. 다각형의 면적
  9. 로봇 청소기
  10. 동전 1
  11. 연구소
  12. 공항
  13. 말이 되고픈 원숭이


Keep

OS를 처음으로 공부하게 되었고, 많은 개념을 공부할 수 있었다.

프로젝트 1/2의 모든 테스트 케이스를 통과하였다.

C언어에서 가장 어려운 부분 중 하나인 포인터를 한 달 동안 사용하였더니 이중 포인터, 포인터 배열 등을 자주 사용할 수 있었다.

백준 골드 1이 됐다!


Problem

WIL을 작성하지 못하였다.

약 한달 중에 절반은 백준 인조 잔디(골드 이하)를 심었다.

프로젝트 3에서 Swap Memory를 하지 못하였다.

프로젝트를 진행하면서 마주친 문제들에 대해 정리가 부족했다.


Try

스택 공부 / 나만무 때는 WIL을 꼭 적자

항상 WIL 노션을 켜두고 생각날 때마다 적는 버릇을 들이자

골드 이상의 문제로 1일 1백준 잔디 심기를 하자

정글이 끝나면 핀토스를 다시 한번 정리해보자

OS 관련 지식을 더 깊게 공부하자

스택 공부 / 나만무 때 마주치는 문제들에 대해 트러블 슈팅을 기록하자. 어떠한 문제가 있었고, 내가 어떤 방식으로 접근했고, 어떻게 해결했는지에 대한 논리적인 설명이 필요하다.


회고

JeongJongMun/pintos: PintOS from Kaist (github.com)

정말 힘들었던 핀토스 주차이다.

구현에 치이고 공부하느라 바빠서 WIL은 쓰지도 못했고 핀토스가 끝나고 MIL로 몰아서 쓰고 있다.


나는 학교에서 OS를 수강하지 않아서 여기서 OS를 처음 공부하게 되었는데, CS의 꽃은 OS라는 말이 맞는 듯하다.

네트워크나 데이터 베이스 등 다른 분야보다 더 깊고 어려운 내용들이 많다고 느꼈고, 프로그래머라면 필수로 알아야 되는 내용들이다.

특히 핀토스라는 교육용 운영체제 과제를 해보는 것은 좋은 경험이라고 생각한다.


커널과 같은 low-level에서 일어나는 일들에 대해 살펴볼 수 있는 기회는 흔치 않고, 나중에 커널 단에서의 과정을 뜯어보아야 할 때, 이전에 이미 한번 해보았으니 자신 있게 할 수 있을 거라 생각한다.

5주 동안 절반 정도는 인조 잔디 백준 문제를 풀었고, WIL도 제대로 작성하지 못한 부분이 아쉽다.

핀토스 테스트 케이스 통과에 집중하다 보니 정리할 시간이 부족했다고 생각한다.

WIL을 작성하면서 개발을 하면서 어려웠던 부분들을 정리하고 기록하면 분명 도움이 될 것이고, 코치님들도 적극 권장해주신다.


Project 1: Threads - All Pass

Project 2: User Programs - All Pass

Project 3: Virtual Memory - 7 of 141 tests failed.


프로젝트 1, 2의 테스트 케이스는 모두 통과하였고, 프로젝트 3에서 Swap Memory와 Copy On Write는 시간이 부족해 통과하지 못하였다.

핀토스 전체 코드가 약 5만 라인 정도 된다고 하는데, 실제로 보는 코드는 수천 라인일 것이다.


나는 전공자 임에도 처음 프로젝트 1을 시작했을 때 정말 막막하였다.

프로젝트 1에서 가장 중요한 것은 핀토스라는 운영 체제의 흐름을 이해하는 것이다.

수정/생성 하는 파일은 5개 남짓이지만, 이를 위해서 추가적으로 보아야 할 파일은 10개가 넘는다.

각 파일마다 수십 라인에서 수백 라인의 코드가 있고, 이해하는데 꽤 시간이 걸리는 코드들이다.

이 코드들을 좀 훑어 보았다면, 이젠 스레드가 무엇인지, 스레드가 어떻게 동작하는 지를 이해하여야 한다.


만약에 코딩이 처음인 사람이 핀토스를 하였다면, 막막할 것이다.

나도 어려움이 많아 구글링과 정답 코드를 많이 참고하였고, 처음인 사람이라면 테스트 케이스 전체 통과만 하더라도 열심히 한 것이라고 생각한다.

나는 지인에게 크래프톤 정글을 추천해준다면, 핀토스 때문이라도 어느정도 개발을 해본 사람에게 추천을 해준다.

정글은 비전공자를 받아주지만, 비전공자가 성장하기 최적인 환경은 아니다. 물론 짧은 시간에 큰 성장은 할 수 있다.

복습할 시간도 부족하고, 짧은 시간동안 C언어로 어려운 과제들을 해나가야 한다.

가이드라인은 없고 오로지 주어진 키워드를 통한 자율 학습과 팀원들과의 학습만이 있다.


많은 시간을 가지고 깊게 배워나가면 큰 도움이 되는 커리큘럼이지만, 짧은 시간 동안 과제를 모두 소화하는 것은 힘든 일이고, 아쉬움이 많이 남을 것이다.

그렇기에 어느 정도 개발을 해본, 최소한 대학교 3학년을 마친 전공자들에게 추천한다.


프로젝트 2와 3를 하다 보면 이제 핀토스라는 운영체제에 조금 적응이 될 것이다.

하지만 구현에 있어 쉽지 않은 부분이 더 많아지고, 특히 프로젝트 3 가상 메모리는 진짜 미친듯이 어렵다.

핀토스는 프로젝트 4까지 있고, 정글에서도 원래 프로젝트 4까지 했지만 수강생들이 잘 따라가지 못해 커리큘럼이 바뀌었다 들었다.

프로젝트 3보다 어려우면…. 하기 싫긴 하다.

프로젝트 1, 2는 재원님, 인우형과 같이 했고, 프로젝트 3는 경원 누님, 동욱님과 같이 하였다.

정글러 분들 5주간 고생 많으셨습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.