3주 동안 project1 과 2를 진행했다.
진행해온 경험을 바탕으로 3주간의 회고를 해보려고 한다.
(해당 글은 project1 에 대한 내용만을 포함한다)
해당 글을 읽게 된다면, 어떠한 시도를 했는지 그리고 결과가 어땠는지에 대한 내용과 추천 방법에 대한 내용을 볼 수 있을 것 같다.
팀 주간 공유에 대한 자료와 기술적인 부분들은 시리즈 Pintos 에서 볼 수 있다.
링크 : https://velog.io/@minpic/series/Pintos
우선 1주 동안 project1 을 진행했다.
주어진 gitbook, 카이스트 강의, 카이스트 ppt자료를 읽고 어떻게 프로젝트를 진행하면 좋을지 고민했다. 그리고 gitbook 자료를 토대로 구현을 시작해 나갔다.
초반에 Alarm Clock gitbook 을 보면 timer_sleep 함수를 busy_waiting 을 피하도록 구현하라고 되어있다. 그래서 친절하게 어떠한 함수를 어떻게 돌아가도록 구현하라고 나와있기 때문에 gitbook이 하라는 대로 그냥 차근차근이 구현하면 되겠구나 생각했다.
Reimplement timer_sleep(), defined in devices/timer.c.
Although a working implementation is provided, it busy waits, that is, it spins in a loop checking the current time and calling thread_yield() until enough time has gone by. Reimplement it to avoid busy waiting.
하지만, 이 덧에 넘어가지 말라.. 앞으로의 gitbook 은 이렇게 친절하지 않다.
해당 함수를 구현하기 전에, 나는 전반적으로 해당 함수가 왜 필요한지, 언제 호출되는지, 지금과 같은 방식이면 무엇이 문제인지 등을 전혀 고려하지 않았다.
그저 gitbook이 주어준 대로 구현하려고 하지말고, 항상 물음을 던져야 한다.
더불어 이미 주어진 내장함수들이 무엇이 있는지 확인하고 구현을 시작해야 구현을 수월하게 할 수 있다.
그래서 gitbook을 보고 구현하다가, 한양대 수업 자료인 Pintos 자료를 확인하여 구현을 시작했다. 한양대 수업자료는 카이스트 ppt 보다 더 자세하게 구현해야할 부분들을 적어 놓았고, 한국어로 되어있어서 보기 편하다.
그리고 나서야 Alarm Clock 을 구현할 수 있었다.
Alarm Clock 을 구현해야 한다면, 다음과 같은 순서를 생각하며 구현하면 좋을 것 같다.
Alarm clock 이 오 쉬운데, 싶었다면.. 점점 어려워지니까 오만하지 말고... 집중해야된다. 😂
이 때부터는 한양대 ppt 자료를 기준으로 계속 구현을 해나갔던 것 같다.
그런데 이 때도 구현해야될 부분에 대한 큰 그림을 그리지 못하고 구현을 시작했던 부분이 아쉬웠다.
ppt 자료에 어떻게 구현하면 될지 자세하게 다 나와있다. 그런데 중요한건 내가 아는 개념과 연결 시켜서 구현을 해서 완벽한 이해를 하는게 중요한데, 그러지 못했다.
그리고 해당 부분은 alram clock 보다 문법적으로 더 구현난이도가 높기에 많은 시간을 투자해야 된다.
시간이 된다면 운영체제 수업을 듣고 시작하는 것을 추천한다.
프로세스, 스케줄링, 동기화 개념을 잘 파악하고 들어가는게 중요한 것 같다.
특히 도네이션, 세마포어, 락 개념도 잘 정리하고 넘어가는 것을 추천한다.
그리고 gitbook 과 한양대 ppt 자료를 보면서 구현했다. 그리고 구현하면서 예외처리를 잘 해줘야 한다.