본문 바로가기

카테고리 없음

핀토스는 사람을 무기력하게 만든다.

요즘 운영체제라는 과목을 들으면서 핀토스 프로젝트를 하고 있다.

 

PINTOS

 

작은 OS라는 뜻이다. Pintos는 운영체제의 기본이 되는 scheduling, user program 다루기, virtual memory management, file system을 코드로 짜 보도록 되어있다. Linux 같은 실제 운영체제의 많은 부분은 device driver가 차지하는데, 핀토스는 잡다한 부분은 빼고 운영체제의 핵심만을 학습 주제로 다루어 학생들이 운영체제를 이해하기 쉽게 해준다.

 

하지만

 

진짜 너무 너무 진짜 어렵다. 미친듯이 어렵다. 진짜.. 너무하다... 이런걸 만들고 학생들에게 내 줄 생각을 하다니.. 진짜 너무하다..

 

어렵다고 들었지만.. 전공필수라 안 들을 수도 없고.. 진짜 너무 하다..

 

물론 하면서 엄청나게 실력이 늘긴 한다. git이랑 gdb도 써 보고, cvs같은 툴도 알게 되고.. sublimetext의 console도 써 보고, 서버컴으로 리눅스도 다루어 보고.. 무엇보다 그 거대한 pintos를 직접 짜 보면서 추상화가 얼마나 잘 되어 있는지, 거대한 소프트웨어를 설계할 때 추상화를 어떤 식으로 해야 할지 잘 알 수 있다. 또한 c언어를 제대로 경험해 볼 수 있는 것 같다..

 

그렇지만

 

진짜 너무너무 진짜 너무 힘들다.. 하....... 진짜 너무 힘들다... 올해 5월달은 휴가의 달이라면서 해외 여행을 가는 사람들, 집에 가는 사람들 등등 여유를 즐기는 사람들이 많은데.. 핀토스를 하는 학생들은 그런거 그냥 생각 안 하고 계~~~~속 코딩만 하면 된다..

 

진짜 그냥 계~~~~~~~~~~~~~속 계~~~~속 코딩만 하면 된다. 코딩하다가 지치면 잠깐 밥먹고 잤다가 다시 코딩 하다가 물리면 document 읽다가 github에서 다른 사람들 코드도 좀 봐 주고.. 각종 참고 자료 읽고.. 다시 코딩하고 머리아프면 팀메랑 밥먹고 다시 코딩하고 그냥 계속 하면 된다.. 

 

이거 코딩하다가 HCI에서 웹 개발 코딩 하니까 너무 재밌다.. 물론 프론트엔드 코딩도 제대로 하자면 어려울 것이다.. 하지만 그런걸 떠나서 그냥 코드를 바꾸면 눈에 보인다는게 감동적이고 재밌다.. css selector 써서 값 조절하서 chrome 켜서 보면 바로바로 변화를 볼 수 있는게 너무 감사하다.. 핀토스는 눈에 보이지도 않고.. 디버깅 하기도 힘들고 테스트 하기도 힘들고 대체 뭐가 잘못 됐는지 알기가 힘들고.. 초반 플젝할 때는 printf도 못 쓰고..

 

물론 핀토스의 진짜 묘미는 3, 4단계에서 나온다. (핀토스틑 4단계로 나눠져 있다.) 지금 3단계 virtual memory를 하고 있

는데.. 진짜 너무 힘들다..... 아 진짜 이 길이 맞나 싶을 정도로 너무 힘들다.. 대체 시스템 프로그래밍 하는 사람들은 어떻게 하는 거지..? 어떤 사람들이지.. 너무 대단한데.. 미쳤다.. 

 

