[OS] 커널의 종류

HenryHong·2022년 7월 27일
0

커널(Kernel)

컴퓨터의 커널을 운영체제의 핵심이다.
운영 체제의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공한다. 시스템의 자원은 제한되어 있지만 프로그램은 많기 때문에
커널은 프로그램의 수행상태인 프로세스 간의 보안 접근을 책임지는 소프트웨어이다. 커널이 이러한 프로세스마다 얼마만큼의 자원을
사용해야 하는 결정해야 하는데 이것을 스케줄링이라고 한다. 

같은 종류의 컴포넌트에 대해 다양한 하드웨어 디자인이 가능하기 때문에 하드웨어 직접 접근하는 것은 매우 복잡할 수 있다. 일반적으로 커널은 운영 체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 하드웨어 추상화를 지원한다.

이러한 하드웨어 추상화는 프로그래머가 하드웨어의 복잡한 접근을 고민할 필요 없이 쉽게 개발하는 것을 돕는다. 하드웨어 추상화 계층(HAL)은 제조사의 장비 명세에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의지한다. 

이렇듯 커널은 운영체제에서 핵심적인 기능을 담당하지만 수행에 필수적인 것만은 아니다. 프로그램은 하드웨어 추상화나 운영체제 지원없이 컴퓨터만으로 읽어 들여져 수행될 수 있기 때문이다. 이러한 방법은 초기 컴퓨터의 운영 방법이었고 다른 프로그램을 실행하고 싶을 때는 컴퓨터는 다시 켜고 다시 읽어 들여야 했다. 그 결과 로더와 디버거 같은 작은 프로그램들이 프로그램을 수행시키는 작업을 해야했고 이것이 초기 운영체제 커널의 기초가 되었다. 이러한 커널은 크게 4가지로 구분할 수가 있다. 

  • 모놀리딕커널(Monolithic Kernel)
  • 마이크로커널(Micro Kernel)
  • 하이브리드커널(Hybrid Kernel)
  • 엑소커널(Exo Kernel)

모놀리딕 커널( 단일형 커널 )

모놀리식 커널은 하드웨어 위에 고수준의 가상 층을 가지고 있다. 고수준의 가상층은 기본 연산 집합과 관리자모드에서 작동하는
프로세스관리, 동시성, 메모리관리 등의 운영체제 서비스 구현을 위한 시스템콜(System Call)로 되어있다.

이러한 연산들을 제공하는 모듈은 같은 주소 공간에서 실행되기 때문에 코드의 집적도는 매우 조밀하고 수정하기 어렵고 한 모듈의 버그는 전체 시스템을 멈추게 할 수도 있다. 그러나 구현이 신뢰할 정도로 완성되면 컴포넌트의 내부 집적이 내부의 시스템 이용을
효과적이게 하여 높은 효율을 보인다. 

모놀리딕 커널의 지지자들은 코드가 부정확한지 그런 코드가 커널에 포함되어 있는지 확인 할 수 있고 그것은 마이크로 커널에 비해 미세한 우위에 있다고 주장한다. 

리눅스, FreeBSD, 솔라리스와 같은 모놀리딕커널은 실행 모듈을 실시간으로 읽어들일 수 있다. 실시간으로 실행 모듈을 읽는 특징은 커널이 허용하는 범위 내에서 손쉽게 확장 가능하도록 커널 공간의 코드의 양을 최소한으로 유지시켜 준다. 

마이크로소프트 윈도우즈 NT(NT, 2000, XP, 2003 등)는 초창기에는 하이브리드커널이었으나 후기 버전은 모놀리딕커널로
변경되었다. 윈도우즈 NT 시리즈는 상위의 서비스들을 NT executive라는 서버로 구현하였다. Win32 특성은 처음에는
사용자 모드의 서버 형태로 구현되었으나, 최근 버전에서는 관리자 주소 영역으로 이동하였다. 다양한 서버들이 로컬 프로시저 콜(LPC;Local Procedure Call)이라 불리는 주소 영역간 매커니즘을 통해 통신하며, 성능 최적화를 위해 공유메모리를 이용한다. 

모놀리딕 커널을 사용한 운영체제는 다음과 같다. 

BSD 커널과 같은 전통적인 유닉스 커널
리눅스 커널
솔라리스 커널
윈도우즈 NT 커널
벨로나2 커널
AIX 커널

마이크로 커널

마이크로 커널은 모놀리딕 커널과 달리 하드웨어 위에 매우 간결한 추상화만을 제공한다.기본 연산 집합과 운영체제 서비스를 구현한
쓰레드 관리, 주소 공간, 프로세스간 통신의 작은 시스템 콜로 구성된다. 일반적으로 커널이 제공하는 네트워킹 같은 다른 서비스들은 사용자 공간 프로그램인 서버로 구현한다. 

