OS를 만듭시다. 어때요~ 참 쉽죠? (20) - 완결

나빌레라의 이미지

20. 마무리

드디어 대망의 마지막 강좌이다. 한달이 좀 넘는 기간동안 강좌를 연재 하면서 조금씩 시나브로 만들어간 OS 가 어느덧 완성이 되었고, 더불어 강좌도 마지막이 되었다. 시작은 미약하였으나 그 끝은 창대 하리라. 라는 말이 있다. 우리가 만든 나빌눅스가 창대한지는 잘 모르겠으나 어찌 되었던 이 강좌의 목적인 OS를 만드는 데는 성공하였다. 아직 불안정한 부분도 많고 필자가 신경 쓰지 못하고 넘어간 오류상황에 대해 예외처리등도 해야 하고, 미처 구현하지 못한 기능들을 추가 해야 하는 등 나빌눅스를 좀더 OS 답게 만들기 위해서는 해야 할일이 더 많다고 생각한다. 그것은 이제 강좌의 영역이 아니라 나빌눅스의 소스를 공개 하고 오픈 소스 프로젝트로의 영역이라고 생각 한다.

필자는 강좌가 마무리 되고 소스코드가 정리 되는 대로 나빌눅스의 코드를 공개 해서 프로젝트를 개설 할 생각이다. 혹시라도 개발에 참여하고 싶으신 분은 댓글이나 이후 프로젝트페이지가 개설된다면 관심을 가지고 찾아 주시기 바란다.

강좌안에서 여러 부분에 걸쳐 강조 했듯이 나빌눅스는 결코 실용적인 목적에서 개발을 시작한 OS가 아니다. 목적은 오로지 단 하나. OS 개발 방법을 설명하기 위해서 만든 OS이다. 물론 필자가 나빌눅스를 만들면서 서술한 강좌의 방법이 OS 개발의 방법론이라는 말은 아니다. 다만 일반적으로 OS 라는 것은 필자가 쓴 강좌와 비슷한 순서로 이루워 지며 OS의 각 구성요소는 가장 단순화 하여 구현 한다면 필자가 구현 한 방법정도가 될것이라는 필자 나름대로의 판단과 구현에 대한 결과 인 것이다. 필자는 나빌눅스를 만들기 위해 uC/OS-II 와 tinyOS 그리고 리눅스커널에서 많은 힌트를 얻었다. 전체적인 구성은 많은 부분 uC/OS-II 의 그것을 따랐으며 개별적인 구현은 여러 곳곳에서 리눅스커널의 그것을 따랐다. 그래서 어떤 면에서는 약간 억지스럽게 끼워 맞춘듯한 느낌이 드는 구현도 있긴 하지만, 그것 역시 필자 나름대로 이렇게 하는 것이 보다 논리적이고 정책적인 면에서 일관성을 유지 한다고 판단 했기 때문에 그렇게 구현 한 것이다.

다시 말하지만 나빌눅스는 전혀 실용적인 목적을 고려하지 않고 만든 것이기 때문에 멀티플랫폼에 대해서도 전혀 고려 하지 않았다. 나빌눅스를 개발 하기 위해서 타겟 플랫폼을 잡을 때 필자는 복잡한 x86은 일단 배재 하였고, 필자가 어느정도 공부를 하고 있었던 ARM 아키텍쳐 기반의 개발보드를 찾고 있었다. 그러면서 가장 쉽게 구할 수 있는 개발보드에 속하는 편인 ex-x5 보드를 구하게 되었고 일말의 고민도 없이 ex-x5보드에 OS를 구현하기로 결정 하였다. 그러면서 나빌눅스의 컨셉 역시 임베디드OS 로 방향을 잡게 되었고, 그것은 결과적으로 나빌눅스의 전체 설계에 영향을 미쳤다. 최대한 쉽고 빠르고 이해하기 쉽게 각 기능을 구현한다는 컨셉이 잡혔고, 이지보드를 타켓플랫폼으로 잡고 설계하는데 있어서 타겟플랫폼이 이지보드인것은 참으로 많은 도움이 되었다.

특히나 이지보드에 리눅스를 부팅시키기 위해 제공되는 이지부트는 필자가 부트로더를 만드는데 들어가는 비용을 고스란히 감당해 주었다. 사실 OS를 만든다 하면 OS자체보다도 부트로더를 만들기 위해 공부해야 하고 코드를 작성하는데 들어가는 시간과 노력이 더 많다. 즉, 부트로더를 만드는 작업은 생각보다 어렵다. 그래서 대부분의 사람들이 아무리 작고 간단한 임베디드 OS 라도 부트로더를 만들기 위해 스터디를 진행하다가 포기하는 경우가 아주 많다. 또한 시중에 나와 있는 여러 OS 만들기 책을 보아도 앞쪽 대부분이 부트로더에 대한 내용으로 할애 되고, x86 을 타겟으로 한 서적의 경우에는 부트로더 이후 보호모드에 대한 설명이 책의 2/3 정도를 차지 한다. 이와 같은 방법은 독자로 하여금 계속해서 지식의 주입만을 요구할뿐 한참을 그렇게 인내한 선택받은 사람들만이 이후에 나오는 실습을 감당하고 이해 하게 될 뿐이다. 그래서 필자는 과감하게 부트로더 만들기를 아예 하지 않아 버렸다. 그냥 존재하는 이지부트를 그대로 사용하고, 나빌눅스를 구현하는데 필요한 내용만 수정하여 이지부트로 부터 나빌눅스를 부팅시키는 방법을 택했다.

