Linux

리눅스 커널이란?(Linux Kernel)

Somaz 2024. 11. 12. 17:34
728x90
반응형

Overview

리눅스 커널에 대해서 알아보자.

 

 


 

What is a Kernel?

 

운영 체제의 핵심: 커널은 모든 운영 체제의 핵심 부분이다. 하드웨어와 직접 통신하고 애플리케이션과 시스템 프로세스에 필수적인 서비스를 제공하는 계층이다.

 

Monolithic Kernel로서의 Linux 커널: Linux는 특히 " Monolithic" 커널이다. 즉, 대부분의 핵심 시스템 기능(예: 파일 시스템 관리, 장치 드라이버, 메모리 관리 등)이 단일 대형 바이너리 내에 포함되어 있음을 의미한다. .

 

이는 모듈화 및 보안을 위해 이러한 구성 요소를 별도의 프로세스에 유지하지만 효율성이 떨어질 수 있는 마이크로커널 설계와 다르다.

리눅스 커널의 주요 역할

커널은 하드웨어 자원 관리, 프로세스의 효율적인 운영 보장, 애플리케이션이 의존하는 필수 서비스 제공을 담당한다. 이러한 책임을 세분화해 보겠다.

 

프로세스 관리

  • 프로세스는 시스템에서 실행되는 개별 작업 또는 프로그램의 인스턴스이다. 커널은 이러한 프로세스를 생성, 관리 및 종료한다.
  • 스케줄러를 통해 프로세스 일정을 제어하여 특정 시간에 실행되는 프로세스와 기간을 결정한다. 스케줄링 결정은 멀티태스킹에 매우 중요하므로 시스템이 동시에 많은 작업을 실행하는 것처럼 보일 수 있다.
  • 안정성과 보안을 보장하기 위해 프로세스가 격리된다. 커널은 프로세스 간의 무단 액세스를 방지하고 프로세스 우선순위를 관리하여 시스템 성능을 최적화한다.

 

메모리 관리

  • 커널은 가상 메모리를 사용하여 프로세스에 격리된 메모리 주소를 제공함으로써 안전한 멀티태스킹을 가능하게 한다.
  • 또한 이를 통해 프로세스는 데이터를 디스크로 교환("페이징"이라고 함)하여 물리적으로 사용 가능한 것보다 더 많은 메모리를 사용할 수 있다.
  • 메모리 할당은 동적으로 처리된다. 즉, 커널은 다양한 프로세스의 필요에 따라 메모리를 부여하고 회수한다.
  • 페이지 캐시는 메모리 관리의 또 다른 중요한 구성 요소로, 자주 액세스하는 데이터를 캐싱하여 디스크 I/O 작업을 줄이고 데이터 검색 속도를 높인다.

 

장치 관리

  • 커널에는 변환기 역할을 하는 장치 드라이버가 포함되어 있어 OS가 다양한 하드웨어 장치(예: 디스크, 네트워크 인터페이스, 주변 장치)와 상호 작용할 수 있다.
  • 장치 관리에는 플러그 앤 플레이 지원이 포함되어 있어 시스템이 자동으로 새 장치를 인식하고 통신할 수 있다.
  • 드라이버는 모듈로 추가할 수 있다. 즉, 시스템을 재부팅하지 않고도 런타임에 동적으로 로드하거나 언로드할 수 있다.

 

파일 시스템 관리

  • 커널은 파일 저장을 관리하여 디스크에 대한 데이터 구성, 읽기 및 쓰기를 허용한다.
  • 여러 파일 시스템(예: EXT4, XFS, NTFS, FAT32)을 지원하고 가상 파일 시스템(VFS) 레이어를 사용하여 다양한 파일 시스템 유형에 걸쳐 균일한 인터페이스를 제공한다.
  • 커널은 또한 권한, 캐싱 및 저널링(충돌 시 데이터 손상을 방지하는 기술)을 처리하여 데이터 무결성과 보안을 보장한다.

 

네트워크 스택

  • Linux 커널에는 TCP, UDP, IP와 같은 프로토콜을 지원하는 네트워킹 스택이 내장되어 있다. 이 스택은 네트워크 통신을 활성화하여 인터넷 및 로컬 네트워크 연결을 용이하게 한다.
  • 낮은 수준의 네트워크 세부 정보를 관리하고 애플리케이션이 네트워크와 상호 작용하는 데 사용하는 소켓 및 기타 인터페이스를 제공한다.
  • 네트워크 패킷 필터링(방화벽 기능), 가상 사설망(VPN), 터널링과 같은 고급 기능도 네트워킹 스택 내에서 관리된다.

 

 

