본문 바로가기
工夫/Linux

커널(kernel)

by 치세 2009. 10. 8.

출처: 위키디피아

커널(kernel)

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

같은 종류의 컴포넌트에 대해 다양한 하드웨어 디자인이 가능하기 때문에 하드웨어에 대한 직접 접근은 매우 복잡할 수 있다. 일반적으로 커널은 운영체제의 복잡한 내부를 감추고 깔끔하고 일관성있는 인터페이스를 하드웨어에 제공하기 위해 하드웨어 추상화를 지원한다. 이러한 하드웨어 추상화는 프로그래머가 하드웨어의 복잡한 접근을 고민할 필요 없이 쉽게 개발하는 것을 돕는다. 하드웨어 추상화 계층(HAL)은 제조사의 자이 명세에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버의 의지한다.

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

커널은 크게 4가지로 구분할 수가 있다.
모놀리식커널(Monolithic Kernel)
마이크로커널(Micro Kernel)
하이브리드커널(Hydrid kernel)
엑소커널(Exo kernel)

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


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

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

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

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

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

모놀리식 커널을 사용한 운영체제
BSD 커널과 같은 전통적인 유닉스 커널, 리눅스 커널, 솔라리스 커널, 윈도우즈 NT 커널, 벨로나2 커널, AIX 커널, AGNIX와 같은 교육용 커널

마이크로 커널

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

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

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

마이크로 커널에 기반한 운영체제
AmigaOS, Amieba, EROS, Haiku, K42, Mach, Minix, NewOS, VSTa, L4 마이크로커널

하이브리드 커널

하이브리드 커널은 본질적으로 마이크로 커널을 따르나, 사용자 레벨에서 수행될 때 느린 코드들을 커널 레벨에서 수행하도록 수정한것을 말한다.

이는 다양한 운영체제 개발자들이 마이크로커널 기반의 설계를 받아들이던 시점에서 순수한 마이크로 커널의 성능상 한계를 극복해보고자 생각해낸 내용이다.

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

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

하이브리드 커널에 기반한 운영체제
ReactOS, BeOS 커널, Netware 커널

엑소커널

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

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

엑소커널은 추상화를 제공하는 라이브러리 운영체제(libOSes)를 이용한다. 라이브러리 운용체제는 응용소스트웨어 프로그래머에게 고주순, 전통적인 운영체제 추상화, 맞춤 추상화 구현등의 더 유동적인 방법을 제공한다. 이론적으로 엑소 커널의 체제는 하나의 엑소커널 아래 윈도우즈나 유닉스와 같은 다양한 운영체제를 구동할 수 있다.

엑소커널의 개념은 1994년에 나왔으며 현재까지 여전히 하계에서 연구중이며 대규모의 사용 운영체제는 없다.

'工夫 > Linux' 카테고리의 다른 글

/etc/fstab  (0) 2009.11.12
vmware에 CentOS 설치 하기  (0) 2009.11.12
리눅스 명령어  (0) 2009.10.08
리눅스 - iptable  (0) 2009.08.10
리눅스 user에 관련된 것을 변경하기  (0) 2009.07.23

댓글