커널을 파헤치다

커널(Kernel)은 무엇인가?

커널은 운영체제의 핵심적인 부분을 의미합니다.

우리가 가장 많이 사용하는 윈도우 10같은 운영체제에는 무수히 많은 프로그램들이 설치되어 있습니다.
이를 응용 프로그램이라고 지칭합니다.

사실 컴퓨터는 몇 가지 전자기판이 합쳐진 기계에 불과합니다. 이 전자기판위에서 우리가 일상적으로 사용하는 응용 프로그램들이 실행되기 위해서는 생각보다 많은 작업이 이루어져야 합니다.

프로그램은 명령어의 집합이라고 생각할 수 있습니다. “이 상황에서는 이렇게, 저 상황에서는 저렇게 동작하라”라는 명령어를 모아놓은 것이 프로그램인 것입니다. 따라서, 컴퓨터의 핵심 기능은 이 명령어들을 실행하는데 있다고 해도 과언이 아닙니다.
그럼 명령어는 누가 실행하나요?
바로 CPU입니다.

CPU는 산더미처럼 쌓여 있는 프로그램을 자기 작업장으로 가져와서 하나 하나 처리해야 합니다. 이때 프로그램들을 쌓아 놓는 작업장이 바로 메모리입니다. CPU가 일을 효율적으로 처리하기 위해서는 언제, 얼마 동안, 어떤 일을 처리하는 것이 효율적인지 스스로 알 수 없습니다.

이런 일을 처리 해 주는 것이 바로 운영체제의 역할입니다. 비서처럼 스케줄을 정리해서 알려주고 이 시간에는 이 일, 이때에는 저 일을 하라라고 CPU에게 알려줍니다. 이로써 CPU가 효율적으로 많은 일을 처리할 수 있는 것입니다. 이 모든 과정이 굉장히 빨리 처리되기 떄문에 우리가 느끼기에는 많은 일들이 동시에 처리되는 것처럼 보여집니다.

본론으로 돌아와서, 이 운영체제의 핵심 부분을 커널이라고 하는데 커널의 역할을정리하면 다음과 같습니다.

  • 자원관리 → 앞에서 얘기했던 스케줄링 관련된 부분입니다. 가장 효율적인 방향으로 일을 처리할 수 있도록 돕습니다.
  • 추상화 → 응용 프로그램에서 컴퓨터 하드웨어 자원(CPU, Memory등)을 사용해야 정상적으로 실행될 수 있습니다. 이를 위해서는 응용 프로그램에서 컴퓨터 하드웨어 자원을 사용할 수 있는 인터페이스가 필요합니다. 그것을 커널이 제공합니다.
    추상화의 의미를 좀 더 자세히 살펴보겠습니다. 우리가 사용하는 컴퓨터의 종류는 많습니다. 수 많은 그래픽 카드가 있을 수 있습니다. CPU도 인텔이 될 수도 AMD 계열이 될 수도 있습니다. 이들은 만들어진 방법도 다르고 설계도 다릅니다. 서로 다른 회사에서 만들었기 때문입니다.
    하지만 응용 프로그램에서는 이 사실을 알 수 없습니다. 단지 자신이 필요한 것을 달라고 요청만 할 뿐입니다. 그렇기 때문에 커널에서는 응용 프로그램이 요청하면 센스있게 컴퓨터 하드웨어가 무엇인지 파악해서 알맞은 대처를 하는 것입니다. 이렇게 하드웨어 자원이 다양함에도 응용 프로그램에게 같은 서비스를 제공하는 것을 하드웨어 추상화라고 칭합니다. HAL(Hardware Abstraction Layer)라고 불립니다.
  • 보안 → 하드웨어와 프로세스의 보안을 책임집니다.



지금까지 커널이란 무엇인지에 대해서 알아보았습니다. 이러한 커널에는 여러가지 종류가 있는데 대표적인 커널인 단일형 커널과 마이크로 커널에 대해서 이어서 설명하도록 합니다.

단일형 커널(Monolithic Kernel)




운영체제에서는 많은 기능들을 제공합니다.

앞서 말한 응용 프로그램 스케줄링부터 메모리 관리, 네트워크 기능, 파일 입출력, 장치 지원등 전반적인 컴퓨터 시스템을 조율합니다.

단일형 커널은 위의 그림에서 보는 것과 같이 이 모든 기능들이 동일한 메모리 공간에서 실행됩니다. 예전 Unix 계열의 운영체제가 이러한 구조를 가지고 있습니다.

장점

단일형 커널은 모든 기능이 동일한 메모리에 적재되어 처리되기 때문에 컴포넌트간 통신이 편리하다는 장점이 있습니다. 이는 곧 성능 향상으로 이어질 수 있습니다.

단점

단일형 커널의 경우 디바이스 드라이버를 추가 / 삭제 시 커널을 다시 빌드해야 하는 불편함이 있습니다. 또한, 하나의 컴포넌트에 문제가 생기면 다른 컴포넌트도 사용이 불가합니다. 다 같은 메모리 공간에 존재하기 때문입니다. 이는 또한 유지 보수에 있어서도 상당히 불리하다는 말이기도 합니다.

마이크로 커널(Micro Kernel)




마이크로 커널과 단일형 커널을 두고 오랫동안 논쟁이 이어졌습니다.

마이크로 커널은 단일형 커널과 다르게 커널 부분이 훨씬 간결합니다.
프로세스간 통신, 장치 관리, 네트워크 관리, 파일 시스템 관리를 단일형 커널처럼 커널단에서 다 처리하는 것이 아니라 분리했습니다. User 영역에 서버처럼 놓고 통신해서 사용합니다.

장점

커널코드가 훨씬 간결하기 때문에 유지보수에 용이합니다. 또한, 하나의 서버(컴포넌트)에 문제가 생겨도 전체 시스템에 영향을 미치지 않습니다. 그렇기 때문에 실시간성이 중요한 시스템에 적합합니다.

단점

분리가 된 만큼 커뮤니케이션이 늘어납니다. 컴포넌트간 커뮤니케이션이 많아질 수록 당연히 성능은 느려질 수 밖에 없습니다.

댓글()
  1. 2018.02.24 17:26 댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다