ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [정보보안기사] 운영체제 이해 및 관리(2) - 커널 개념 및 종류
    휴지통 2019. 7. 12. 15:46

    운영체제 구조의 핵심은 바로 커널이다.

    문제에도 자주 출제되는 개념으로 커널에 대한 이해를 충분히 해야된다.

    커널은 시스템의 모든것을 제어하는 저택의 집사같은 존재이다.

    하드웨어와 직접적인 상호작동을 통하여 프로그램에게 일관적인 서비스를 제공한다

    핵심 관리는 프로세스와 파일의 관리로 주기억장치에 상주하여 프로세스 스케줄링, 기억장치 관리, 파일 시스템 관리, 운영체제의 고유 기능들을 제공한다.

     

    커널의 종류는 위키백과를 참조하였다.

    단일형 커널(monolithic kernel) - 커널의 다양한 서비스 및 높은 수준의 하드웨어 추상화를 하나의 덩어리(주소 공간)로 묶은 것이다. 운영 체제 개발자 입장에서 유지 보수가 일반적으로 더 어려우나 성능이 좋다.

    마이크로커널(microkernel) - 하드웨어 추상화에 대한 간결한 작은 집합을 제공하고 더 많은 기능은 서버라고 불리는 응용 소프트웨어를 통해 제공한다.

    혼합형 커널(hybrid kernel) - 성능 향상을 위해 추가적인 코드를 커널 공간에 넣은 점을 제외하면 많은 부분은 순수 마이크로커널과 비슷하다. 수정 마이크로커널이라고도 한다.

    나노커널(nanokernel) - 실질적으로 모든 서비스를 책임진다.

    엑소커널(exokernel) - 낮은 수준의 하드웨어 접근을 위한 최소한의 추상화를 제공한다. 전형적으로 엑소커널 시스템에서는 커널이 아닌 라이브러리가 단일형 커널 수준의 추상을 제공한다.

    커널의 종류는 시험 보기로도 종종 출제되고 있으니 잘 알아둬야한다.

     

    단일형커널(Monolithic kernel)

    우리가 알고 있는 대부분의 리눅스체제의 OS는 단일형 커널(Monolithic Kernel)을 사용하며 단어에 걸맞게 커널 하나로 통합적인 관리를 진행한다.

    시스템 관리에 필요한 모든 기능이 커널 레벨에서 동작해서 입출력 기능, 네트워크 기능, 장치 지원 등의 운영 체제의 일반적인 기능들을 커널과 동일한 메모리 공간에 두고 실행하기 때문에 유지 보수가 어렵지만 성능이 우수하다.

    단점이 있다면 커널에 필요한 기능을 추가하면 전체 커널코드를 재컴파일하고 재부팅을 통해서 테스트해야 한다는 점이다.

     

    위키백과 설명을 첨가하겠다.

    """

    단일형 커널은 하드웨어 위에 높은 수준의 가상 계층을 정의한다. 높은 수준의 가상 계층은 기본 연산 집합과 관리자 모드에 작동하는 모듈인 프로세스 관리, 동시성, 메모리 관리 등의 운영 체제 서비스를 구현하기 위한 시스템 콜으로 되어 있다.

    이 연산들을 제공하는 모든 모듈이 전체로부터 분리되어 있더라도 모든 모듈이 같은 주소 공간에서 실행되기 때문에 코드의 집적도는 매우 조밀하며 수정하기 어렵고 한 모듈의 버그는 시스템 전반을 멈추게 할 수 있다. 그러나 구현이 신뢰할 수 있을 정도로 완성되면 구성 요소의 내부 집적이 내부의 시스템 이용을 효과적이게 하여 좋은 단일형 커널은 높은 효율을 보인다. 단일형 커널의 지지자들은 코드의 정확성 여부와 그런 코드(부정확한 코드)가 커널에 포함되었는지를 확인할 수 있고 그것은 마이크로커널에 비해 조금 더 우위에 있다고 주장한다.

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

    마이크로소프트 윈도 NT 제품군(NT, 2000, XP, 2003, 비스타,7,8,8.1,10)은 처음에는 혼합형 커널이었으나 나중에 나온 것들은 단일형 커널로 바뀌었다. 윈도 NT 시리즈는 상위의 서비스들을 NT executive이라는 서버로 구현하였다. Win32 특성은 처음에는 사용자 모드의 서버 형태로 구현되었으나, 최근 버전에서는 관리자 주소 영역으로 이동하였다. 다양한 서버들이 로컬 프로시저 콜(LPC: Local Procedure Call)이라 불리는 주소 영역간 매커니즘을 통해 통신하며, 성능을 최적화하기 위해 공유 메모리를 이용한다.

    """

    단일형 커널을 사용하는 os : 리눅스, 유닉스, 윈도우NT ...

     

     

    마이크로커널(Microkernel)

     

    하... 잠시 데이터가 날라가서 깊은 한숨을 쉬고 다시 작성하겠다.

     

     

    마이크로커널은 모놀릭과는 대조되는 개념으로 아주 기본이 되는 것들만 커널에서 작동하여 프로세스간의 통신, 메모리 관리, CPU 스케쥴링 등의 기능이 존재하고 네트워크 기능 같은 것들은 커널에서 처리하지 않고 서버에서 처리를 하는 방식을 사용하고있다.

    그래서 마이크로 커널은 커널 + 서버 + 소프트웨어(응용프로그램)이 유기적으로 연결되어 있는 구조로 볼 수 있으며 커널 자체가 모놀릭커널보다 간소화 되어서 모놀릭의 단점을 보안할 수 있다.

    커널이 이렇게 간소화가 되다보니 소스코드의 크기는 약 만줄 이하로 만약 기능 수정을 하려한다면 해당 기능이 잇는 프로세스만 재컴파일하면된다는 장점이 있다.

     

    마찬가지로 위키백과 설명도 첨가하겠다.

    """

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

    운영 체제는 서버를 다른 일반적인 프로그램처럼 간단히 시작하고 끌 수 있다. 이를테면 네트워킹 지원이 필요 없는 작은 시스템에서는 간단히 서버를 끄면 된다. 이 경우 전통적인 시스템에서는 재컴파일이 필요했고 일반 사용자의 능력 밖의 일이다. 이론적으로 마이크로커널에서 시스템은 더 안정적이다. 서버가 중단될 때 커널의 충돌이 아니기 때문에 단 하나의 프로그램만 내려버리면 된다.

    그러나 서버가 실패한 후 시스템 상태도 잃어버릴 경우 응용 프로그램이 계속 수행되는 것은 그 응용 프로그램이 막 복사된 다른 서버를 이용하게 되더라도 보통은 매우 힘들다. 예를 들어 TCP/IP 연결을 요구하는 (이론적인) 서버가 다시 시작되면 응용 소프트웨어는 연결이 "끊어졌습니다."라고 말하고 서버의 새 인스턴스를 찾아서 다시 연결한다. 그러나 파일과 같은 다른 시스템 객체는 이렇게 편리한 의미론이 없다. 이러한 편리가 믿음직스럽지 못하고 마음대로 이용할 수 없다. 기록할 정보들은 모두 미리 보관해 두어야 한다. 서버 간의 하나의 서버를 다시 시작할 때 중요 상태를 보호하기 위해 트랜잭션복제대조점의 데이터베이스 기술이 요구된다.

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

    """

     

    혼합형 커널(Hybridkernel)

    혼합형 커널은 말그대로 마이크로커널을 변형시킨것으로 서버가 커널 속에 포함된 구조이다.

    윈도우 시스템에서 이러한 형태의 커널을 사용하기도 했었다.

    사용자 레벨에서 실행할때 성능상 처리가 느린 코드들을 사용자레벨이 아닌 커널 레벨에서 실행 할 수 있도록 수정한 커널이다.

     

     

    나노커널과 엑소커널은 여기선 다루지 않고 넘어가도록 하겠다.

     

    그다음으로 볼 것은 모듈이다.

    운영체제에서 모듈을 이용한 것을 적재가능 커널 모듈(Loadable Kernel Modules)이라하며 핵심 기능을 하는 커널을 제외하곤 나머지를 모듈로 구현하여 사용하는 방식이다.

    스케쥴링 클래스 / 파일 시스템 / 적재가능 시스템 호출 / 실행 파일 형식 / 장치 및 버스 드라이버

    등등 모듈로 사용하여서 동적인 구조를 구현하여 동적링크를 통해서 새로운 기능을 커널에 직접 추가하기보다 이렇게 모듈에 추가 수정하는 방식을 말한다.

    윈도우 등이 이런 모듈 기능과 유사한 면이 많이 존재한다.

     

    그다음으로 알아볼 개념은 계층적 구조이다.

    계층적 접근(Layerd Approach)는 시험에도 자주 등장하는 개념으로 5개의 계층으로 운영체제를 구분한다.

     

    우선 기출문제를 살펴보자.

    ex)

    Q. 운영체제의 구조를 컴퓨터 시스템의 자원관리 계층에 따라 나누면 일반적으로 5가지 기능으로 분류할 수 있다. 다음 중 이에 속하지 않는 것은?

    A.

    1. 메모리 관리

    2. 프로세스 관리

    3. 주변장치 관리

    4. 사용자 관리

    답은 4번이다.

     

    메모리 관리는 2계층, 프로세스 관리는 3계층, 주변 장치 관리는 4계층이며 사용자 관리는 운영체제 단을 벗어난 관리이다.

     

    문제는 이쯤 다루고 우선 1 ~ 5계층을 한눈에 정리해 보자.

     

    1 계층 - 프로세서 관리 : 동기화와 프로세서의 스케줄링을 위한 프로세서 관리를 담당한다.

    2 계층 - 기억장치 관리 : 메모리 할당과 회수기능을 실행하는 기억장치 관리를 담당한다.

    3 계층 - 프로세스 관리 : 프로세스의 생성, 제거, 츠로세스 간의 메세지 전달, 프로세스의 시작과 정지를 담당한다.

    4 계층 - 주변장치 관리 : 주변장치의 상태를 파악하고 관리하며 입출력장치의 스케줄링을 하고 입축력의 전반적인 사항을 지시한다.

    5 계층 - 파일과 데이터 관리 : 파일의 생성, 제거, open, close, 유지를 담당하고 관리한다.

     

     

    이렇게 운영체제 구조의 종류를 대부분 다 알아보았다.

    댓글

Designed by Tistory.