정글 사관학교 W09[핀토스]_WIL

정나린·2022년 11월 29일
0

[9주차 개괄]

😬 핀토스 Project1과 Project2까지 끝내고 살아 돌아왔다. 장하다. 😬

2.5주간 친자매보다 더 친자매처럼 붙어 다녔던 2조 팀원 두 분이 아니었다면 앞이 아주 많~이 캄캄해질 뻔 했다.
셋이서 뒤에서 밀고 앞에서 끌어주며 Project 1보다는 훨씬 더 우리의 힘으로 Project 2를 해낼 수 있었던 점에서 굉장히 만족스러웠던 1.5주였다!

(치열했던 System Call 구현의 현장)

이번 기록에서는 정보 전달보다는 남은 2달여간의 정글에서 내가 갖춰야 할 소양에 대해 이야기해보려고 한다.

[Project 2-1: 서로의 이해를 검증하는 시간을 갖자]

📈 막막하지만 함께라면 결국 해내는 정글..(오글)

'와.. 뭐부터 건들여야 하지..?'

핀토스의 2만 줄이 넘는 코드를 보다보면 이런 생각이 안들 수 없다.
내가 직접 하나 구현해야 하는 부분이 워낙 많지만, 그럼에도 주옥같은 이미 구현된 기능들도 어마무시하게 많다.
그렇기 때문에 내가 필요한 기능이 무엇인지 알고 그 역할을 담당하는 코드가 있는지 찾아낼 수 있는 능력이 필요하다.

"내 생각은 이래. 너 생각은 어때?"

GitBook과 코드를 계속해서 뜯듯이? 확인하다 보면 내가 구현해야 하는 부분이 뭔지 "말"로 설명할 수 있는 단계에 이르게 된다.
나는 이 과정이 아주 중요하다고 생각한다. 기계에게 명령을 내리기 전에 추상적이지만 이해하기 쉬운 말로 논리구조를 짜 보는 것이다. 이때 팀원들, 공부하는 사람들과 서로의 논리 과정에 잘못된 점은 없는지 혹은 부족한 점은 없는지 점검하는 시간을 꼭 가지는 것이 포인트이다.

훨씬 더 정확하고 빠르게 원하는 바를 구현할 수 있기 때문이다. 그리고 개발자로서 내가 이해한 바와 구현하고 싶은 바를 명료하게 설명할 수 있는 능력이 꼭 필요하다고 생각하는데, 이에 대한 준비도 같이 할 수 있어서 정말로 값진 시간이라고 생각한다.

[Project 2-2: 감이 온다면 일단 질러라]

💡 fd를 다루는 스켈레톤 코드가 보이지 않아..!

create, remove System Call 구현을 끝나고 Open을 구현하려고 보니, 익숙한 그 이름 fd(File Descriptor)가 등장했다.
write, read를 구현하기 위해서는 open의 결과로 얻은 fd를 저장할 곳이 필요했고, 스켈레톤 코드 그 어디에도 fd 저장하는 함수나 변수가 보이지 않았다.

각 process는 자신의 fd_table을 가지고 있다.
(참고: https://m.blog.naver.com/songblue61/221391888403)

하나의 프로세스가 open한 파일에 대한 fd를 저장할 곳이 fd_table이고, fd_table은 프로세스 하나당 독립적으로 가지고 있다고 하니 thread 구조체에 멤버로 들어가야 한다는 생각이 들었다.
그리고 doubely linked list로 구현하기 전에 일단 돌아가는 코드를 짜보고 싶었기 때문에 array로 구현하기 시작했다. 결과는 아주 GREAT!

누구에게는 이게 뭐 큰 일이야 싶겠지만,
내가 이해한 것이 맞나.. 의심의 의심을 거듭하는 나로써는 일단 array로 만들어보자!하는 결심이 쉽지만은 않았다.
앞으로 감은 오지만 확신이 들지 않을 때가 자주 있을 것이라고 생각한다.
그럴때마다 겁내면서 주저하기보다는
"일단 해보자! 밑져야 본전!" 마인드를 가져야겠다는 다짐을 하게 되었다.

[Project 2-3: 추상화된 개념에 매몰되지 말자]

☁️ OS를 배우는 사람이 아닌, 개발하는 사람의 관점으로!

처음 복수전공을 시작하던 당시, "변수"가 이해되지 않아 한동안 고생했었다.
지금으로서는 뭐가 그렇게 이해가 되지 않았을까.. 싶지만, 그때의 기억을 되살려 보면 변수명과 실제로 들어있는 값이 혼동되었던 것 같다.

결국 메모리에서 일정 크기를 할당받아 그 곳에 원하는 값을 저장하는 아주 기본적인 내용이었지만, 이 원리를 모르고 변수, 변수명, 값, 그리고 자료형까지 여러 개념이 휘몰아쳐서 혼란스러웠다.

OS의 공부 범위는 너무 깊고 방대하다. 아무리 Gitbook을 읽고 CS:APP를 읽어도 뭔가 뜬 구름 잡는 느낌이 가시질 않는다.
처음엔 이 기분이 아직 개념 숙지가 될 되어서, 공부가 덜 되어서 든다고 생각했다. 그래서 팀원들과 실제 대학 강의를 듣기도 했다.
하지만, 대학 강의는 OS를 개발하는 사람의 관점이 아닌 배우는 사람의 관점에서 알아야 하는 개념을 가르칠 뿐이었다.
그러다보니 추상화된 내용, 용어들을 사용하고 실제 어떤 코드를 짜야 하는지에 대해서는 별로 도움이 되지 않았다.

변수라는 추상화된 개념에서 헷갈려했던 3년 전 나와 무엇이 다른가?

한참 고전하고 있던 중, 코치님께서 오셔서 아주 기본적이지만 그만큼 중요한 코드 동작 원리를 하드웨어의 관점에서 설명해주셨다.
코치님의 질문 하나 하나에 답하면서 뿔불히 흩어져 있었던 개념들을 정리할 수 있었고 어렵게만 생각했던 low level에서 일어나는 일련의 과정들이 쉽게 다가왔다.

정글에 가장 얻고 싶었던 것은 학생이 아닌 개발자로서 코드를 바라보는 태도와 나도 할 수 있다는 자신감이었다.
학생처럼 공부하려고 하지 말고, 개발자로서 주어진 문제를 인식하고 그것을 해결하기 위해 알아야 하는 내용을 '찾고 + 익히고 + 종합'해서 실제 코드를 짜는 안목과 관점을 익힐 수 있도록 노력해야겠다.

0개의 댓글