Linux 커널의 주요 구성요소

  • 시스템 호출 인터페이스: 이는 사용자 공간 애플리케이션과 커널 사이의 게이트웨이이다. 시스템 호출을 통해 애플리케이션은 커널에서 파일 작업, 프로세스 제어, 네트워크 통신과 같은 특정 서비스를 요청할 수 있다.
  • 커널 모듈: 커널에서 동적으로 로드할 수 있는 부분이다. 여기에는 장치 드라이버, 파일 시스템 드라이버 및 네트워크 프로토콜 처리기가 포함된다. 모듈은 시스템을 재부팅하지 않고도 로드 및 언로드할 수 있으므로 유연성을 제공한다.
  • 프로세스 간 통신(IPC): 커널은 파이프, 메시지 큐, 공유 메모리 등 프로세스가 서로 통신할 수 있는 메커니즘을 제공한다. IPC는 여러 프로세스가 함께 작동하는 복잡한 애플리케이션에 필수적이다.
  • 보안 및 액세스 제어: Linux 커널에는 SELinux(보안 강화 Linux) 및 AppArmor와 같은 강력한 보안 메커니즘이 포함되어 있다. 이러한 프레임워크는 엄격한 액세스 제어 정책을 시행하여 프로세스 및 파일 수준에서 세분화된 보안 설정을 허용한다.

 

커널 공간과 사용자 공간

  • 사용자 공간: 애플리케이션과 사용자 프로세스가 실행되는 곳이다. 사용자 공간의 애플리케이션은 하드웨어에 직접 액세스할 수 없다. 커널을 통과해야 한다.
  • 커널 공간: 커널이 작동하는 특권 영역으로, 시스템 하드웨어와 메모리에 무제한으로 액세스할 수 있습니다. 커널 공간 내의 코드만 하드웨어와 직접 상호 작용할 수 있다.

 

Linux 커널이 중요한 이유

  • 안정성 및 성능: Linux는 안정성과 효율적인 리소스 관리로 잘 알려져 있어 소형 장치와 수요가 많은 환경 모두에 이상적이다.
  • 보안: Linux 커널에는 무단 액세스 및 공격으로부터 시스템을 보호하는 데 도움이 되는 고급 보안 기능이 포함되어 있다.
  • 커뮤니티 지원 및 지속적인 개발: 오픈 소스 모델은 신속한 혁신, 보안 패치, 자원 봉사자와 상업 단체 모두의 광범위한 지원 기반을 조성한다.
  • 교차 플랫폼 호환성: 모듈식 설계를 통해 Linux 커널은 다양한 하드웨어 아키텍처(예: x86, ARM, RISC-V)에 적응할 수 있으므로 다양한 장치와 시스템을 구동할 수 있다.

 

Feature Monolithic Kernel Microkernel Architecture (MSA)
Definition A kernel design where most core services (e.g., file system, device drivers, memory management) run in a single large binary in kernel space. A kernel design where only essential services (e.g., CPU scheduling, IPC) run in kernel space, while other services (e.g., drivers, file systems) run in separate user-space processes.
Core Components All major components and services are bundled into the kernel, including device drivers, memory management, file systems, etc. Only essential components (such as CPU scheduling, IPC, basic memory management) are in the kernel; other components run as separate user-space services.
Performance Typically faster due to direct function calls and fewer context switches. Generally slower because components interact through IPC, leading to more context switches.
Modularity Limited modularity as most components are tightly integrated into the kernel. High modularity, as components can be independently updated, added, or removed.
Reliability A crash in one kernel component can potentially crash the whole system. More reliable; if a user-space component crashes, the kernel and other components remain unaffected.
Security Less isolation between components, which can lead to security vulnerabilities. Better isolation and security since services run as separate processes, reducing the risk of system-wide issues.
Development Complexity Easier to develop due to all components being in a single address space, allowing for straightforward communication. More complex, requiring well-defined interfaces and robust IPC mechanisms to allow communication between kernel and user-space services.
Size of Kernel Typically large due to integrated components. Smaller in size since only essential services are in the kernel space.
Examples Linux, older versions of Windows (e.g., Windows 95), UNIX. Minix, QNX, newer versions of macOS, and L4 microkernels.
Use Cases Preferred in systems where performance is critical and system resources are abundant. Common in real-time systems and environments where reliability and modularity are prioritized over raw performance.

 

 


Reference

https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel

 

https://namu.wiki/w/Linux/%EC%BB%A4%EB%84%90

728x90
반응형

'Linux' 카테고리의 다른 글

Vim 개념 및 사용가이드  (0) 2024.05.14
리눅스 명령어 3. sed, awk란?  (0) 2024.01.20
리눅스 명령어 2. jq란?  (2) 2024.01.19
리눅스 명령어 1. xargs란?  (0) 2024.01.16
Chattr 이란?  (0) 2022.07.25