커널 산책 - 함수와 시스템 콜 (1)

저에게 리눅스 커널은 애증의 관계가 있습니다. 

배우는 재미와 먹고사는 바탕을 만들어 주었다는 점에서는 사랑하지만

그 수많은 개발자가 만든것을 이해해 가야 하고 

끝없이 변해가는 것을 쫓아 가는 것에는 좌절을 느낍니다. 

그 만큼 커널은 방대하죠..

파고들어도 끝도 없는 밀림이라는 거죠.. 쩝

어찌되었든 오늘도 커널을 산책해 보려 합니다. 

그나마 금주에는 짬짬이 시간이 되어서 이렇게 하루마다 쓰네요

다음주에는? 헤~~ 어렵겠군요..

자 들어 갑니다. 

오늘의 산책로의 이정표에 시스템 콜로 가는 길이라고 써 있네요..

흠...

한번에 이 산책로를 한번에 돌기는 무리 겠군요.

천천히 걸어가 봅시다. 

저는 후배들에게 또는 회사의 직원들에게 프로그램을 작성할때 

왜?

라는 질문을 하라고 합니다. 

현대의 소프트웨어는 정말 오랫동안 만들어져 온 결과물을 사용하는 경우가 많습니다. 

덕분에 초보 프로그래머도 매우 복잡한 프로그램을 쉽게 작성합니다. 

하지만 여기에는 큰 문제가 있는데 

이 복잡한 플랫폼이 처음 부터 그런 모양을 가지고 있지는 않았다는 거죠..

처음에는 필요에 의해서 조그맣게 만들어져 있다가 

하나씩 살을 붙여 나가고 

그 과정중에 설계 오류는 철학들이 바뀌었다는 거죠..

그 결과를 대부분의 프로그래머들이 쉽게 사용할 수 있고요..

그 오랜 결과로 방대한 소스와 구조를 자랑합니다.

이것이 장정이기도 하지만 치명적 단점이기도 합니다. 

처음 쓰는 사람은 그 설계 철학과 과정을 모르기에 주어진 것은 잘 쓸지 모르지만

응용과 창조라는 영역에 대한 것은 감히 엄두를 못 내거든요..

소스를 들여다 보면 이해 못할 처리를 하는 것이 하나 둘씩 발견됩니다. 

그건 분명히 필요해 의해서 만들어진 것임을 알지만 

왜 그런 형태가 되어야 하는지를 진정으로 알기는 어렵습니다. 

커널 소스 곧곧에 그런 자국들이 있고 

읽기 어려운 소스가 되어 버립니다. 

만든 사람은 알지요.. 그 과정을 알고 있기 때문에 ..

가장 좋은 것은 그동안의 버전을 초기 개발부터 쫒아가 보는 것인데..

그게.. 

흠...

쉬울리가 없지요..

어찌되었든 

도대체 왜?

라는 질문은 프로그래머라면 다른 사람들이 만든 소스를 볼 때 꼭 가져야 할 자세입니다.

자 그러면 

시스템 콜이라는 것은 무엇이고 왜 만들었으며 어떻게 구현하고 있을까요?

이것을 알려면 우리는 처음 프로세서가 만들어져서 컴퓨터라는 것을 다루는 펌웨어 시대로 돌아가야 합니다. 

그 출발은 거기서 부터 시작하기 떄문이죠..

물론 지금도 그 옛날 펌웨어 시대에 살아 남은 펌웨어들이 있습니다 .

AVR, PIC 뭐 이런 쪽에는 여전히 펌웨어들이 있습니다. 

그때 부터 진화가 이루어 져 있었고 ...

그 생물들은 지금도 끈질기게 살아 남아 있습니다. 

어? 어느새 50줄이 넘어 갔네요..

너무 많이 걸었어요...

내일 걷죠.. 손가락 아파요...


프로그래머가 이루어 가는 깨달음의 단계

프로그램이 무엇인지 공부하는 단계

프로그램을 이용해서 무언가를 구현할 수 있는 단계

프로그램의 본질을 깨닫는 단계

치킨집을 차린 후 진정한 휴식을 알게 되는 단계