그렇게 부트로더에 대한 부담을 떨쳐 내고 나니 그 이후는 그야말로 따라하기 식으로 조금씩 조금씩 붙여 나가며 OS를 개발해 나갈 수 있게 되었다. 필자는 미리 완성된 OS를 가지고 강좌를 쓴 것이 아니라, 강좌를 써 나가면서 해당 회차분에 구현해야 할 기능을 다시 프로그래밍 해 가면서 실제 강좌의 내용 그대로 필자 역시 작업하면서 나빌눅스를 만들고 강좌를 작성 하였다. 그래서 본강좌를 그대로 따라 오기만 하면 나빌눅스를 만드는 과정을 무리 없이 이해 할 수 있을 것이라 확신한다.

강좌를 마무리 하고 나빌눅스의 코드를 프리즈 하면서 계속 마음에 남는 아쉬움이 있다. 첫번째는 나빌눅스의 타겟플랫폼을 이지보드로 하여서 이지보드를 구할 수 없는 많은 독자들에게 실습의 기회를 제공하지 못했다는 점이다. 그래서 강좌를 쓰는 내내 강좌를 마무리하고 나빌눅스를 좀더 저렴한 ARM7기반 보드나 에뮬레이터 환경 혹은 PC기반으로 포팅하는 걸 써볼까 하는 생각을 가졌으나 필자의 여건상 그리 하지 못해 독자들에게 죄송스러울 따름이다. 두번째는 필자가 MMU를 이해하지 못해 나빌눅스가 mmuless 한 운영체제가 되었다는 것이다. 이점에 대해서는 이후 나빌눅스가 보다 임베디드스러운 ARM7 아키텍쳐나 다른 mmuless 아키텍쳐에 포팅되었을 때는 장점이 될 수도 있겠으나, 나빌눅스에서 이를 사용하지 않음으로 인해 현대 OS에 가장 중요한 개념중 하나인 Virtual Memory 나 Memory Paging 등에 대한 설명을 하지 못하고 넘어가 버렸다는 것이다. 즉 이론은 알고 있으나 구현을 하지 못하는 상황이 되어 버린 것이다. 이 두가지 부분에 대해서는 다른 훌륭한 고수분에게 필자가 가르침을 받던지 아니면 시간을 내어 좀더 공부를 하여 이 부분을 나빌눅스에 반영하여 언제가 다시 본 KLDP 게시판을 통해 독자들에게 알려드리고 싶다.

이렇게 20여 회에 걸친 OS 만들기 강좌를 끝냈다. 지금까지 본 강좌에 포인트를 주시고, 읽어주시고, 댓글을 달아주신 모든 독자분들께 감사의 마음을 전한다.


PS.
강좌를 다 쓰고 나서 몇곳의 출판사와 컨택을 해 본 결과 본 강좌를 책으로 낼 수 있게 되었습니다. 출판사는 인사이트 출판사(http://insightbook.co.kr)입니다. 출판본은 본 강좌를 기반으로 하지만 보다 좋은 퀄리티의 내용을 담고 있을 것입니다. 우선은 좀더 친절한 설명다양한 삽화가 제공될 것이고요. 무엇보다 에뮬레이터 환경에서 나빌눅스를 개발 하는 방법을 설명 할 것입니다. 대략 올해 중순 무렵에는 책이 나올것 같고요. 책이 나오게 되면 많이 많이 사 주세요. (굽신굽신)

이 글은 http://raonlife.com/navilera/blog/view/94/에 동시 연재 됩니다.

댓글

atie의 이미지

박수, 박수! (엉거주춤 일어서서 키보드 쳐요.)
----
I paint objects as I think them, not as I see them.
atie's minipage

----
I paint objects as I think them, not as I see them.
atie's minipage

무한포옹의 이미지

그동안 잘 읽었습니다. :- )
-------------------------------
인생 뭐 있음!

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

처로의 이미지

완결을 축하드립니다.
KLDP를 한 계단 도약시켰다고 해도 좋을 멋진 연재였습니다.

jachin의 이미지

역시나 나빌옹! 책 멋지게 만들어 주시길... +_+
====
( - -)a 이제는 학생으로 가장한 백수가 아닌 진짜 백수가 되어야겠다.

mechatec의 이미지

