[Server] 리눅스 커널(kernel)이란?
여의도한량이
1
10566
0
0
2021.04.26 17:19
리눅스에 대한 매우 초보적인 글이므로(제가 리눅스 초보이기에 ㅠㅠ) 숙달된 개발자분들에게 매우 쉬운 글일 수도 있습니다. 틀린 부분이 있으면 언제든지 지적해주세요 :)
'리눅스 커널'과 '커널'을 혼용해서 사용하였지만 둘이 같다고 보셔도 무방합니다.
많은 사람들이 운영체제와 커널에 큰 의미 차이를 두지 않고 사용합니다. 저 또한 커널을 그냥 운영체제라 생각하고 둘을 혼용해서 사용했습니다. 하지만 의미가 같다면 굳이 이름을 다르게 해서 부를 필요가 없었을 것입니다.
# 컴퓨터에서 커널까지
컴퓨터는 크게 하드웨어 와 소프트웨어 로 나뉩니다.
이 둘은 컴퓨터에 대한 지식이 없어도 쉽게 구별하실 수 있을 것입니다. 하드웨어는 눈에 보이고, 손으로 만질수 있는 것들 예를 들면 모니터, 데스크톱, CPU 등이 될수 있습니다. 소프트웨어는 하드웨어와 반대로 눈에 보이지 않고 손으로 만질수 없는 것들 예를 들면 현재 우리가 이 블로그를 볼 수 있도록 도와주는 웹브라우저, ppt를 만들수 있게 도와주는 MSoffice 등 그 밖에도 소프트웨어의 종류는 상당히 다양합니다.
소프트웨어는 위 그림처럼 다시한번 응용 프로그램과 운영체제로 나뉩니다. 위에서 말씀드린 웹브라우저와 MSoffice를 엄밀히 따지자면 소프트웨어 중에서도 응용 프로그램에 속합니다. 그리고 운영체제, 이 운영체제에 속해 있는 것이 커널입니다.
(운영체제의 예로는 Window, Mac OS, 리눅스, 우분투 등이 있습니다.)
리눅스 커널은 OS의 중추 역할 을 하며 주로 디바이스 관리, 프로세스 관리, 메모리 관리, 시스템 콜 제공 과 같은 기능을 가지고 있습니다. 쉽게 말하자면, 컴퓨터 자원을 관리해줍니다.
커널은 항상 컴퓨터 자원들만 바라보고 있으며 사용자와 직접적인 상호작용은 하지 않습니다. 사용자와 상호작용을 하기 위해 필요한 것이 바로 시스템 프로그램입니다.
# 리눅스 커널의 구조
커널의 사전적 의미는 '껍데기'이며, 운영체제에 있어 가장 핵심이며, 운영체제 맨 하층에서 작동되는 소프트웨어입니다. 여러 개의 프로세스들을 관리하기 위하여 스케줄링 또한 합니다.
커널의 가장 큰 역할은 컴퓨터의 물리적 자원과 추상화 자원을 관리하는 것입니다.
추상화란 물리적으로 하나 뿐인 하드웨어를 여러 사용자들이 번갈아 사용하게 중재함으로써, 마치 한 개의 하드웨어가 여러 개인 것처럼 보여지도록 하는 기술을 말합니다.
추상화된 환경에서 각 사용자들은 본인이 하나의 하드웨어를 독점하여 활용 하는 것처럼 느낄 수 있습니다.
물리적 자원이라 할 수 있는 하드웨어에 접근하기 위한 방법은 매우 복잡하고 어렵습니다. 따라서 사용자가 이를 직접 접근하기에는 무리가 있습니다. 이러한 물리적 자원을 추상화하여 사용자가 보다 쉽게 접근할 수 있도록 도와주는 것이 커널입니다.
커널이 추상화하여 관리하는 물리적 자원들과 이를 추상화한 자원을 칭하는 단어를 대응시켜보았습니다.
# 리눅스 커널의 주요 기능
커널의 주요 기능은 다음과 같습니다.
-
디바이스 관리
-
프로세스 관리(Task 관리)
-
메모리 관리
-
시스템 콜 제공
- 디바이스 관리
리눅스 커널은 디바이스 드라이버라는 하드웨어 입출력을 제어하는 소프트웨어를 이용하여 장치를 관리합니다.
- 프로세스 관리
리눅스에서는 프로그램을 실행할 때 파일 시스템 내 특정 디렉터리에 있는 프로그램의 파일을 읽어와 메모리에 적재합니다. 이 프로그램이 메모리에서 실행되는 프로세스가 됩니다. 프로그램이 종료된다면 프로세스 역시 삭제됩니다.
사용자가 시스템에 로그인하게 되면 보통 약 100여 개의 프로세스가 동시에 실행되는데, 프로세스가 이용할 수 있는 CPU는 하나이므로 여러 프로세스를 동시에 이용할 수는 없습니다. 따라서 동시에 실행되는 프로세스 간 CPU를 이용할 수 있는 시간을 분배하게 됩니다. 각 프로세스에는 PID(process id)가 부여되며 커널은 이 PID를 통해 프로세스를 관리하게 됩니다.
- 메모리 관리
프로그램이 실행 될 때 메모리에는 프로그램뿐만 아니라 프로그램이 이용하는 데이터 영역 또한 메모리에 할당됩니다. 사용자 프로그램의 요구에 따라 메모리 영역을 분배하거나 이용이 끝난 메모리 영역 회수 등을 담당하는 것이 커널이 수행하는 메모리 관리입니다.
메모리 관리에서는 가상 메모리 또한 지원합니다. 가상 메모리라는 것은 이름에서 알 수 있듯이 실제로는 없는 메모리지만 실제로 존재하는 것처럼 메모리를 사용할 수 있게 해줍니다. 가상 메모리는 실제 메모리가 아닌 HDD와 같은 보조 기억 장치의 일부도 프로세스가 볼 때에는 같은 메모리인 것처럼 보이게 하기 때문에 실제 내장된 메모리보다 더 큰 용량의 메모리 사용이 가능합니다.
이 HDD에 마련된 가상 메모리 영역을 '스왑(swap)'이라고 합니다. 메모리에 있는 프로그램 전체 영역을 보조 기억 장치로 내보내는 것을 '스왑 아웃' 반대로 내보냈던 데이터를 메모리에 다시 가져오는 것을 '스왑 인' 이라고 합니다.
- 시스템 콜 제공
시스템 콜이란 표준 출력이나 파일을 쓰는 write, 읽어들이는 read, 프로세스를 포크하는 기능 등을 가고 있어 사용자 프로그램에서 액세스 할 수 있도록 도와줍니다. 리눅스 커널에서는 약 300개의 시스템 콜을 제공하고 있습니다.
fork란? 프로세스를 복제하는 방법입니다.
커널은 왜 이러한 자원들을 관리해줄까요?
바로 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 매개하기 위해서입니다.
컴퓨터만의 언어와 규칙으로 하드웨어 접근하고 통신해야 하는데 일반 사용자들은 이러한 언어와 규칙을 전혀 모릅니다. 따라서 커널은 사용자와 컴퓨터 중간에서 상호작용 할 수 있도록 도와주는 '번역가' 같은 역할을 하신다고 보면 됩니다.
이상 리눅스 커널에 대해 알아보았습니다.
읽어주셔서 감사합니다.
질문은 언제나 환영합니다.
"난 반드시 백엔드 왕이 될거야"
[참고 사이트]
sangyeon96.gitbooks.io/linux-system/content/chapter3_section1.html