멀티프로그래밍 위키로 바로가기 → http://www.devnote.net/wiki
오늘 "중요 (Important)"로 분류된 윈도우즈 업데이트 중 하나를 살펴 본 결과 아래와 같은 내용이었습니다. 아래 5개의 단어를 윈도우즈 철자 검사기 사전에 추가하는 것인데, 사람 이름이거나 인터넷 싸이트 이름들 입니다. 그 중 민주당 대선 후보인 "Obama"의 이름이 있는 것도 흥미롭습니다.

The words "Friendster," "Klum," "Nazr," "Obama," and "Racicot" are not recognized when you check the spelling in Windows Vista and in Windows Server 2008

http://support.microsoft.com/kb/955020


그런데, 이 업데이트가 "중요"로 분류된 것은 좀 이해할 수 없습니다. 게다가 이 업데이트는 약 50MB의 디스크 영역를 차지한다고 하며 설치후에 시스템 리부팅도 필요합니다.

이 업데이트는 모든 언어버전의 윈도우즈에 적용되는 것 같습니다. 따라서 마이크로소프트의 주장대로 전세계에 모두 1억개의 윈도우즈 비스타가 팔렸고, 모든 비스타 사용자가 이 업데이트를 받는다면, "50 MB * 1억 = 4.8 PT(Peta Bytes)"라는 천문학적인 디스크 용량이 소모됩니다. 물론 요즘 1GB 디스크 용량에 1$도 안된다고 하지만, 그래도 약 480만 달러 즉 58억원 가량의 디스크 비용이 소요되는 것 입니다. 그러니까 단지 5개의 단어를 사전에 추가하기 위해서 말이지요.

만약 웹기반의 클라이언트 서버방식의 철자검사 시스템을 사용한다면 이러한 사전 업데이트는, 클라이언트에 영향을 미치지 않고 언제라도 진행될 수 있었을 것입니다. 물론 이 방식은 철자 검사를 하려면, 인터넷 연결이 필요합니다.

마이크로소프트의 단어사전은 일종의 Suffix Tree인 Trie 구조를 사용하고 있어, 검색속도가 매우 빠르며 사전 자체 파일 싸이즈도 크게 줄어들어 메모리에 로드될 수 있을 정도이나, 단어 하나의 업데이트라 해도 사전 전체를 다시 빌드해야하는 단점을 지니고 있습니다. (부연설명하면 하나의 단어 업데이트라도 최종 빌드되는 사전 데이터 중 다른 여러 단어 데이터에 영향을 미치게 된다는 것 입니다)

크리에이티브 커먼즈 라이센스
Creative Commons License

어제 얼마전 발표된 Microsoft Parallel Extensions to .NET Framework 3.5 2007 CTP 설치하여 살펴보았습니다. MS Research와 공동 개발하고 있다는 이 Parallel FX 라이브러리는 .NET에서 비교적 쉽게 병렬처리를 가능하게 해주고 있습니다. 자세한 내용은 아래 MSDN 기사에서 링크에서 찾아볼 수 있습니다.


그런데, 이 Parallel FX Library가 어떻게 구현되었을까하는 궁금증을 가지고 있던 차에, .NET 바이너리를 디컴파일하여 소스를 보여주는 .NET Reflector 덕분에 내부를 들여다 볼 수 있었습니다.

간단히 말해 기본 구조는 MIT 대학에서 개발되었던 Cilk 에서 많은 부분을 빌어 왔다는 것을 알 수 있었습니다. Cilk는 1990년대 중반부터 개발되어 온 것이며 Work Stealing이라는 작업 스케줄링 개념을 만들어 내었습니다. .NET PFX도 Work Stealing을 그대로 적용시키고 있습니다.

PFX에서 핵심적으로 사용되는 자료구조 중에 "ConcurrentStack", "ConcurrentDeque (TakeQueue)", "ConcurrentListBag" 가 사용되고 있는데 이들은 대부분의 경우 Lock-free로 동작하도록 되어있습니다. .NET Reflector를 이용하면 소스를 살펴 볼 수 있습니다. 이들도 MS가 새로운 알고리즘을 개발한 것은 아니고, 모두 기존에 발표되었던 논문에 바탕하여 .NET에 적용한 것입니다.

하지만, NET의 Garbage Collector의 도움으로 이러한 Lock-Free 자료구조 제작이 C/C++에 비해 손쉽게 되었습니다. 다시 말해 Lock-Free의 난제들 중의 ABA문제와 메모리 액세스 문제(다른 스레드가 해제한 메모리를 참조하려고할 때 메모리 액세스 오류의 가능성이 있음)가 Garbage Collector로 인해 자동으로 제거되었다는 것입니다.

좀 극단적으로 말하면 PFX는 Cilk의 .NET 버전이라고 할 수 있습니다. 그만큼 Cilk에서 많은 부분을 빌어왔지만, 그다지 혁신적인 내용이 추가되지는 않았다는 것 입니다.

