YK
← Posts

[WEEK 9] 핀토스 - 스레드

2026-04-30

이번 주는 대망의 핀토스를 시작했다. 학습 키워드는 다음과 같다: threads, synchronization, priority scheduling, priority inversion, MLFQS(Multi Level Queue Scheduling).

이번 주는 학습에도 구현에도 AI를 전혀 쓰지 않는 방식을 택했다. 원래는 AI를 적극적으로 활용해 학습 속도를 올리는 편이었지만, 이번에는 전통적인 방법으로 도전해보고 싶어 구글링도 하지 않고 동료들의 가이드와 카이스트의 gitbook만 보며 진행했다.

AI 없이 구현을 해보니 디버깅 연습은 확실히 많이 되었지만, 이론과 구현의 균형을 잡기 위해서는 AI가 필수적이라는 생각이 들었다. 거대한 코드와 매뉴얼만 보고 혼자 구조를 파악해 구현하는 건 불가능에 가까웠고, 동료들의 도움 덕분에 어떻게든 구현해낼 수 있었다. 그 결과 이번 주차는 threads, synchronization, priority scheduling까지만 마쳤고, 이후 주제들은 나중에 혼자 더 고민해볼 생각이다. 동료 학습이나 페어 프로그래밍도 좋지만, 결국 스스로 길잡이가 될 기반 지식이 없으면 무너지는 경우가 많았다. 따라서 다음 주는 학습 과정에서 AI를 다시 적극적으로 사용해 목적을 최대한 구체화하는 데 집중할 계획이다.

이번 주차에는 거대한 코드 베이스 위에서 코딩하는 연습을 했다. 핀토스 내부 구조를 볼 때 이중 연결리스트 부분은 크게 집중하지 않고 가볍게 넘어갔었다. 하지만 그렇게 구현된 리스트의 특성을 제대로 파악하지 못해 문제가 발생했다. 두 개의 list가 있을 때 기존 리스트에서 element를 뺀 후 다른 리스트에 넣었어야 했는데, 파이썬의 추상화된 리스트처럼 생각해 다른 리스트에 먼저 element를 넣고 원래 리스트에서 빼려다 에러가 났다. 함수 호출 순서에 따라 pass와 fail이 갈리는 것을 경험하며, 코드를 짤 때 훨씬 더 섬세하게 접근하는 습관을 길러야겠다고 느꼈다.

또한, sema_up() 함수 내부에서 디버깅을 위해 printf()를 사용했더니 OS 부팅이 되지 않는 문제가 있었다. 원인은 printf() 안에서 다시 sema_up()이 호출되고 있었기 때문이다. 이로 인해 재귀 호출이 발생하여 계속 timeout이 났던 것이다. 로직 자체에 문제가 없는데 예상치 못한 에러가 발생한다면, 그 내부 동작을 더 깊숙이 들여다봐야 한다는 교훈을 얻었다.

이번 주는 모두가 같은 테스트 케이스를 풀다 보니 협업의 가치보다는 개인 학습에 치우친 경향이 있었다. 다음 주차에는 협업에도 적극적으로 참여하고 git을 활용하는 방법도 제대로 익혀야겠다.