[Linux] kernel(커널) 이란 ? 쉽게 알아보자

컴퓨터는 크게 2가지로 구분할 수 있습니다. 

  1. 물리적으로 만질 수 있는 하드웨어(키보드, 모니터, 컴퓨터 본체와 본체 안에 있는 CPU, 메모리 등)
  2. 물리적으로 존재하지 않는 소프트웨어

그리고, 소프트웨어

운영체제(Linux, MacOS, Windows 등)와 그 위에 설치되는 프로그램인 응용 프로그램 (Exel, Chrome 등)으로 다시 나눌 수 있습니다.

 

그리고 운영체제커널(Kernel)과 시스템 프로그램으로 구분됩니다. 

 

커널(Kernel)과 시스템 프로그램

커널운영체제의 핵심부분으로써 주로 디바이스 관리, 프로세스 관리, 메모리 관리, 시스템 콜 제공 같은 기능을 관리하는 등, 컴퓨터 자원을 관리합니다.

하지만 커널은 항상 컴퓨터 자원들만 바라보고 있어 사용자와 직접적인 상호작용은 하지 않습니다.

그렇기 때문에 사용자와 상호작용을 하기 위해 필요한 것이 시스템 프로그램 ( Shell ) 입니다.

 


커널의 역할

물리적 자원과 추상화 자원의 대응관계.

커널의 가장 큰 목표는 컴퓨터의 물리적( 하드웨어 ) 자원과 추상화 자원을 관리하는 것입니다.

추상화란 ?
물리적으로 하나뿐인 하드웨어를 여러 사용자들이 번갈아 사용할 수 있도록 마치 여러개처럼 보이게 하는 기술

추상화된 환경에서는 각 사용자들이 본인이 하나의 하드웨어를 독점하여 활용 하는 것 처럼 느낄 수 있습니다.

하지만 물리적 자원인 하드웨어에 접근하기 위한 방법은 매우 복잡하고 어려워 사용자가 직접 접근하기는 무리가 있습니다.

그렇기 때문에, 물리적 자원을 추상화하여 사용자가 보다 쉽게 접근할 수 있도록 "커널"이 필요합니다.

 


커널의 자원 관리

커널은 물리적 자원과 추상 자원들을 관리합니다.

따라서 리눅스 커널의 구성 요소는 여러가지 자원들을 관리하는 관리자(Manager)라 할 수 있습니다. 

커널을 구성하는 자원 관리자들은 다음과 같습니다.

  • 태스크(Task) 관리자

물리적 자원인 CPU를 추상적 자원인 Task로 제공

 

  • 메모리(Memory) 관리자 

물리적 자원인 메모리를 추상적 자원인 Page 또는 Segement로 제공

 

  • 파일 시스템(File System) 관리자 

물리적 자원인 디스크를 추상적 자원인 File로 제공

 

  • 네트워크(Network) 관리자

물리적 자원인 네트워크 장치를 추상적 자원인 Socket으로 제공

 

  • 디바이스 드라이버(Device Driver) 관리자

각종 외부 장치에 대한 접근

 

  • Interrupt Handling

인터럽트 핸들러

 

  • I/O Communication

입출력 통신 관리

 

 

 

커널은 왜 이러한 자원들을 관리하는 걸까 ?

위에서도 말했듯이,  물리적 자원을 추상화하여 사용자가 물리적인 하드웨어에 보다 쉽게 접근 하기 위해서입니다.

컴퓨터 구성요소들은 컴퓨터만의 언어와 규칙으로 하드웨어에 접근하고 통신해야 하는데,

일반적인 사람들은 이러한 컴퓨터 세계의 언어와 규칙을 모릅니다.

따라서 커널이 이를 중간에서 돕는 역할을 하는 것 입니다. 

 

 

위에서  그림에서 커널 구성요소들이 존재하는 공간 Kernel Space라고 부릅니다. 

Kernel Space 위에 사용자로 여겨지는 태스크(그림에선 process)들이 존재하는 User Space가 있습니다. 

저희가 아는 C/C++과 같은 컴퓨팅 언어로 작성된 프로그램 파일이 결국 task들이 되는데,

task를 사용자라고 생각하시면 됩니다. (태스크엔 사용자의 명령이 담겨져 있기 때문.)

 

Kernel Space와 User Space 사이에는 System Call Interface가 있습니다. 

User Space의 task들이 커널이 관리하는 자원에 접근해야할 필요가 있으면 

System Call Interface를 통해 Kerenel Space의 자원 관리자에게 요청이 전달 됩니다. 

그리고 이 커널의 각 자원 관리자는 사용자 요청에 맞게 알맞는 하드웨어에 사용자 명령을 전달하고 작업을 수행합니다. 

 

즉, 커널사용자가 system call을 통해 컴퓨터 자원을 사용할 수 있게해주는 자원 관리자 입니다.

 

 


참고자료
https://5equal0.tistory.com/entry/Linux-Kernel-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B5%AC%EC%A1%B0

https://kingofbackend.tistory.com/100
https://minkwon4.tistory.com/295