[pintOS] 마무리

Johnny·2021년 11월 2일
0

개발일지 (정글)

목록 보기
6/7

핀토스를 마치며

  • 핀토스, 재밌었다.
    • 구현하는 즐거움이 있었다. 퍼즐 조각을 맞춰나가는 기분이 들었다.
    • 막연하게 어려울 것이라 생각했던 문제를 하나씩 해결하며, '이 또한 사람이 만든 문제구나' 하는 순간이 있었다. 앞으로 마주할 다른 문제들도 결국 해결해낼 수 있겠다는 자신감이 붙었다.
    • 물론 정말 답을 찾기 어려운 순간들도 많았다. 특히 2주차에 발생했던 메모리 릭 이슈는 오랜 시간을 투자해도 답을 찾지 못했고, 무력감까지 느꼈었다. 지금 보면 그 벽을 직접 마주해보았다는 것이 나에게 남았다. 좋은 경험이었다.
  • 많이 배웠다.
    • 운영체제가 하드웨어를 가상화하는 목적은 결국 easy-to-use 였다.
      • 운영체제 내의 여러 사용자 프로그램들이 한정된 물리 자원을 효율적이고 쉽게 사용할 수 있도록 가상화해주고 있었다.
      • 여러 프로그램이 하나의 CPU를 공유해야 하므로 프로세스라는 추상화된 개념을 도입하고, 여러 프로그램이 하나의 물리 메모리를 공유해야 하므로 가상 메모리라는 추상화된 개념을 도입하고, 영속하는 메모리 영역을 관리하기 위해 파일이라는 추상화된 개념을 도입했다.
      • 운영체제가 이렇게 복잡한 작업을 수행하는 이유는, 물론 보안 등 다른 이슈들도 많지만, 근본적으로 사용자 프로그램이 더 쉽게 동작할 수 있도록 만들기 위함이다.
      • 사용자 프로그램 관점에서 CPU를 독점적으로 사용한다고 믿을 때, 물리 메모리를 독점적으로 사용한다고 믿을 때, 파일 시스템이 기대한대로 동작한다고 믿을 때, 프로그램은 다른 프로그램들을 신경쓸 필요 없이 편하게 구현될 수 있다.
    • WHY, WHAT을 알기 위해서는 책을 읽어야 했다.
      • 해결하고자 하는 문제(WHY)와 해결을 위해 도입된 개념들(WHAT)을 파악하기 위해서는 책을 읽는 편이 좋았다. (유튜브 영상들은 그냥 보지 않았다.)
      • 전체적인 맥락을 잡는데 OSTEP 책이 도움이 많이 되었다. (무엇보다 이 책은 정말 사랑스러운 책이다.)
      • 핀토스를 떠나서 시스템 자체에 대해 조금 더 깊이 있게 이해하기 위해서는 CS:APP 책을 읽는 편이 좋다. (약간 성경과 같은 책인 것 같다.)
      • 책은 반드시 다시 읽어보아야 한다.
    • HOWTO를 알기 위해서는 코딩을 해야 했다.
      • 구체적인 구현 방식(HOWTO)은 사실 책에 담긴 내용과는 달랐다. 그리고 직접 구현해보며 배우는 것들도 많았다. 각 테스트케이스들을 하나씩 통과시키며 WHY와 WHAT에 대해 다시 생각해볼 수 있었다.
      • 핀토스를 다시 구현해보는 것이 좋을지는 고민이다.

놓치지 않을 거에요

  • 시간이 지나면 까먹게 되어 있다..

    • 어떻게 해야 핀토스 기간 동안 배운 것을 내 것으로 만들 수 있을까?
  • 일단 내 것이 된다는 것이 뭘까?

    • 각 개념의 WHY, WHAT, HOWTO설명할 수 있다.
      • 특정 개념이 등장한 배경은? 개념은 무엇인지? 구현 방법이나 구현 상의 이슈는?
      • 특히 핀토스에서는 동작 방식(MECHANISM)과 정책(POLICY)을 구분해 설명할 수 있다.
  • 핵심적인 개념들

    • 1주차 THREAD
      • priority scheduling
      • priority donation: lock, semaphore, condition
    • 2주차 USER PROGRAM
      • user-mode vs kernel-mode
      • system call: fork, wait, exec
      • system call: open, close, read, write
    • 3주차 VIRTUAL MEMORY
      • supplemental page table
      • lazy load
      • handling page fault: stack growth etc
      • memory mapped file
      • swap in/out
    • 4주차 FILE SYSTEM
      • inode
      • file allocation table

    남는 아쉬움들

    • 나만의 무기 만들기 준비를 시작하고 나서, 핀토스에 백프로 집중하지는 못했던 것 같다. 나만무 관련 고민을 조금 덜 하고 그 에너지를 핀토스에 썼었다면 좋았을 텐데 아쉽다.
    • 배운 것들을 나중에 볼 수 있게 잘 정리해두었으면 좋았을 텐데 아쉽다. 하지만 이 부분은 선택한 것이기도 하다. 중요한 내용은 책에 다 있다. 직접 구현해보는 데 더 많은 시간을 쏟았다.
    • 오히려 더 필요한 기록은 구현한 스토리다. 어떤 이슈를 해결하기 위해, 무엇을 도입하려 했고, 어떠한 어려움이 있었는지, WHY, WHAT, HOW에 맞춰 정리해두면 좋을 것 같다.
      • 할 시간이 있을까? 현실적으로 안 하게 될 것.
      • 지나간 과정에 대한 기록을 되살리려 애쓰기 보다는 OSTEP과 CS:APP을 보면서 기본 개념들을 잘 이해하는데 집중하자.
profile
개발자 서자헌

0개의 댓글