Kernel

May 24, 2019


컴퓨터의 운영체제의 핵심이 되는 컴퓨터 프로그램의 하나, 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공한다.

1. 역할

  • 보안 : 컴퓨터 하드웨어와 프로세스의 보안을 책임진다.
  • 자원 관리 : 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. (스케줄링 - 프로세스에 자원을 할당)
  • 추상화 : 같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 직접적으로 접근하는 것은 매우 복잡한 문제가 될 수 있다. 때문에 일반적으로 커널은 운영체제의 복잡한 내부를 캡슐화하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들로 구현된다. > 이러한 하드웨어 추상화는 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는 것을 돕는다. (하드웨어 추상화 계층(Hardware Abstraction Layer)은 제조사의 장비 규격에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의존한다.)

2. 종류

(1) 단일형 커널 (Monolithic Kernel)

커널의 다양한 서비스 및 높은 수준의 하드웨어 추상화를 하나의 덩어리(주소 공간)로 묶은 것, 운영체제 개발자 입장에서 상대적으로 유지 보수가 어렵지만 성능이 좋다.

Monolithic Kernel

하드웨어 위에 높은 수준의 가상 계층을 정의한다.

  • 높은 수준의 가상 계층
    • 기본 연산 집합
    • 관리자 모드(커널 모드를 의미하는 것 같다.)에 작동하는 모듈 : 프로세스 관리, 동시성, 메모리 관리 등의 운영체제 서비스를 구현하기 위한 시스템 콜

(단점)

  • 위 연산들을 제공하는 모든 모듈이 전체로부터 분리되어 있더라도 모든 모듈이 같은 주소 공간에서 실행되기 때문에 코드의 집적도는 매우 조밀하여 수정하기 어렵고 한 모듈의 버그는 시스템 전반을 멈추게 할 수 있다.

(장점)

  • 그러나 구현이 신뢰할 수 있을 정도로 완성되면 구성 요소의 내부 집적이 내부의 시스템 이용을 효과적이게 하여 좋은 단일형 커널은 높은 효율을 보인다.

Linux, FreeBSD, 솔라리스와 같은 최신 단일형 커널은 실행 모듈을 실시간으로 읽어들일 수 있다. 실시간으로 실행 모듈을 읽어들임으로써, 커널이 허용하는 범위 내에서 손쉽게 확장할 수 있게 커널 공간의 코드 양을 최소한으로 유지시킬 수 있다.

(2) 마이크로 커널 (Micro Kernel)

하드웨어 추상화에 대한 간결한 작은 집합을 제공하고 더 많은 기능은 서버를 통해 제공한다.

Micro Kernel

하드웨어 위에 매우 간결한 추상화를 정의한다. 일반적으로 커널이 제공하는 네트워킹과 같은 다른 서비스들은 사용자 공간 프로그램인 서버로 구현된다. 운영체제는 서버를 다른 일반적인 프로그램처럼 간단히 시작하고 끌 수 있다. (네트워킹 지원이 필요없는 작은 시스템에서는 서버를 끄면 된다. 기존의 단일형 커널 같은 경우에는 재컴파일이 필요했고 일반 사용자의 능력 밖의 일이다.)

  • 매우 간결한 추상화
    • 기본 연산 집합
    • 운영체제 서비스를 구현한 스레드 관리, 주소 공간, 프로세스 간 통신의 작은 시스템 콜

(장점)

  • 이론적으로, 서버가 중단될 때, 커널의 충돌이 아니기 때문에 단 하나의 프로그램만 종료하면 되기 때문에 마이크로 커널에서 시스템은 더 안정적이다.

(단점)

  • 그러나 서버가 수행에 실패한 후 시스템 상태를 잃어버릴 경우, 응용 프로그램이 계속 수행되는 것은 그 응용 프로그램이 복사된 다른 서버를 이용하게 되더라도 불안정하다. 다시 말해, 파일과 같은 시스템 객체는 다른 서버의 인스턴스를 사용하게 됐을 경우, 일관성과 신뢰성에 문제가 생길 수 있다. 때문에 서버 간의 하나의 서버를 다시 시작할 때, 중요한 상태를 보존하기 위해 트랜잭션, 복제, 대조점의 데이터베이스 기술을 통해 기록할 정보들은 미리 보관해 두어야 한다.
  • 응용 프로그램과 서버 간의 데이터 교환을 위해 커널을 출입하는 문맥 교환 때문에 단일형 커널보다 더 많은 오버헤드가 발생한다.

(3) 혼합형 커널 (Hybrid Kernel)

성능 향상을 위해 추가적인 코드를 커널 공간에 넣은 점으 ㄹ제외하면 순수 마이크로 커널과 비슷하다. 수정 마이크로 커널이라고 한다.

Hybrid Kernel

본질적으로 마이크로 커널을 따르지만, 일부 커널의 비본질적 기능이더라도 사용자 레벨에서 수행될 때, 성능 상 느린 코드들을 커널 레벨에서 수행하도록 수정한 것을 말한다. 다양한 운영체제 개발자들이 마이크로 커널 기반의 설계를 받아들이던 때, 순수한 마이크로 커널의 성능 상의 한계를 인식하고 타협한 결과가 혼합형 커널이라 할 수 있다. 예를 들어, Mac OS X의 커널인 XNU는 마이크로 커널인 Mach 커널 3.0에 기반을 두고 있지만, 전통적인 마이크로 커널 설계의 지연 현상을 줄이기 위해 BSD 커널의 일부 코드들을 들여와 동일한 주소 영역에서 실행하고 있다.

(단점)

  • 운영체제 개발자에게 단일형 커널과 마이크로 커널 설계의 구조적 개념과 작동 방법에 대한 충분한 이해가 필요하며, 이에 더해 코드들이 사용자 공간에 들어가야 할지, 커널 공간에 포함해야 할지 고심하여 결정해야 한다.

(4) 나노 커널 (Nano Kernel)

커널의 설계를 최소화하여 실질적으로 모든 서비스를 소프트웨어에서 책임진다.

(5) 엑소 커널 (Exo Kernel)

낮은 수준의 하드웨어 접근을 위한 최소한의 추상화를 제공한다. 커널이 아닌 라이브러리가 단일형 커널 수준의 추상을 제공한다.

Exo Kernel

운영체제 설계에 대한 급진적인 신개념으로 말단 이론을 따르는 수직 구조의 운영체제 개발자에게 강제적인 추상화를 줄여 하드웨어 추상화에 대해 선택지를 다양하게 하는 것이 엑소 커널의 목적 보호를 보장하는 기능과 자원을 분배하는 기능으로 규모가 매우 작아 편리함보다는 단순함을 제공