나빌눅스보단....
나빌로스(NabillOS)나...나비오스(NabiOS)가 더 좋지 않을까요? ㅎㅎ

==================================
나 자신의 위치와
나 자신의 가치는
내가 스스로 만들어 가는 것이다.
help~me~!

==================================================================================
나 자신의 위치와
나 자신의 가치는
내가 스스로 만들어 가는 것이다.
help~me~!

cppig1995의 이미지

"OS를 만듭시다..."의 연재종료를 보니 저도 슬슬 x64 OS 개발 강좌를 올려야 할 것 같습니다.
저도 배우면서 올리는 입장이고 x64 플랫폼 자체가 워낙 복잡해서(핑곕니다. 아시죠? ^^)
예전에 시작도 해봤다가 때려치기도 하고 책임없는 모습 많이 보여드렸는데.
최근에 마음도 잡고 E-Prot(실행 파일 프로텍터입니다)과 함께 다시 x64 OS 개발에 버닝하는 중이라.
4월 중 언젠가 (연재를) 시작해야 할 것 같습니다.

ARM 개발보드가 없는 한낱 중학생 신분인 관계로 나빌레라님의 명강은 눈팅만 했습니다.
그런지라 책 더욱 기대하겠습니다. :)



돼지군 작업실 Revision E: E-Prot, Eightbyte OS, ...
F/OSS를 위해 뭔가 하고 싶습니다. 뭘 하면 좋을까요?

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

jong10의 이미지

책꽂이엔 조만간 책이 하나 더 늘어나겠네요.. :-)

모든 것은 모든것에 잇닿아있다. - 호르헤 루이스 보르헤스

JuEUS-U의 이미지

와~ 그리고 에뮬레이터 버젼도 하신다니~ 반가운 소식이네요~

ydongyol의 이미지

와~ 수고하셨습니다..

강좌가 진행되는동안 나빌룩스OS를 제가 가진 보드에 포팅을 해보고 싶었는데 벌써 끝났군요...

언젠간 그날이 오기를..
--
Linux강국 KOREA
http://ydongyol.tistory.com/

--
Linux강국 KOREA
http://ydongyol.tistory.com/

mechatec의 이미지

보드가 필요하다면..iMX2보드를 10개정도 구해다 드릴수 있지만
보드를 추가적으로 필요하시는 분들에게는 그닥 도움이 되지 않을테니..
가격이 저렴한 ARM7 계열로 하시는 것은 어떤가요?
3만원대부터해서 20만원대 까지 다양한 스펙이 존재하는데요 ㅎㅎ
오픈소스로 진행하기 전에 한번 토론을 했음 좋겠네요 ㅎㅎ
임베디드 개발자로서..저도 참여를 하고 싶네요 ^-^;;

==================================================
나 자신의 위치와
나 자신의 가치는
내가 스스로 만들어 가는 것이다.
help~me~!

==================================================================================
나 자신의 위치와
나 자신의 가치는
내가 스스로 만들어 가는 것이다.
help~me~!

churack_angel의 이미지


고생하셨습니다..^^

------------------------------------------------------
조금씩 한발자국씩... 서두르지 않고 천천히... 그렇게...
- By Fallen - :)
http://churack.tistory.com

------------------------------------------------------
조금씩 한발자국씩... 서두르지 않고 천천히... 그렇게...
- By Fallen - :)
http://churack.tistory.com

서지환의 이미지

삭제방법을 몰라서;;;

서지환의 이미지

허접한 실력으로 끝까지 다보고 이해할 수 있을까하는 의문을 가지며 봤는데

조목조목 설명도 잘해주시고 항상 쉽다고 강조시하는 덕분에 마지막 까지 다보게 되었습니다.

완성된 OS에 추가적인 기능을 몇가지 넣어서 다시 제작해보고 싶네요...

감사합니다 ^^

seotk79의 이미지

매일 아침마다 버스를 타고 다니면서 노트북에서 코딩을 따라적어보고
회사 마치고 밤에는 잠시잠시.. 회사에서 살짝 빌려온(?) ^^;;
타겟보드에 작동을 시켜보고 하고 있습니다.

이제 task 만들기 과정까지 따라하고 있지만...
정말 쉽게 잘되어 있습니다.

수고하셨습니다.

shei77의 이미지

제가 궁금했던 부분을 강좌로 올려주시니

정말 좋네요. 시간이 없어서 다 보질 못했지만

천천히 보겠습니다. 감사합니다. ^^

----------------------------------------------------------
It's feasible to make an inspiration on your own.

----------------------------------------------------------
It's feasible to make an inspiration on your own.

익명 사용자의 이미지

OS를 만듭시다. 어때요~ 참 쉽죠? (1)
http://kldp.org/node/90203

익명 사용자의 이미지

....... 하다를 띄여 쓰셨기에 ㅎㅎㅎ 어느날부턴가 띄여 쓰기가 주의하게되고..... 모르겠고.. ㅋ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.