2016년 8월 10일 수요일

[Linux] '리눅스 커널 심층 분석' _로버트 러브 | Linux Kernel Development _Rovert Love [황정동 옮김, 에이콘]






어떤 이는 '세상은 문 밖에 있다'고 말한다. 그 말의 의중은 충분히 이해하지만,

나는 세상의 본색이 네트워크에 있다고 생각한다. 얼굴을 마주하고는 말할 수 없는

사람의 본심도 인터넷에서는 자유롭게 나타나고 무엇보다 세계 곳곳의 정보도

접근할 수 있기에. 더구나 자동차가 없는 나에게 문 밖은 우리동네 홈플러스까지가

한계이다.





Windows 운영체제는 그런 문 밖의 세상을 보여주는 소중만 창문이다.

물론 Microsoft사만이 알고 있는 소스코드로 만들어져 판매되는 제품이지만,

'Dream Spark'라는 자사 사이트에서 통합개발환경 'Visual Studio 2015 Community'를

무료로 제공하고, 학교 메일로 학생임을 인증하면 Windows 8.1 OS까지 받을 수 있다.

대학교 같은 경우 Windows OS만 수백 개 단위로 구매하는 등, 그런 확고한

자금 기반이 있기에 자사 개발환경의 세력 확대를 의도한 배려라는 점도 보인다.

그럼에도 프로그래밍을 공부하고픈 학생 입장에서 Microsoft의 배려는 도움이 크다고 본다.





멀티미디어나 인터넷 웹서핑을 즐기는 사용자 입장 아래로,

다시 그걸 가능하게 해주는 동영상 플레이어, 웹브라우저를 만드는

응용프로그램 API 빌드 아래로 가면 커널이라는 뿌리가 있다.

그 커널 단계 위까지는 사실 비슷하다고 보는데, Qt나 MFC나,

분명 끌어다쓰는 API 이름이나 매개변수가 다르고, 개발환경 마련하는 것도

다르지만 결과물은 거의 비슷하다. 서로 장단은 있지만 한쪽이 할 수 있는 역할을

다른 쪽도 충분히 소화할 수 있다. 영상처리 라이브러리 'OpenCV'나

데이터베이스 관리툴 'MariaDB' 등의 도구들도 사용자가 어떤 OS에 있건

자신들의 툴을 끌어다 쓸 수 있도록 고안되어 있다.


그러나 커널 레벨에서는 이야기가 달라진다. Windows는 kernel을

빌드할 수 없다. Windows는 대표적인 상업용 'closed source'이다.

또한 C++, JAVA, Python 등, 자신이 좋아하는 언어로 빌드해서

시스템의 아키텍처와 호환만 되면 구동되는 응용프로그램과 달리

Linux 커널은 역사가 깊은 C언어와 어셈블리어로만 빌드할 수 있다.

Windows는 'open source'인 리눅스 커널을 뿌리로 하는 '우분투(Ubuntu)'

운영체제처럼, 수 GB의 OS를 공짜로 내려받게 하고 기부금을 받거나,

쿠분투, 루분투, 주분투 처럼 변형 배포판이 생기지도 않는다.

그렇게 해서는 'Windows 10 Home'을 172,000원에 팔 수 없다.



- 책에서 소개한 '리눅스 커널 메일링 리스트'에 자신의 이메일을 등록하면
하루 300개 이상의 공지, 논의, 토론이 오가는 열기를 볼 수 있다.


오픈소스 진영은 무료로 운영체제와 프로그램의 소스코드를 공개한 뒤,

사용자들이 직접 공구를 들고 대장간에 모이기를 기대한다.

1,800만 줄이 넘는 Linux 커널은 오픈소스 진영의 가장 뜨거운 용광로이다.

여기서 사용자는 다운로드 받은 Linux 커널 소스코드를 수정해서 다른 개발자들에게

제안할 수 있다. 물론 위 이미지처럼 네트워크 서브시스템을 자신에 입맞에 맞게

바꾸거나, 플래시 메모리 서브시스템의 버그 등을 발견해 패치로 제출한다고 해서

모두가 그대로 커널에 반영되지는 않는다. 리눅스 커널의 아버지, 핀란드인

