도전! 임베디드 OS 만들기

 도전! 임베디드 OS 만들기 – 이만우(인사이트)

 

 인사이트 출판사에서 “도전! 임베디드 OS 만들기” 라는 책이 출판됬다.

kldp.org 에서 유명하신 나빌레라 님이 만든 나빌눅스 라는 Homeblew 용 OS 인 나빌눅스를 만드는 방법에 대한 책인데……

 

 일단 서평이벤트에 참여하기 위해서, 책을 다 읽긴 했지만, 완전히 정독하지는 못했다.(물론, 서평 이벤트 때문에 읽은 건 절대로 아닙니다.)

 나 역시 CharSyam OS 라는 아주 작은 PC용 Dummy OS를 만든 경험도 있고, 국내에 나온 OS 만들기 관련 책은 전부 -_- 읽어본 경험으로 이 책의 장단점에 대해서 분석해 보려 한다.

 

 기존의 OS 책들과 이 책이 다른 점 부터 먼저 살펴보자.

  • ARM CPU 기반이다.

 기존의 OS 관련 책들은 전부 PC를 기반으로 책이 쓰여졌다. 그리고 이 책은 ARM 이라는 현재

모바일 계열을 평정해 버린 모바일CPU 기반으로 쓰여져 있다.

 OS를 배우는 목적 중 첫번째는 프로세서를 이해하는 것이다. 즉, 이 책을 읽어보면 ARM이라는

프로세서에 대해서 배울 수 있다. 단 ARM의 경우도 버전이 다양하므로, 각 CPU 마다 기능이 틀릴 수 있다.

 NDS 나 GBA, PSP 도 모두 ARM 계열을 이용하므로 개발한 OS를 해당 장비로 포팅할 수 도 있다.

 일명 “명텐도” 가 되어버린(그다지 좋아하지 않는 이름이지만) GP2X Wiz의 경우도 ARM이다.

  • OS에 필요한 알고리즘들에 대한 쉬운 구현으로 되어 있다.

 대부분의 HomeBrew(집에서 취미로 만드는, 장난감의) OS 들의 특징이기도 하지만, 나빌눅스도 상당히

쉬운 형태의 알고리즘을 구현해 놓았다. 라운드 로빈 스케줄러, 단순한 메모리 할당등 하지만, Dummy OS를 만드는 가장 중요한 목적 중에 하나가 실제로 Dummy OS를 만들고 나면 상용 OS를 소스를 볼 때, 더욱 쉽게 접근할 수 가 있다. 나 역시, CharSyam OS( 나빌눅스보다 더 작고 기능이 없는 자작 OS )를 일부부만 구현하고도, 실제로 리눅스 소스나, 이론적 부분에 대해서 쉽게 이해할 수 가 있었다.(물론 상대적이다. 전보다 쉽게 임 T.T)

  • 필요한 환경에 대한 설명이 잘되어있다.

일반적인 개발 환경은 대부분 PC 이므로 ARM 계열의 프로그래밍은 무조건 Cross Compile 을 해야 한다. 일단 쉽게 접근할 수 있는 환경을 갖추는 법부터 잘 설명이 되어 있다. 요새는 필수가 되어버린 에뮬레이터 사용법이라든지, Cross 컴파일 환경 구축 방법이라든지, 이런 부분은 꼭 OS를 만들지는 않지만, 다른 부분에서도 활용될 수 있는 부분이다.

  • 설명이 쉽게 되어 있다.

OS 책은 언제나 쉬우면서도 어렵다. “도전! 임베디드 OS만들기” 라는 책은 설명을 쉽게 풀어쓸려고 한 노력이 보이는 책이다.(단 내용자체의 이해도가 쉬운편은 아니다. OS 라는 넘은 T.T)

 

  이제, 개인적으로 아쉬운 부분들을 나열해 보자. 만구 내 바램이다.

  • 요새 대새는 Multi Core 다

이 책도, ARM 계열의 Multi-Core 계열에 대한 설명까지 추가가되었으면 얼마나 좋았을 까 라는 생각이든다.

 OS를 공부하는 중요한 목적 중 하나가, 시스템의 원리를 이해해야만 응용프로그램도 잘 짤 수 있기 때문이다. 뮤텍스나, 세마포어가 어떻게 동작하는 지 알면, 좀 더, 스레드 세이프한 프로그램을 만들 수 있다.(물론, 기본적인 설계 능력도 중요하겠지만 …)

 그래서 Multi-Core 관련 내용도 있으면 더 좋지 않을까 라는 생각이 개인적으로 들었다.

  • EZ 보드 친화적이다.

내용이 EZ 보드에 올리는 것을 형태로 쓰셨기 때문에(EZ 보드가 없어도 에뮬레이터에서 돌릴 수 는 있다.)

개인적으로 EZ 보드가 없으면 마음이 아프다. T.T(EZ보드가 꼭 받고싶은것도 이런 이유)

  • 쉬운 알고리즘만 사용했다.

저자 분이 OS책을 병용해서 보는 것을 권장하셨는데, 나도 이에 동감이다. 실제로 쉬운 내용으로만 쓰시기 위해서 쉬운 알고리즘을 선택했는데, 실제 상용 OS들은 멀티레벨큐나, 좀 더 복잡한 부분들이 많이 들어간다. 메모리 할당에서, 리눅스의 버디나 슬랩 할당자 같은 부분이 들어가도 좋을 뻔 했다.

 그러나, Dummy는 쉽게 만들 수록 장 땡이다. 한번 만들어보고, 경험이 생긴 후, 좀 더 복잡하게 구현하는 걸 개인적으로 추천하지만, 한번에 많은 걸 얻을 수 있으면 좋겠다라는 바램이 있다.

  • 참고 자료의 미 기재

개인적으로 만드시면서 참고하셨던 사이트나, 서적 등을 매 장마다 추가해주셨다면 좋을 뻔 했다. 항상 책을 보다 보면, 깊은 내용으로 들어가보고 싶은 것이 인지상정이라, 어디서 이런 정보를 추가로 구할 수 있는 가가 들어있으면 참 좋을 뻔 했다.

  • ARM에 대한 정리된 내용이 더 있으면 좋을뻔~~~

 개인적으로 한 챕터 정도는 ARM 구조나 버전 별 차이 같은 부분을 좀 더 정리해 주셨으면 굉장히 좋을 뻔

했다. T.T

  • 경험담과 디버깅 방법이 추가되었다면 좋았을 텐데

 Dummy OS 를 만드는 과정은 솔직히 삽질의 연속이었다. 아마도 나빌눅스 역시 그런 과정을 거치면서 만들어졌을 꺼라고 생각하는 데, OS 개발은 개발자체보다, 디버깅이 더 어려웠던것 같다. 이런 부분에 대해서 좀 더 추가되었다면 좋지 않았을까 싶다.

 

 이렇게 적었지만, ARM 기반으로 나온 국내 최초의 OS 서적이고, 내용이 쉽게 쓰여진 부분에서는 큰 점수를 주고 싶다.

 

 단, 혹시나 이 책을 읽으시는 분은 단지 이 책을 읽으므로써, 바로 OS를 뚝딱 만들 수 있다고 생각하지는 마시길 바란다. OS 개발은 요새는 워낙 자료가 많아져서 많이 쉬워졌지만, 쉬우면서도 어려운 부분이다. 한손에 삽을 나머지 한손에는 “박카스”를 들고 , 나아가야 할지도 모르지만, OS를 만드는 과정은 또한, 즐거움의 연속이라는 걸 말하고 싶다.