커널

커널이 응용 소프트웨어를 컴퓨터 하드웨어에 연결하고 있다.
  • kernel

커널이란 하드웨어소프트웨어 간을 이어주는 역할을 하는, 대다수의 운영 체제의 중핵을 이루는 부분이다.[1]

커널의 주된 임무는 위에서 언급한 대로 CPU, RAM, 입출력 (Input /Output, I/O) 등의 하드웨어 추상화로, 커널을 통함으로서 애플리케이션은 하드웨어의 종류나 구성에 구속되지 않고 다양한 시스템 상에서 가동할 수 있다. 또 다른 커널의 주된 임무로는 애플리케이션의 편의를 위해 프로세스의 추상화 및 프로세스 간의 통신, 시스템 콜 등의 기능을 제공하는 것을 들 수 있다.구글이나 네이버가 있기에 인터넷 상의 여기저기에 흩어진 정보를 손쉽게 찾아 사용할 수 있는 거랑 비슷하다고 생각하면 편하다.

커널의 주된 기능으로는 다음을 들 수 있다.

  • 프로세스 관리
    프로세스는 응용 프로그램이 액세스 할 메모리 영역을 정의한다. 커널에 있어서 프로세스 관리란, 응용 프로그램이 사용할 어드레스 공간을 할당하고, 해당 응용 프로그램의 코드를 지정된 어드레스 공간에 로드하며, 로드된 코드에 대한 콜 스택을 설정한 다음 해당 프로그램의 적절한 위치에 제어를 넘겨주기까지의 처리 과정을 뜻한다.
    멀티 태스킹이 가능한 커널의 경우, 위의 관리에 더해 각 프로세스가 처리될 순서를 결정하고 처리의 타이밍을 지정해, 마치 복수의 프로세스가 동시에 작동하는 것처럼 보이도록 관리한다. 이러한 관리를 스케줄링이라고 부른다.
    또한 복수의 프로세스가 서로간에 데이터를 주고받을 수 있도록 프로세스 통신을 제어하는 것 역시 프로세스 관리의 영역에 속한다.
  • 메모리 관리
    커널은 시스템의 모든 메모리[2]를 사용하는 것이 가능한 반면, 유저 프로그램은 보안상의 이유 등으로 인해 메모리 사용이 제한된다. 그런 탓에 커널은 한정된 메모리를 각 프로그램에 할당, 시스템의 안정성을 확보하는 동시에 응용 프로그램이 원활하게 작동하도록 한다.
    CPU에 가까운 메모리 일수록[3] 연산 속도가 빨라지는 반면, 반대급부로 메모리 자체의 용량은 작아지게 된다. 그렇기에 어느 응용 프로그램의 어떤 처리에 어떤 메모리를 할당하느냐에 따라 응용 프로그램 및 시스템 전체의 성능이 좌우되게 되는데, 이러한 중요한 요소의 제어 역시 커널의 주된 임무 중 하나다.
  • 장치 관리
    하드웨어 추상화의 일환으로, 커널은 장치 드라이버와 연동해 컴퓨터에 연결된 장치를 인식하고, 그 장치가 가진 리소스를 하위 소프트웨어에 할당하는 역할을 담당한다. 커널이 표준화된 입출력 포트나 메모리 공간을 확보하고 드라이버가 그 포트와 공간을 사용해 커널에 장치의 정보를 넘겨줌으로서 개개의 응용 프로그램은 하드웨어의 종류에 구애받지 않고 커널에 요구하는 것만으로도 필요한 자원을 사용할 수 있다.
  • 시스템 콜
    위의 설명을 보고 어렴풋하게나마 이해했다면 알 수 있듯, 커널은 시스템 전체에서 중요한 역할을 담당하고 있다. 그렇기에 CPU의 설계에 좌우되는 부분은 있으나, 대부분의 경우 보안상의 이유로 커널 공간과 유저 공간이 분리되어 있어, 유저 프로세스는 함부로 커널에 액세스 할 수 없도록 되어 있다.[4] 그렇기에 커널은 유저 프로세스가 간접적으로 커널의 기능을 사용할 수 있도록 커널을 호출할 수 있는 기능을 내재하고 있다. 이것이 시스템 콜로, 각 커널의 설계에 따라 다양한 방식이 존재하나, 어느 방식이든 유저 프로세스가 미리 지정된 행동을 하는 것으로 커널을 호출할 수 있게 도와준다.

커널의 종류로는 모놀리식 커널, 마이크로 커널, 그리고 이 둘을 적절히 혼합한 하이브리드 커널이 있다. 리눅스는 모놀로식 커널이며, 리눅스의 모체가 된 미닉스는 마이크로 커널이었다. 윈도우는 과거 마이크로 커널이었지만 현재는 하이브리드 커널로 분류되고 있다. 참고로 그 티멕스 윈도우는 마이크로 커널이었다.

각주

  1. 다만 단순한 임베디드 시스템의 경우 커널이 필요 없기에 커널 없는 운영 체제를 탑재하고 있는 경우도 있다. 물론 Windows CE리눅스 커널을 탑재한 임베디드 시스템의 경우는 그런 거 없다
  2. RAM은 물론, L1, L2, L3 캐쉬 메모리가상 메모리를 모두 포함한다.
  3. 일반적으로는 L1 캐쉬 → L2 캐쉬 → L3 캐쉬 → RAM → 디스크 (가상 메모리)의 순이다. CPU의 구조를 이해는 위키러라면 굳이 설명할 필요도 없겠지만, 물리적으로 CPU에 가까운 순으로 처리 속도가 빨라진다.
  4. 굳이 언급할 필요도 없겠지만 반대로 커널은 모든 유저 프로세스에 액세스 할 수 있다.
이 문서의 전체 혹은 일부는 운영 체제 문서에서 가져왔습니다.