힘든 것 중에 하나는 컴퓨터랑 관련 없는 주위 사람들이 '이상하게' 생각한다는 것이다. 그 어떤 학부생이라도 핀토스를 한다면 아주 고전할 것이다. 지금 나와 팀메이트, 또 이 수업을 듣는 모든 학생들이 그러하고,.. 수업을 들었던 선배들의 이야기도 모두 그러했으니까.. 하지만 이 상황을 '비컴퓨터 사람', 예컨데 엄마에게 설명하는 것은 쉬운 일이 아니다. 학기가 시작할 때 '엄마 나 이번학기에는 너무 큰 숙제가 있어서 집에 잘 못 갈 것 같아'라고 말 하는 것은 부족하다. 저 말을 강조하고 또 강조해도 엄마는 당신을 이상하게 생각할 것이다. 이따금 엄마에게 전화가 걸려오면, '엄마 나 지금 친구랑 숙제하고 있어, 미안. 이따가 전화할게' 라고 하게 될 것이다. 그리고 당신은 전화하지 않는다. 그리고 4일 뒤 엄마에게 다시 전화가 온다. (물론 당신은 전날밤을 새고 6~7시에 잤을 것이다.) '아들 뭐하니?'라고 엄마가 묻는다면 당신은, '엄마 나 어제 숙제하다 7시에 자서 지금 자고 있어. 나중에 전화할게.'라고 할 것이다. 그러나 당신은 일어나서 씻어야 할 것이고, 밥을 먹어야 할 것이고, 빨래도 개면 어느새 오후 3시가 됐음을 발견하고, 엄마께 다시 전화드릴 틈도 없이 컴퓨터를 켜서 핀토스를 하게 될 것이다. 그날 밤 9시에 친구에게 전화가 걸려온다. 하지만 당신은 팀메와 함께 핀토스를 하고 있다. 예를들어, 당신은 Virtual memory에서 frame.c와 frame.h을 짰고, 당신의 팀메는 validity checking 부분을 완수해서 서로에게 열띄게 설명해주고 있었다. 당신은 그 상황에서 친구의 전화를 20분 이상 받지 못한다. 

 

핀토스를 한다면 당신에게 페북과 카톡은 사치다. 물론 할 것이다. 하지만 이전처럼 하진 못 할 것이다. 오늘도 단톡방에는 이상한 짤들과 웃긴 링크들이 올라온다. 하지만 당신은 그런 것들을 챙겨 볼 시간은 절대로 없다. 그런 걸 볼 시간은 커녕, 당신은 머리를 자르고 올 시간도 없다. 그렇게 살다보면 당신은 오늘이 며칠이고 무슨 요일인지 까먹게 되고, 어제가 당신 친구의 생일이었음을 발견하게 되고 뒷북 축하를 해주게 될 것이다. 심지어 그 친구는 당신의 생일에 12시가 딱 되자마자 축하 메시지를 보내준 고마운 친구일수도 있다. 당신은 미세먼지 때문에 더러워진 방을 청소하고 싶다. 방에 쌓인 빈 페트병도 내다버리고 싶고, 옷 정리도 하고 싶고, 옛날부터 사고 싶었던 폴라로이드 카메라와 신발도 알아보고 싶다. 당신은 새해 초에 계획했던 다이어리도 매일매일 쓰고 싶고, 가끔씩 여자친구와의 사진을 보고, 어떻게 하면 여자친구를 기쁘게 해 줄 수 있을까도 고민하고 싶다. 또한 당신은 어버이날에 부모님께 편지와 함께 카네이션도 드리고 싶고, 밀렸던 드라마도 보고싶다. 또한 당신은 여름방학때 할 인턴이나 교수님 랩 을 알아보아야 한다. 

 

문제는 당신은 이중 딱 1~2개만 고를 수 있다는 것이다.

 

그리고 당신은 오랜만에 블로그로 생각을 정리하고 싶은 이 와중에도 팀메이트가 이것저것 테스트 케이스 사진을 보내며 물어봐서 더 이상 블로그 글 쓸 시간 조차 없다.

 

* (이 글은 2017년 봄에 쓰여졌다. 난 아직도 프로젝트가 힘들 때마다 이 글을 본다..ㅜㅜ)