OS 프레임워크 전체글 보기

Part1. 커널 개발이 힘든 이유

들어가기 전에...

0.시작하면서...

프로그래머라면 누구나 자기가 만든 OS에서 프로그램을 실행시키는 꿈을 꿔본 적 있을 것이다.
OS... 그것은 프로그래머의 로망(??)이라고도 말 할 수 있는데....

문제는 OS 구현이 아니라 커널 개발도 힘들다는 것...
커널 개발에 시도했던 많은 초보 프로그래머들이 격는 수많은 벽....

Assembler, CPU Architecture, Device Control, C Language Skill... 등등...

난관은 아주 많다. 부트로더까지는 어셈블리어를 대충 공부해서 어찌 어찌 해본 사람들이 꽤나 많을 것인데, 보호모드로 진입하여 32bit 커널을 구동시키고 유저레벨과 커널레벨을 구분하여 응용프로그램을 생성하고 이후 기타 등등 까지 해본 사람은 크게 많지 않다고 생각한다. (왜?? 여기서 부터는 CPU Architecture를 이해해야하고 C 언어의 약간 고급 스킬이 필요하기 때문이다. 물론 요즘은 좋은 책이 많이 나와있어서 앵무새 처럼 치기만 하면 되지만, 이 또한 커널 디버깅이 필요한 상황이 닥치면 쉽게 포기하고 만다... ㅡ_ㅡ;;;; )

1. OS 제작... 그 높은 벽

나도 대학교 1학년 말에 아는 것 없이 개발을 시도했다가 어셈블리어의 장벽과 CPU Architecture에 대한 장벽에 부딪혀서 한번 좌절을 했었다. 그뒤 소스가 오픈되어있다는 리눅스를 깔아서 미친듯이 코딩을 하고 커널 코드를 뒤져보고해서 벽을 넘어보려했지만 역시 무리....
결국은 기초가 문제라는 것을 깨닫고 체계적으로 어셈블리어 공부를 시작했고 IBM 호환 PC의 구성에 대해서 공부했다. 그렇게 시간이 흐르고나니 자연스레 부트코드, CPU Architecture에 대해서 이해가 되었다.

이것이 2002년도 말쯤이었던 걸로 기억된다.

그 뒤로 커널을 만들고 유저레벨/커널레벨로 분리하고, 어플리케이션을 위한 시스템 콜(System Call)과 라이브러리(Library)를 만들면서 OS라고 부르기에는 많이 부족하지만 간단한 OS를 만들 수 있었다.
<궁금하신 분들은 여기 참조.. http://kkamagui.egloos.com/3071201 >

2. OS 포팅(Porting)의 어려움

운이 좋아서 ARM 보드(ARM7TMDI 코어 사용)를 구하여 Kernel을 제작할 수 있었는데, 기존 소스를 포팅해보려했지만 워낙 INTEL Architecture에 의존해서 구현했기 때문에 실패하였다. Kernel 코드가 너무 CPU Architecture와 긴밀하게 연결되어 분리가 거의 불가능한 지경이었다. 결국 Kernel을 처음부터 다시 구현하기 시작했는데, OS까지도 못가보고 도중 포기(사실 중단이란 표현이 더 맞을 것 같다. 삽질을 다시 하려니 죽을것 같은 귀차니즘이 몰려와서... ㅡ_ㅡ;;; )

3. OS 제작과 프레임워크(Framework)의 시작

ARM 커널을 마지막으로 3년이라는 시간이 흘렀다. OS 제작은 점점 기억에서 멀어져가던 차에 어느날 갑자기 NDS(Nintendo Dual Screen, 게임기)에 OS를 올려보면 좋겠다는 생각이 들었다. 하지만 다시 처음부터할 생각을 하니 아득하고... 그러다 문득 든 생각이 있었다.

"왜?? OS를 만들려고 시작하면 알아야 하는게 이렇게 많은 걸까?"
"좀 더 쉽게 시작하거나 간단하게 테스트할 수 있는 그런 방법은 없나?"

그래서 생각한 것이 프레임워크(Framework) 였다. CPU Architecture에 관련된 부분이나 Hardware에 관련된 부분은 wrapping하여 CallBack과 API 형태로 만들고 CallBack을 어느정도 구현하고 API를 사용하면 간단히 Kernel을 제작할 수 있는 프레임워크... 당장 시작해야겠다는 생각이 들었다.

이것이 OS 프레임워크 프로젝트의 시작이었다.

+ Recent posts