티스토리 뷰

모놀리틱 커널 vs. 마이크로 커널
현재 우리가 사용하는 운영체제는 여러 부분으로 구성되어 있습니다. 운영체제 자체가 하나의 커다란 SP(Service Provider) 역할을 하고 있지만, 그 중에서도 가장 기본적인 역할과 핵심 기능을 하는 부분을 우리는 커널(kernel)이라고 부릅니다. 운영체제의 많은 기본 컨셉들은 여러 단계와 레이어에 걸쳐 구현되어 있는데, 커널은 하드웨어와 다른 운영체제의 부분 사이에서 중재자 역할을 하는 부분이라고 생각하면 됩니다.
운영체제의 디자인이 다르듯이 커널의 형태도 커널의 디자인 원칙에 따라 다른 형태의 모습을 가지게 됩니다.

커널이 하는 일?
커널이 실제로 하는 일은 하드웨어 자원을 운영체제의 여러 서비스들에게 잘 분배해 줄 수 있도록 하는 일입니다. 운영체제의 서비스들이란 앞에서 말한 것과 같은 여러 종류의 기본 컨셉들을 의미합니다. 커널의 형태에 따라서 모든 기능들이 커널에 들어가 있는 종류의 커널도 있고 많은 기능이 운영체제와 그 밖의 부분으로 빠져나와 있는 형태의 커널도 있습니다.

기능? 디자인?
커널의 기능을 최소화하고, 가장 핵심적인 기능만을 모아 놓은 구조를 마이크로 커널(micro kernel) 구조라고 하고, 커널이 운영체제가 관장하는 모든 서비스들을 가지고 있는 구조를 모놀리틱 커널(monolithic kernel) 구조라고 합니다. 커널의 디자인에서 크게 분류하는 요소 중 하나는 기능적인 측면입니다. 운영체제라는 큰 서비스 제공자가 제공하는 모든 기능을 커널에서 제공할 수도 있고, 경우에 따라서는 운영체제의 요소요소 간 통신에 필요한 중재자 역할만을 제공할 수도 있습니다. 운영체제의 디자인은 <그림 6>에서 보는 바와 같이 운영체제와 커널의 형태마다 다른 형태로 존재합니다.
마이크로 커널의 경우 커널의 컴포넌트 서버를 사용자 모드에서 실행하고, 필수 커널 루틴만을 코어 커널이 가지고 있습니다. 이에 반해 모놀리틱 커널은 여러 운영체제 서브 시스템들이 하나의 큰 커널 안에 뭉뚱그려져 들어 있으며 사용자 운영 프로그램과 함께 동작합니다. 이러한 운영체제의 디자인에 대한 논쟁은 많은 기간동안 이어져 왔고, 아직도 논의 중에 있다고 볼 수 있습니다. 하지만 커널과 운영체제 사이의 관계에 있어서 어떤 디자인을 선택해야 하는가에 대한 논란에 대한 결론은 아직 내려지지 않은 상태입니다.
커널은 왜 작게 만들어야 하는가에 대한 많은 논란들은 소프트웨어 공학에서 출발합니다. 소프트웨어 공학적인 측면에서 마이크로 커널은 중요한 의미를 가집니다. 1960년대 이후 제기되어 온 소프트웨어 위기에 대한 논의는 운영체제 쪽에도 같은 방식의 발상의 전환을 가져오게 되었습니다. 운영체제의 성능이나 기능 구현의 주요한 발전은 하드웨어 발전의 추세에 따라 여러 다양한 형태의 운영체제 개선 방안을 가져왔고, 여기에 새로운 메커니즘과 최적화된 알고리즘들이 등장함에 따라 개선된 운영체제가 등장하게 되었습니다. 운영체제의 개선은 모든 관련된 부분의 수정을 의미합니다. 운영체제 전체가 하나의 큰 서비스를 제공하는 블랙박스라면 실제 개발자의 입장에서는 여러 사람의 노력으로 만들어진 코드 전체를 이해할 수 없는 상황이 발생하게 됩니다.
자신이 개선하는 부분으로 인해 시스템의 어떤 영향을 미치게 될 것인지 정확히 알지 못하는 상황에서 여러 개발자의 산발적인 개선은 운영체제 코드를 이해할 수 없는 수준으로 만들기도 합니다(이러한 예는 최근의 리눅스 커널에서 확인할 수 있습니다).
또한 새로운 운영체제의 등장이나 개선된 운영체제의 등장은 사용자들에게도 그리 달가운 일은 아닙니다. 새로운 운영체제의 등장은 기존의 운영체제에 수정을 요구하는 것을 의미합니다. 컴퓨터 시스템에서 응용 프로그램들에 기본적인 서비스를 제공하는 운영체제는 성능뿐만 아니라 안정성도 큰 평가 요소입니다. 더욱이 응용 프로그램의 개선이 요구되는 경우 응용 프로그램 사용자는 새로운 응용 프로그램을 확보해야 함은 물론이고, 응용 프로그램 개발자 역시 모든 시스템에 대한 확인 작업을 일일이 거쳐야 하는 것을 의미하므로 엄청난 시간과 노력이 필요하게 됩니다.
마이크로 커널은 운영체제의 디자인에 있어서 중요한 의미를 가집니다. 초기의 마이크로 커널들이 앞에서 언급한 이유로 운영체제와 커널 사이의 인터페이스를 구분하고, 커널을 작게 만드는 것이 유리하다는 논의가 진행되면서 커널과 운영체제 서비스들 간의 구분을 점점 크게 하면서 flexibility에 대한 고려도 하게 되었습니다. 커널이 핵심적인 자원 관리와 스케쥴링 역할만을 수행하도록 하면 운영체제는 항상 고정적이 아니라 응용 프로그램이나 사용자의 요구에 맞게 다이내믹한 설정을 가질 수 있도록 설계가 가능하게 됩니다. MIT에서 개발한 대표적인 마이크로 커널인 exokernel의 경우 애플리케이션에 specific한 운영체제 환경을 구축하도록 설계되었습니다. 물론 exokernel은 여러 단점을 가지고 있지만 커널의 역할이 운영체제의 역할과 구분되면서 운영체제가 다양한 원칙들을 가지고 시스템 자원을 활용할 수 있도록 구성할 수 있기 때문입니다.
마이크로 커널은 아직까지 널리 사용이 되지 않고 있습니다. 가장 중요한 이유는 성능상의 문제가 아직 지적되고 있기 때문입니다. 여러 운영체제 서비스들이 서로 통신을 해야 할 경우가 생길 때, 성능 저하가 일어나기 때문입니다. 하지만 많은 연구가 이루어졌으며, L4와 같은 운영체제는 성능 상의 약점을 극복했다는 연구 결과가 나오고 있습니다.

마이크로 커널 기반의 운영체제들
현재까지 제시된 많은 운영체제들은 매머드 형의 모놀리틱 커널을 가지고 있는 경우가 많습니다. 결정적인 이유는 운영체제의 발전사에서 찾을 수 있습니다. 수십 년 간 하드웨어의 발전으로 인한 디자인의 변경과 성능 향상을 위한 많은 노력들은 운영체제에 반영되고 있습니다. 하지만 설계 과정에서부터 마이크로 커널의 개념을 도입한 커널들이 학술적인 연구 이외에도 사용되기 시작하였습니다. 현재는 QNX, MACH, L4 등의 마이크로 커널들이 다양한 확장성과 이식성을 기반으로 등장하였고, 성장에 대한 기대를 한 몸에 받고 있습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함