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
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 |