Java를 이용한 JCilk가 이미 발표된 지금, 늦은 감이 있으나 MS는 PFX 라이브러리로 .NET에서 병렬프로그래밍을 손쉽게 제공하려고 노력하고 있음을 알 수 있습니다. 하지만, 이것이 성공할지는 조금 더 지켜봐야 할 것 같습니다.

크리에이티브 커먼즈 라이센스
Creative Commons License

마이크로소프트는 최근에 Parallel Computing Developer Center 를 오픈하였습니다. 또, MS는 .NET에 병렬처리를 위한 기능을 추가하기 위한 노력과 병렬처리가 가능한 PLINQ도 개발하고 있습니다. .NET PFX 팀 블로그 에도 좋은 자료들이 많이 있어 소개합니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

개발자란 직업이 나이 들어서 할 수 있는 것인가 하는 질문을 간혹 듣거나 보게 됩니다. 특히 우리 나라에서 나이든 개발자를 찾기는 쉽지 않습니다..

저에게 나이든 개발자 하면 떠오르는 한 사람은 Dave Cutler 입니다. 윈도우즈 커널을 설계한 사람으로 잘 알려져 있는 이 사람은 올해로 만 56세가 되었겠습니다. 이 사람은 보잘것 없는 작은 대학을 졸업하고도 일찍이 운영체제 프로그래머의 길을 택해 크게 성공한 사람입니다. 약 5년전 Dave로부터 짧은 메일 하나를 받았었는데, 그 당시 그는 윈도우즈를 64비트 AMD 버전으로 포팅하는  작업을 하고 있었습니다. 그는 인텔 특히 IA-32 CPU를 아주 싫어하는 것으로 알려져 있습니다. 그래서 처음 NT를 설계할 때 부터 Alpha, PowerPC 등의 인텔이 아닌 CPU 버전을 만들기도 했습니다. AMD64로 포팅하는 작업을 앞장서서 스스로 한 이유도 같은 맥락일 것입니다. 그런데, 아이러니 하게도 Dave는 DEC에서 일할 때 VMS 운영체제를 인텔 IA-32로 포팅하는 프로젝트인 Emerald를 진행하다가, 회사가 그 프로젝트를 취소하자, 마이크로소프트로 옮긴 것으로 알려져 있기도 합니다. 또, 그 당시 Emerald 프로젝트에 사용된 기본 설계가 그대로 Windows NT에 적용되었다고 합니다

단편적인 이야기들을 정리하면, 이 사람은 지금 까지 모든 인생을 소프트웨어 개발에 엄청난 노력을 쏟아 붓고 있는 사람입니다.  이 사람과 직접 대화를 해보지는 못했으나, 이 사람이 작성한 코드를 본 적은 있습니다. 현재 Windows에 있는 InterLocked로 시작하는 Lock-free API 중의 대부분은 Dave가 제작한 것입니다.

물론 Dave는  컴퓨터 운영체제가 처음 개발될 당시 그 분야에 뛰어들어 많은 경험과 지식을 쌓은 것이 현재까지 큰 도움을 주고 있는 것 같습니다만, 이미 오래 전부터 스톡옵션으로 억만장자가 되었음에도 여전히 소프트웨어 개발에 몰두하는 것은, 그가 얼마나 소프트웨어에 애착을 가지고 있는지 보여주는 것입니다. (많은 초창기 NT 개발자들은 스톡옵션으로 부자가 되어 이미 은퇴하였습니다)

MS의 윈도우즈 팀에서도 이 사람은 좀 특이하여 자기 아래 직원을 데리고 있지 않았습니다. 아마도 매니지먼트를 하기 싫어하는 사람이고, 그러한 일에 시간을 뺏기기를 원하지 않았을 것 입니다. 그리고, 추정되는 바로는 날카롭고 꼼꼼하며 매우 냉소적인 성격으로, 아마도 그 밑에서 일하고 싶은 사람은 별로 없었을지도 모를 일이지요.

우리나라의 현실로 돌아와 보면, 아직 Dave와 같이 존경 받을 만한 나이든 개발자가 없다는 것이지요.  아마 가장 큰 이유는 우리나라 소프트웨어 개발의 역사가 더 짧기 때문일 것 입니다. 미국에서도 물론 나이들어 개발자로 계속 남는 사람은 그리 많지 않습니다만, 우리나라의 경우 나이가 들면, "x장" 이라는 감투하나 쓰고, 아랫 사람들 거느리고 앉아 명령을 내리는 것이 당연시되고 출세한 것으로 인정되는 사회 분위기에서는 새로운 기술을 매일 갈고 닦아야만 하는 개발자 보다는 관리자의 길을 선택하는 것이 너무도 쉽기 때문은 아닐까 생각합니다.

진정한 장인정신을 가진 개발자들이 성공하고 인정받는 사회 분위기가 정착되어야만 지금의 이공계 위기라는 것도 해결되지 않을까 생각해 봅니다.

크리에이티브 커먼즈 라이센스
Creative Commons License