[WIL] Pintos 회고

jw3215·2022년 12월 20일
0

Project 4: File System 은 아예 손도 안 댔다. 저번 주차까지만 해도, 꼭 파일 시스템을 해야겠다고 다짐했었지만, Project 3에서 끝내지 못한 구현을 마무리 하고, 정글의 마지막 세션인 "나만의 무기"에 정신이 팔려서 그랬다. 결론은 아쉽다. Pintos를 하며 정말 많이 배웠지만, 그래도 모든 과제를 한게 아니라 아쉽다. 사실 Pintos 시작하기 전만 해도, 어느 정도 해낼 수 있을 거라는 막연한 자신감이 있었다. 아무리 어려워도 붙들고 있다보면 풀릴거라는 기대가 있었고, 그간에 경험도 그랬다. 하지만 그런 자신감은 얼마 안가서 없어졌다. 일단은 Pintos의 코드베이스는 방대했고, 하드웨어를 충분히 이해하지 않으면 high-level 언어에서 볼 수 없는 동작을 하기도 했다. 한마디로 디버깅이 너무 힘들었다.

앞으로 Pintos를 다시 할 일이 있을지는 모르겠다. 하지만 앞일은 모르는 거기도 하고, Pintos를 이제 시작할 다른 분들이 볼 수도 있으니 몇 글자 적자면,

만약 Pintos를 다시하게 된다면...

  1. pintos 프로젝트를 gdb로 디버깅하는 법을 익힐 것: printf()를 상당히 유용하게 사용했지만, printf()만으로는 디버깅이 어려운 부분이 많다. gdb의 기능을 알고, 적재적소에 사용했다면 디버깅 시간을 줄였을 것 같다. (예를 들자면 watch 기능)
  1. 좋은 C코드를 보고 적용할 것: C는 문법이 상당히 간단하지만, 좋은 코드를 작성하기가 정말 어렵다. 추상화 수준이 어셈블리어 바로 위 쯤 되는 것 같다. 다른 고급언어에서 사용하던 편리한 자료구조나 문법을 사용할 수 없으며, 하드웨어가 바로 드러나기 때문에 자원 관리도 신경써야할 부분이 상당히 많다. 유명한 오픈소스 코드를 보거나, TCPL 예제, 코치님께서 올려주신 GeeksForGeeks 문제를 풀어보는게 도움이 될 것 같다.

Pintos 프로젝트를 하며 시간이 정말 정신없이 지나갔다. 매일 부족함을 느끼는 나날이었지만, 돌아보니 얻은 것도 정말 많다.

  • 하드웨어
    • CPU register
    • ECF (Exceptional Control Flow)
  • 동시성
  • 자원관리
    • Memory (Virtual Memory)
    • CPU (Scheduling)
  • 자료구조 (Pintos의 자료구조는 STL의 영향을 받았다고 한다.)
  • Lazy Concepts (Lazy Loading, Lazy Evaluation, Lazy Iterator ...)
  • OOP 추상화

전체적인 감상을 얘기하자면, 컴퓨터를 보는 관점이 달라졌다. Pintos를 시작하기전에도 코딩을 할 줄 알았고, 컴퓨터에게 일을 시키는 것은 할 수 있었다. 하지만 구체적으로 컴퓨터가 그것을 어떻게 해내는 지는 블랙박스 안의 영역이었고, Python 같은 고급언어의 측면에서 보면 "컴퓨터가 다 알아서 해주는" 마법처럼 보이기도 한다. Pintos를 직접 구현하면 하드웨어 (CPU 레지스터, 메모리, 어셈블리어) 개념을 코드에서 볼 일이 정말로 많다. 따라서 컴퓨터의 세부적인 동작을 자연스럽게 알게 된다. (물론, OS는 방대하기 때문에 모든 것을 6주만에 알아내기는 매우 어렵다.)
결국 "기계적인 계산만을 할 뿐인 튜링머신" 을 어떻게 "알아서 해주는 컴퓨터" 로 추상화 할 것인가가 문제인데, 이 문제를 해결하려다보니 프로젝트의 복잡도가 높은 것 같다. 다시말해, 예전부터 많은 컴퓨터 과학자들이 고민했고, 그 결과로 나타난 것을 배우는 것이다. 그 이력을 모른다면, 세부 구현이 왜 이렇게 되어야하는지 직관적으로 이해하기는 어렵다.
OS를 강의만 들어서 이해하려했다면 이러한 추상화 단계가 와닿지 않아서, 표면적인 이해에 그쳤을 것 같다. 반면, Pintos를 구현하며 컴퓨터가 튜링머신에 지나지 않는다는 사실에 더 깊이 공감하게 되었고, 컴퓨터 전반에 걸친 추상화 단계를 보다 상세히 들여다 볼 수 있었다. 예전부터 배우고 싶었던 주제가 몇 가지 더 있는데, Pintos 프로젝트 경험을 바탕으로 더 깊은 이해를 할 수 있으리라 기대한다.

0개의 댓글