[OS] 커널(kernel)이란 ?

GonnabeAlright·2021년 11월 24일
2
post-thumbnail
post-custom-banner

커널이란 ?

운영체제를 사용자의 관점 혹은 시스템의 관점에서 살펴보자.

사용자의 관점에서 운영체제는 컴퓨터를 사람이 사용하기 쉽게 여러가지 일들을 수행해주는 역할을 한다. 시스템의 관점에서 운영체제는 하드웨어와 가장 밀접한 프로그램이라고 볼 수 있다. 컴퓨터 시스템은 특정 문제를 해결하기 위해 필요한 여러가지 자원들을 사용한다. (ex. CPU 시간, 메모리 공간, 파일 저장 공간, 입출력 장치 ...) 운영체제는 이러한 자원의 관리자로써 동작한다.

운영체제는 커널시스템 프로그램으로 구분될 수 있다. 커널운영체제의 핵심으로 컴퓨터 자원들을 관리하는 역할을 한다. 하지만 커널사용자와의 상호작용은 전혀 지원하지 않는다. 그래서 사용자와 직접적인 상호작용을 위해서 시스템 프로그램이 필요하다. 시스템 프로그램의 예로 쉘(Shell)이라는 명령어 해석기가 있다. 사용자가 컴퓨터에게 전달하는 명령을 해석하는 프로그램으로 사용자와와의 상호작용을 가능하게 한다.

정리를 하면 '운영체제'커널과 함께 사용자 편의를 위한 시스템 프로그램을 포함하며, '커널'컴퓨터 자원을 관리하는 운영체제의 핵심 부분이다.

커널컴퓨터의 물리적(하드웨어) 자원과 추상화 자원을 관리하기 위해 시스템의 다른 모든 부분을 위한 기본적인 서비스를 제공하고, 하드웨어를 관리하며, 시스템 자원을 나눠준다. 추상화는 물리적으로 하나 뿐인 하드웨어를 여러 사용자들이 번갈아 사용하게 중재함으로서 한 개의 하드웨어가 여러개인 것처럼 보여지게 한다. 이를 위해 커널은 하나의 하드웨어 자원을 여러 사용자들을 위한 복수 개의 추상화된 객체로 관리한다.

커널이 하는 일

  • 태스크(task)관리자: CPU를 task라는 추상적인 자원으로써 제공
  • 메모리 관리자: 메모리를 segment나 page로 제공
  • 파일시스템: 디스크를 파일로 제공
  • 네트워크 관리자: 네트워크 장치를 소켓으로 제공
  • 디바이스 드라이버 관리자: 각종 장치를 디바이스 드라이버를 통해 일관되게 접근하도록 함

커널의 구성요소, 즉 관리자들이 존재하는 공간이 Kernel Space이다. Kernel Space 위에 사용자로 여겨지는 태스크(process)들이 존재하는 User Space가 있다. (프로그램 파일이 결국 task가 된다.)

Kernel Space와 User Space 사이에 System Call Interface가 있다. User Space의 task들이 커널이 관리하는 자원에 접근해야 할 필요가 있으면 System Call Interface를 통해 Kernel Space의 자원 관리자에게 요청이 전달된다. 그리고 이 커널의 각 자원 관리자는 사용자 요청에 맞게 알맞는 하드웨어에 사용자 명령을 전달하고 작업을 수행한다.

정리하자면, '커널'은 사용자가 system call을 통해 컴퓨터 자원을 사용할 수 있게 해주는 자원관리자라고 볼 수 있다.

부트로더

부트로더(boot loader, 초기적재프로그램)이란 운영체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.

여기서 말하는 필요한 작업들은 하드웨어를 초기화하고 커널을 압축 해제 후 메모리에 적재, 제어를 OS에 넘기는 과정을 수행하는 것을 말한다.

유저 영역(User land)과 커널 영역(Kernel land)의 차이점

운영체제는 컴퓨터의 메모리를 관리한다. 컴퓨터를 안전하게 관리하기 위해서 유저 영역과 커널 영역으로 나누어 관리를 한다.

  • 유저 영역(user land): 프로그램이 동작하기 위해 사용되는 메모리 공간(stack, heap, bss, data, text 영역)
  • 커널 영역(kernel land): 운영체제를 실행시키기 위해 필요한 메모리 공간

명령어 수행 과정에서 CPU는 항상 메모리에 이번에 수행해야 할 instruction의 주소를 건네준 후 instruction과 관련된 데이터나 코드를 받아서 실행한다. 이 과정에서 지금 현재 상태가 유저 모드인지 커널 모드인지가 중요하다.

커널 모드의 경우, CPU는 어떠한 영역의 메모리라도 접근하고 모든 instruction을 실행시킬 수 있다. 한 마디로 모든 영역의 접근이 허용된다는 의미다. 하지만 유저 모드의 경우는 오직 자신의 메모리 영역에만 접근할 수 있다.

이러한 모드를 왜 나눈 것일까?

커널에서 중요한 자원, 즉 운영체제를 실행시키기 위한 자원을 관리하기 때문에 일반 사용자가 그 중요한 자원에 접근하지 못하도록 하기 위함이다.

post-custom-banner

0개의 댓글