리누스 베네딕트 토르발스(Linus Benedict Torvalds)가 혼자서는 그 방대한 커널 소스를

감당할 수 없기에, 상위 커널 개발자, 커널의 주요 부분 담당 관리자(maintainer)로

지휘 계통이 나뉘어 개발자들의 리포트를 체크한다. 어떤 경우든 자신의 메일 수신자는

리눅스 커널 메일링 리스트 주소인 'linux-kernel@vger.kernel.org'이기에 자신이

플래시 메모리에 대해 제출한 리포트를 그래픽 디바이스, 네트워크 디바이스에

관심있는 사람들도 볼 수 있다. 그게 담당자의 마음에 드는 리포트였다면

다음 리눅스 커널 배포에 자신의 수정 사항이 반영된다. 이렇게 한국의 철수와

터키의 무하마드 등, 하나의 기업이 아닌 인터넷으로 이어진 세계 곳곳의

사람들이 커널을 제련해가고, 점점 완벽해지는 Linux 커널은 자신을

필요로 하는 OS들의 두뇌이자 심장으로 기능하게 된다.




- 2016년 8월, 현재 최신 안정 버전은 4.7이며, 
이 책처럼 대부분의 커널 교재는 교육에 적합한 2.6버전을 도구로 한다.


'리눅스 커널 심층분석'은 그 1,800만줄의 방대한 커널 소스에 대한 윤곽을 보여준다.

이 책을 시작으로, 자신이 공부하고 싶은 개별 디바이스나 입출력 스케줄러,

파일 시스템 등에 대한 이해는 그에 대한 별도의 책과 인터넷 자료를 찾아 시작하면 된다.

디바이스를 다루는 입장에서 본다면, 우리가 API 단에서 소켓이나 시리얼 통신을 할 때

가장 아래로 내려갔던 'send()'나 'open()' 같은 함수의 실제 구현 코드가 커널 소스코드에

들어가 있다고 하면 대략 어떤 내용물들인지 감이 올 것이다.


책이 제공하는 것은 Linux 커널이 역사적으로 어떻게 지금의 형태를 갖췄는지,

이미 사라진 알고리즘도 얘기하면서 독자에게 감을 심어주려한다. 전체적으로

소스코드를 보며 키보드로 따라가는 것이 아닌 기본개념 이해 위주라서 마음에

들었다. 어차피 소스코드 실습은 자신이 필요로 하는 부분을 따로 공부하면서

진행해야하기에 시작은 기본기 위주로 다져주는 것이 좋았다.

여기서 이만 '리눅스 커널 심층분석'에 대한 독후감을 마칠까한다.





*   *   *   *   *

혹시 임베디드 기사를 준비하는 분이 있다면 Linux 커널에 대한

개념 문제는 이 책으로 대비할 수 있었음을 말씀드리고 싶다.

Linux는 학교 강의에서 API 단까지했는데, 시험은 kernel을 포팅하는

경험적인 부분까지 포함되어 있었다. 따라서 이 책과 함께

'디바이스 드라이버'를 다루는 책을 별도로 한권 읽는다면

실기까지도 대비할 수 있다. 문제는 실기에서 약간 고민?해야하는

문제들이 있는데, 잘 생각 안나더라도 긴 시험시간을 활용해서

기억을 더듬어보면 손이 움직여줄 것이다.

논리회로나 소프트웨어 개발방법론 같은 영역은 출제영역

하나하나를 문서로 따로 모아 정리해두면 쉽고, 특히

정보처리기사의 개념을 그대로 옮겨온 듯 문제성향이 유사했다.

인터넷에서 쉽게 구할 수 있는 정보처리기사 개념요약 PDF를

읽어두면 필기, 실기 모두에서 든든할 것이다.




*   *   *   *   *

오픈소스 교육과정이 잘 마련되어 있는 국내 사이트 'OLC'에서

이 책을 교재로 하는 커널 동영상 강의가 마련되어 있다. 강의내용은

대학과정의 '운영체제' 강의와 많이 겹치지만 큰 도움이 되었다.   [링크]



                                                         

댓글 없음:

댓글 쓰기