운영체제는 서버를 다른 일반적인 프로그램처럼 간단히 시작하고 끌 수 있다. 예를 들어 네트워킹 지원이 필요 없는 작은 시스템에서는
간단히 켜지 않으면 된다. 이론적으로 마이크로커널에서 시스템은 더 안정적이다. 서버가 중단될 때 커널의 충돌이 아니기 때문에 단
하나의 프로그램만 내려버리면 된다. 

일반적으로 마이크로 커널은 전통적인 디자인의 수행을 잘하지 못할수도 있다.
서버와의 자료교환을 위해 커널을 출입하는 문맥 전환 때문이다. 주의 깊은 조율이 오버헤드를 극적으로 줄여줄 것으로 믿어져 왔으나
90년대 중반부터 대부분의 연구자들은 시도를 포기했다. 최근에 새 마이크로 커널은 성능을 최우선으로 설계하며 이 문제를 넓은
부분에서 다루었다. 그러나 현재 운영체제 시장은 자기 몸 사리며 마이크로 커널 설계에 소극적이다. 
마이크로 커널과 마이크로 커널에 기반한 운영체제는 다음과 같다. 

AmigaOS
Amoeba
ChorusOS
EROS
Haiku
K42
LSE/OS
KeyKOS
L4 마이크로커널
Mach
MERT
Minix
MorphOS
NewOS
QNX
Phoenix-RTOS
RadiOS
Spring operationg system
VSTa
Symbian OS

하이브리드 커널 ( 혼합형 커널 )

하이브리드 커널은 본질적으로 마이크로 커널을 따르나, 사용자 레벨에서 수행될 때 느린 코드들을 커널 레벨에서 수행하도록 수정한 것을 말한다. 
이는 다양한 운영체제 개발자들이 마이크로커널 기반의 설계를 받아들이던 시점에 순수한 마이크로커널의 성능상 한계를 극복해보고자 생각해낸 내용이다. 

 예를 들어, 맥 오에스 텐의 커널인 XNU는 Mach 커널 3.0 마이크로 커널에 기반을 두고 있지만, 전통적인 마이크로 커널
설계의 지연 현상을 줄이기 위해 BSD 커널의 일부 코드들을 들여와 동일한 주소 영역에서 실행하고 있다. 
하이브리드 커널로는 다음과 같은 것들도 포함된다. 

ReactOS
BeOS 커널
Netware 커널

하이브리드 커널은 모놀리딕 커널과 마이크로 커널 설계 양쪽의 구조적 개념과 작동방법에 대한 것으로 어떤 것은 사용자 공간에 들어가는 반면 어떤 코드는 성능의 이유로 커널 공간에 포함해야 하는지에 대한 선택의 문제이다. 

엑소 커널

엑소커널은 운영체제 설계에 대한 급진적인 신개념으로 수직 구조의 운영체제이다. 
엑소커널의 구상은 개발자에게 강제적인 추상화를 줄여 하드웨어 추상화에 대한 선택의 폭을 넓혀준다. 엑소커널은 여러 개의 가상화를
실행하는데 각 가상화는 하드웨어 추상화 계층을 통하지 않고 하드웨어 구역에 직접 접근한다. 응용소프트웨어와 추상화는 특정 메모리
주소와 디스크 블록 등을 요구하는데 커널은 단지 자원이 비어있는지만 확인하고 응용소프트웨어에게 접근을 허용한다.

이러한 저수준의 하드웨어 접근은 프로그래머가 개별적인 추상화를 만드는 것을 허용하여 불필요한 부분을 제거할 수 있게 하고 일반적으로 프로그램의 성능을 향상시킨다. 

엑소커널은 추상화를 제공하는 라이브러리 운영체지(libOSes)를 이용한다. 라이브러리 운영체제는 응용소프트웨어 프로그래머에게
고수준, 전통적인 운영체제 추상화, 맞춤 추상화 구현 등의 더 유동적인 방법을 제공한다. 이론적으로 엑소커널의 체제는 하나의
엑소커널 아래 윈도우즈나 유닉스와 같은 다양한 운영체제를 구동할 수 있다. 
엑소커널의 개념은 1994년에 나왔으며 현재 까지 여전히 학계에서 연구 중이며 대규모의 상용 운영체제는 아직 까지 없다.

출처

https://4369.tistory.com/entry/커널의-종류

profile
주니어 백엔드 개발자

0개의 댓글