이번 주차의 메인 과제는 'RB트리를 C언어로 구현하기' 였다.
나는 학부 과정에서 알고리즘 수업 때 RB트리를 배운 적이 있어서 훨씬 수월했다. 물론 10시간 디버깅을 하는 지옥을 겪긴 했지만..
그런데 이게 PintOS 과제에서 쓰일 것 같지는 않다. 아마 C언어 연습을 좀 더 하라고 내준 것 같기는 한데 이중 포인터도 사용할 필요 없이 뚝딱 구현하면 끝이라 연습이 될까 싶기는 했다.
아래는 RB트리의 개념과 과제를 설명한 노션이다
https://verdant-bathtub-bae.notion.site/RB-1d67bb7778c9801da7ade72ba657ccee?pvs=4
RB 트리 | Notion
2-3-4 트리와 1대1로 대응됨
verdant-bathtub-bae.notion.site
위 메인 과제 외에도 CSAPP에서 링커, 예외적인 제어흐름, 가상 메모리 등을 공부해야 했다.
하나하나 모두 만만치 않은 주제인데, 코치님들 말씀으로는 3장보다 그 양이 적다고 하셨지만... 글쎄 더 어려운 난이도는 제쳐두고 절대적인 양도 그렇게 적지는 않은 것 같다.
링커
https://verdant-bathtub-bae.notion.site/1c37bb7778c980ffa6becb3971063ee0?pvs=4
링커 | Notion
링킹
verdant-bathtub-bae.notion.site
링커를 처음 공부하면서 느낀 점은 "아... CSAPP 이 책 정말 난해하다 !!"
번역본 책들의 특징인지 모르겠는데 쉬운 말도 어렵게 빙빙 돌아가며 설명해주어서 내 머리를 더 어지럽게 했다.
오히려 구글링과 GPT 선생의 도움으로 이해를 더 쉽게 한것 같다
동기 중 하나는 원서로 책을 읽고 있는데 그 편이 이해가 더 쉽다고도 한다
예외적인 제어흐름
https://verdant-bathtub-bae.notion.site/1dc7bb7778c980a1b347eee6520803f4?pvs=4
예외적인 제어흐름 | Notion
Exceptional Control Flow (ECF)
verdant-bathtub-bae.notion.site
인터럽트와 트랩, 시그널을 반드시 익히라고 LMS에 나와있었다. 코치님에게 여쭤보니 시그널을 PintOS에서 우리가 구현을 해볼수도 있다고 하니 더 꼼꼼히 봐야겠다.
가상메모리
https://verdant-bathtub-bae.notion.site/1bd7bb7778c980c9b272ddca6167bb93?pvs=4
가상 메모리 | Notion
페이지 테이블
verdant-bathtub-bae.notion.site
가상메모리도 컴퓨터구조 수업 때 다룬 내용이기는 했으나 이 책에서는 더 깊게 파고들어서 공부할 수 있었다.
가상 주소 = 페이지 테이블의 인덱스라는 것을 이해하고, 가상 주소를 왜 사용했는지 이해하는 것이 핵심인 것 같다.
후기
나는 공부하면서 항상 다음과 같은 꼬리 질문을 던진다.
1. 이 용어가 무엇인가?
2. 왜 이렇게 설계하였는가?
3. 이것이 어디에 쓰이는가?
위 의문들은 마냥 책만 읽어서는 해소되지가 않는다. 그렇게 친절하지도 않고 위에서 말했듯 난해하기도 하고.. 정말 GPT 선생이 없었다면 해결되지 않았을 궁금증들이 굉장히 많았다.
이 글을 읽는 다른 사람들도 모두 공부한 내용에 꼬리에 꼬리를 물고 공부해보는 것을 추천한다. 깊게 파고들어가다 보면 결국 다른 모든 컴퓨터 시스템과도 연관되어 있다는 것을 깨닫고 현자가 되는 기분을 체험해볼수 있다.