저번 주차에서 thread를 접했을 때 든 생각은
"thread를 완벽히 이해하려면 좀 더 큰 범위의 os와 컴퓨터의 동작에 대해 완벽히 이해해야지 아니면 막연한 안개속에 쌓인 채 부분적인 단면만 이해하는 것"이라는 생각을 했다.
하지만 proxy라는 주제 때문에 thread에 완전히 몰입하기엔 시간이 부족하다고 생각했고, 선택과 집중하자는 마음으로 proxy 구현에 필요한 thread 내용만 공부했다.
그러나 현명하신 정글 신이 기회를 주셨다. 이번주차는 thread를 사용할 때 발생할 수 있는 케이스를 다루고 개선시키는 게 과제로 주어진 것이다! thread 기회로 완전히 씹어먹고 싶어졌다.
사실 이런 생각을 한 데에는 이유가 있다.
대학원을 다닐 때 3D프린터에 딥러닝을 접목하면서, python으로 3D프린터를 제어하는 프로그램을 만든 적이 있는데 그때 정말 이 thread기능을 사용해서 구현했었기 때문이다. 그때는 이런 original한 공부를 하지 않고 아니, 21세기에 3가지 함수를 동시에 동작하는 방법이 있지 않을까? 하는 생각으로 사용했었다. 물론 구글링과 논문의 힘으로 어떻게든 구현을 했었지만, 어떻게 동작하는지 더 효율적이게 쓸 수 있는 방식이 뭔지 공부할 수 있는 기회가 주어졌다! 정글 오길 정말 잘했다.
좀 더 자세히 써보자면, 광경화 3D프린터는 광원을 액상형태의 광경화 레진에 조사하면 레진이 고체로 경화되어서 형상을 만드는 기술이다. 이 때 사용하는 405nm 광원이 DLP인데, 이 DLP를 제어하는 프로그램은 이미 DLP광원 회사에서 전달해줬다. 이미 하나의 독립적인 프로세스가 있는 것이다. 또, 딥러닝을 하기위해 레진 표면 이미지를 얻기 위해서 안드로이드폰을 달아두었다.(카메라가 아닌 폰으로 이미지를 얻은 이유는 사진을 찍고, 문제가 있을 시 폰으로 "3d프린터 문제있어요. 확인해 보세요"라는 메세지를 보내고 싶었다.) 3D프린터를 제어하는 건 또 각종 센서들과 모터들이 연결된 아두이노가 실질적인 하드웨어 제어가 들어가고 그건 '.ino'파일형식으로 되어있다.
이 다른 프로세스를 어떻게 하나의 프로그램으로 제어할까? 그 때 사용한게 python의 threading 라이브러리였다. python으로 gui라는 main을 만들고 각 3개의 process를 thread로 구현하여 시리얼 통신과 안드로이드 통신으로 communication하는 것이었다. 그때도 시스템 콜을 사용했는데, 그땐 왜 그걸 써야하는 지모르고 어떻게든 구현해야겠다는 생각으로 열심히 구글링해서 만들었던 기억이 난다.
크흐, 그때 정말 지금은 글로 배우지만 race condition상황을 직접 겪었다. print()를 통해 시리얼 통신이 동시에 되는 게 보이긴 하는데, 나는 분명 a함수를 앞줄에 써놨는데 b함수가 먼저 print값을 내뱉는 것이다. 이건 뭔가. 어떻게든 해결해야 겠다 하면서 wait()을 이용해서 해결했었는데 어쩜..! 이번 주차 공부를 하면서 더 고급지고 우아한 방법들을 배우면서 이건데 싶었다.
정글은 과제는 주어지지만 공부는 알아서 하는 것이므로, 첫날에는 어떻게 공부할까 탐색을 했었다. 내가 선택한 공부방법은 숭실대 이은지 교수님의 youtube os강의였다.(https://youtu.be/5e3TSIn1pNo) 정글에서 추천해주는 os책 '운영체제 아주쉬운 세가지 이야기'를 교재로 설명을 해주시기도 하고, 엄청 자세한 예시를들어서 설명해주시는데, 추상화된 설명한번, 코드로 한번 설명해주셔서 너무 좋았다.
덕분에 'cpu와 주메모리'같은 물리적 자원 입장에서 프로세스에 대한 설명, 프로세스에 대한 장점과 단점, 그걸 해결하기 위한 것이 thread방식이며 많은 석학들이 이 thread사용시 내가 겪었던 race conditon문제를 해결하기 위해 고안한 방법들을 깊에 이해할 수 있었다.
내가 좀더 모르는 더 큰 세계가 있을 수도 있지만 일단 저번주에 느낀 부분적인 공부라는 막연한 답답함은 해결되었다. 이론 공부를 정리하는 건 시간이 난다면 블로깅하도록 할 예정이다.
이제는 kaist pintOS gitbook을 열심히 탐독하고 PintOS 코드의 세계로 들어갈 예정이다.
다음주에는 thread에 대해 완전히 씹어먹은 내가 있기를 바라며 또 공부하러 가야겠다. 🤓