[WEEK08_WIL] Pintos Project1 회고

박윤찬·2022년 5월 25일
1

jungle

목록 보기
19/19
post-thumbnail

Pintos

이번주부터 pintos 프로젝트를 시작했다.
이번주는 thread의 생성 방식이랑 자원관리 방식이 어떻게 되는지에 대해 공부했다.
총 3가지(Alarm Clock, Priority Scheduling, Advanced Scheduler)를 구현하는 것이였다. 우리조는 목표로 Priority Scheduling까지 구현을 하고 시간이 남으면 선택 사항이였던 Advanced Scheduler를 구현하기로 이야기를 했다.
각 과제들에 대해 느낌 점을 적어보려고 한다.

Alarm Clock

Alarm Clock을 구현하기 전에 2일 정도 운영체제의 기초 강의를 들으면서 코드를 보지도 않고 이론 공부만 했는데 막상 Alarm Clock코드를 구현하려고 보니깐 코드를 작성하기 위해서는 이론이 아니라 각각의 파일의 함수 들이 어떤 기능을 하는지 부터 알아야 됐다.
그래서 함수들 기능을 알아가는 시간을 많이 썼던 것 같다... 다음 부터는 코드를 보고 어떤 함수들이 있는지 먼저 알아보는 시간이 있어야겠다는 생각을 했다.
Alarm Clock를 구현하면서 sleep_list에 thread를 넣을 때 정렬해서 넣어 버리면 깨울 때 sleep_list 전체를 순회할 필요가 없을 것 같다라는 것을 고민했다.

Priority Scheduling

Priority Scheduling를 진행 했을 때는 앞에 Alarm Clock에서 썼던 정렬로 우선순위가 높은 thread가 CPU를 점유하도록 하는 문제였다. 처음에는 간단하게 앞에 했던 방식으로 진행과 유사하게 진행하면 되겠다라는 생각을 했는데 나중에 Synchronization방식으로 구현할 때 어떤 형태로 돌아가는 구조일까? 라는 생각에 전체적인 그림을 그리기 어려웠던것 같다.
Donation 방식으로 구현할 때는 조원이 한 개의 노트북으로 같이 코드를 작성하는 방법으로 해봤다. 자유롭게 서로의 의견을 주고 받으며 코드를 작성하는데 생각보다 의견이 잘 맞아서 재밌게 코드를 작성했다.

Advanced Scheduler

하루라는 시간이 남아서 Advanced Scheduler를 구현을 시작했는데 부동 소수점, 고정 소수점에 대해 공부를 하고 시작을 했다. 이 과제를 구현할 때는 수많이 테스트를 실패 했는데 가장 기억에 남는 건 mlfqs-recent-1.c 이 놈이다... 이 테스트 케이스에서 엄청 많이 디버깅을 했다... 결국모든 thread를 다 recent_cpu와 priority값을 갱신을 안해준게 문제였다. 문제를 찾고 all_list라는 모든 thread를 담고 있는 list를 만들어서 문제를 해결했다.

좋았던 점

항상 나오는 시간과 회의 시간을 정해 놓고 해서 하루의 시작을 활기차게 보낼 수 있었고, 현욱이 형과 성곤이가 git에 대해 많은 지식이 있어서 많이 배울 수 있었다. 그리고 버그를 만나면 힘들지만... 버그를 잡고 해결했을 때가 제일 좋았다.

아쉬운 점

처음에 너무 이론 공부만 하면서 코드를 보지 않고 있어서 진도가 느리게 나간것 같다. 다음 부터는 코드를 먼저 살펴보고 필요한 부분을 공부하면서 채워나가야 될 것 같다.

pintos와 운영체제에 대한 공부 내용은 Notion에 정리하려고 한다.
Notion 바로가기

profile
개인 공부를 위한 블로그입니다.

0개의 댓글