/ OS

운영체제와 커널

일반적으로 커널은 운영체제에서 핵심이 되는 부분이라고 정의된다. 핵심이란 무엇일까?

핵심이라 분류하여 나누는 기준은 시스템 자체에 영향을 줄 수 있는 코드의 실행 여부이다. 즉, 보안 취약점이 될 가능성을 가진 코드로 해석할 수도 있다. 구체적으로 메모리와 하드웨어의 보호를 위한 실행 영역의 분리가 커널의 목적 중 하나이다.

메모리 보호가 되지않을 경우 세그멘테이션 오류(segmentation fault), 메모리 침범 등 다양한 문제가 발생할 수 있다. 읽기 전용 메모리 영역에 쓰기를 시도한 경우, 하드웨어에 의해 인지되면 세그멘테이션 오류가 발생하지만 인지가 안됐을 때는 오염이 발생된 채로 프로그램이 계속 수행되어 더욱 심한 부작용을 야기할 수 있다. 가상 주소(virtual address) 를 채용한 운영체제에서는 프로세스 별로 페이지 테이블을 관리하여 원칙적으로는 다른 프로세스의 메모리 영역에 접근할 수 없으나, 취약점이 노출된 경우 임의로 메모리를 갈취하거나 수정할 수도 있게 된다. 따라서 보안을 위해 시스템 자체에 영향을 줄 수 있는 작업들은 커널이라는 분리된 공간에서 특별한 권한을 가지고 실행하도록 설계된다.

메모리 보호를 위해 실제 실행 환경은 사용자 모드와 커널 모드로 구분된다. 커널 모드는 특권 모드(privileged mode) 라고도 한다. 사용자 애플리케이션이 기본적으로 사용자 모드로 실행되고, 애플리케이션에서 권한이 요구되는 커널의 기능이 필요할 때는 시스템 콜 인터페이스를 통해 실행을 요청함으로써 시스템 서비스를 받을 수 있다. 커널 영역은 격리되어 보호받기에 직접 실행할 수 없기 때문이다. 모드의 이름 때문에 커널은 커널 모드에서만 실행된다고 생각될 수 있지만 반드시 그렇지는 않다. 커널은 커널 모드로만 실행되는 것이 아니고, 사용자 모드도 사용자 애플리케이션만 실행하는 모드가 아니다. 커널 설계에 따라 달라진다는 것이 정확한 표현이다. 커널 코드를 커널 모드에서만 실행하는 운영체제도 있고, 커널 코드 중 일부를 사용자 모드로 실행하는 운영체제도 있다. 예를 들어 특정 커널에서 일부 디바이스 드라이버는 사용자 모드에서 실행된다.

커널 설계는 운영체제의 수 만큼 다양하지만 운영체제에서 차지하는 커널의 비중이나 추상화 방법에 따라 분류하여 단일형 커널(monolithic kernel), 마이크로커널(microkernel), 하이브리드 커널(hybrid kernel), 엑소 커널(exokernel) 등으로 부른다. 단일형 커널의 경우 이름 그대로 운영체제의 모든 기능을 단일 메모리 공간 내에서 실행하는 구조로 커널이 운영체제의 100%를 차지한다. 반면 마이크로커널은 커널의 크기를 최소화한 커널이다. 하이브리드 커널은 단일형 커널과 마이크로커널의 장점을 합치려고 시도한 커널이다.

Reference