• yundream
  • 2016-01-17 10:57:56
  • 2016-01-16 16:09:20
  • 174979

커널

커널은 운영체제(:12)의 핵심이다. 정확히 얘기하자면 커널이 운영체제이니 분리될 수 있는건 아니다. 그러나 일반적으로 운영체제란 컴퓨터를 운용하는데 필요한 필수 응용 프로그램까지 포함하는 것으로 확장이 되어 있기 때문에, 운영체제와 커널을 분리해서 다루는 경우가 많다. 리눅스(:12)의 경우에도 커널 + 리눅스 운영체제를 필수 응용프로그램을 포함한 배포판단위로 확대해석하는 경우가 일반적이다.

커널은 컴퓨터 시스템을 제어하는 일을 한다. 여기에는 메모리, 사운드카드, 키보드, 마우스, 모니터와 같은 시스템자원을 포함한다. 이러한 시스템자원을 사용하는 것은 보통 응용 프로그램의 요청을 통해서 이루어지게 되므로 커널은 응용 프로그램을 관리하는 일도 한다. 응용 프로그램의 실행되는 순서라든지 응용 프로그램이 요구하는 시스템자원에 대한 관리가 그것이다.

응용 프로그램이 시스템자원에 대한 요청을 하게 되면, 커널은 요청이 정당한지를 판단해서 자원을 할당한다. 응용 프로그램은 시스템콜이라는 커널에서 제공하는 API를 이용해서 커널에게 자원을 사용할 것을 요청한다.

 이미지

유저모드와 커널모드

커널은 유저모드와 커널모드를 가진다. 유저모드는 프로세스가 실행되는 영역이다. 유저모드에서 시작된 프로세스는 직접 커널모드로 진입을 할 수가 없도록 되어 있다. 이러한 모드의 분리는 보안을 강화하기 위한 목적이다. 일반 사용자 프로세스가 메모리, 하드디스크, 그래픽 카드 등과 같은 중요 자원에 직접접근하는 것을 막기 위함이다.

유저모드의 프로세스가 시스템자원을 이용할려면 커널에서 제공하는 시스템콜(:12)을 이용해서, 커널에 자원사용을 요청해야 한다. 리눅스 시스템 프로그래밍 5장 참고

 이미지

관련글