[회고록] Kaist-PintOS Project 1: Thread

emplam27·2021년 2월 3일
0

프로젝트

목록 보기
3/5

학사측의 요청으로 코드는 공개하지 않습니다!

21.01.28 ~ 21.02.04

Kaist-PintOS 중 Thread 프로젝트의 Alarm Clock, Priority Scheduling, Advanced Scheduling을 구현하는 프로젝트였습니다. OS의 기본 개념과 구성요소들을 알 수 있는 기회였습니다.


어려웠던점

  1. OS의 기본 개념을 공부하는게 어려웠습니다. 컴퓨터 공학의 꽃이라고 불리는 이유를 알게된 것 같습니다. 하나하나의 개념들이 정말 중요하고 또 정말 어려웠습니다. 프로세스, 스레드, 스케줄링들을 넘어서 세마포어, 뮤텍스를 공부할 때는 개념들이 너무 추상적이어서 쉽게 와닿지 않았습니다.

  2. 추상화된 개념들과 이들을 실제 코드에 어떻게 적용하는지를 아는게 어려웠습니다. sleep과 wake에 대한 개념을 OS에서는 어떻게 표현했는지, lock과 semaphore는 어떻게 얻는지 등 추상적인 개념들을 실제 코드로 구현화는 과정이 어려웠습니다.

  3. 이번 프로젝트는 쉬운 스케줄링 알고리즘에서 부터 단계적으로 개선하려하면 발생하는 문제점들을 해결하는 과정이었는데, 발생하는 문제들을 생각하는 과정이 어려웠습니다. 특히 Priority Inversion를 Priority Donation을 이용하여 해결하는 과정을 이해하고 구현하는 과정이 어려웠습니다.


배운점과 성과

  1. 공부할 내용이 너무 많았기 때문에 기본적인 개념들을 핵심위주로 공부하고, 프로젝트에 뛰어들어서 익히는 방법으로 프로젝트를 진행하였습니다. 결과적으로는 성공적인 프로젝트였습니다. 모호했던 개념들이 직접 경험해보니 더 이해도 잘 되고, 부족했던 부분들을 채워나가는 느낌이 들었습니다. 짧은 시간에 많은 내용을 익히기에 효율적인 방법인 것 같고, 실전적인 프로젝트 과정에서도 적용해볼 생각입니다.

  2. 추상화된 개념을 잘 이해하는 것도 중요하지만 내가 이해한 개념을 추상화 해보는 과정 역시 중요하다는 것을 배웠습니다. 특히 세마포어, 뮤텍스, 락, 모니터 등 추상화를 통해 공부한 개념을 코드에 적용해보기 위해서는 또 기본 공부와는 조금 다른 추상화의 과정들이 필요했습니다. 이 코드에서는 어떤식으로 적용해야 할지 고민해보며 추상화의 중요성에 대해 다시한번 깨닫는 시간이었습니다.

  3. CPU가 할당되었다거나, PC가 해당 코드를 가리키고 있다거나 등 CSAPP 책을 읽으면서 나왔던 컴퓨터 구조에 관한 지식들이 OS 프로젝트에서 하나둘씩 나오는 있는 것에 놀랐습니다. CS 구조에 대해 어느정도 공부했던 것들이 등장했을 때 그 내용들을 몰랐다면 다시 그 부분에 대해서 공부하려 돌아갔을 생각을 하니 아찔하기도 합니다. 미리 CS 기본지식을 공부하는 것이 무조건 좋다는 생각을 하였고, 주니어 개발자을 벗어나 이러한 과제들에 직면하게 되었을 때 더 높은 개발자로 성장하기 위한 초석이 되겠구나를 느낀 일주일이었습니다.


앞으로 해보고 싶은 공부

동시성 프로그래밍에 대해 깊이 공부해보고 싶습니다. PintOS를 통해 멀티 쓰레드 환경을 경험해볼 수 있었으며, 멀티 프로세스 프로그래밍도 경험해보고 싶습니다.

profile
내가 다시 보고 싶은 글이어야 남들도 보고 싶은 글이라 생각하며 작성합니다. 공부한 내용들을 건강하게 공유하며 함께 성장하고자 합니다😊😊

0개의 댓글