본문 바로가기
Linux

Linux Kernel Architecture(리눅스 커널 구조)

by 민지.com 2024. 11. 29.
반응형

*운영체제: 사용자와 하드웨어 간 중개자 역할을 하는 프로그램

- 목표: 더 쉬운 user 프로그램 실행과 문제 해결, 편리한 컴퓨터 시스템 사용 환경 제공, 효율적인 컴퓨터 하드웨어(자원) 사용

- 보편적으로 명확한 정의는 존재하지 않음.

- kernel = 운영체제의 핵심으로, 컴퓨터에서 항상 실행되는 '유일한' 프로그램

- 그 외: 시스템 프로그램, 응용 프로그램

 

*컴퓨터 시스템의 4가지 구성요소: 하드웨어, 운영체제, 응용 프로그램, 사용자

 

Linux Distribution(리눅스 배포판) = distro

: 리눅스 커널을 기반으로 구축된 완전한 운영체제.

추가적인 소프트웨어, 라이브러리 및 도구와 함께 제공되어 완전한 컴퓨팅 환경 제공. 다양한 요소를 함께 묶어 사용자가 필요한 기능 제공.

- 구성요소

1. 리눅스 커널(하드웨어 자원과 시스템 프로세스 관리하는 핵심)

2. GNU 도구와 라이브러리(애플리케이션 실행과 시스템 관리에 필요한 기본 기능 제공하는 필수 시스템 유틸리티와 라이브러리)

3. 패키지 관리 시스템(소프트웨어 설치/업데이트/제거 처리 도구. ex) 데비안 계열 배포판의 apt)

4. 데스크톱 환경(리눅스에서의 그래픽 사용자 인터페이스(GUI). 사용자가 시스템과 시각적으로 상호작용 가능하도록)

5. 응용프로그램 및 유틸리티: 웹 브라우저, 미디어 플레이어 같은 사전 설치된 소프트웨어

 

리눅스 커널(자원 관리, 프로세스 관리, 보안, 네트워킹 등 수행)

= 리눅스 운영체제의 핵심 구성요소. 하드웨어와 소프트웨어 간 중간자(다리) 역할 수행. CPU, 메모리, 장치 등의 시스템 자원 관리와 효율적 운영 보장. 자원 관리, 프로세스 관리, 보안, 네트워킹 등을 수행

 

*추상적 아키텍처

- user space

: 사용자 애플리케이션과 유틸리티가 실행되는 계층으로, 애플리케이션 실행을 위한 환경 제공.

시스템 호출을 통해 시스템 자원을 요청하는 애플리케이션 관리.

한 애플리케이션이 다른 애플리케이션이나 커널에 영향을 미치지 못하도록 '격리된' 실행 환경 제공.

 

- kernel space

: 운영체제의 핵심 부분, 하드웨어 및 시스템 자원 직접 관리.

자원 접근 통제하고 프로세스 격리해 사용자 공간 애플리케이션에 안정적이고 안전한 환경 제공.

하드웨어 상호작용 추상화 및 관리. 보안 정책 시행, 시스템 안정성 및 성능 유지

 

- hardware space

: CPU, 메모리, 주변 장치 등의 컴퓨터 시스템 물리적 구성 요소로 이루어진 계층.

=시스템에 필요한 물리 자원을 제공하고, 커널 제어 하에 동작.

 

**더 디테일한 추상적 아키텍처

- Applications(user space)

: 운영체제 위에서 실행되는 다양한 사용자 레벨 프로그램. 파일 조작, 프로세스 생성, 프로세스 간 통신과 같은 작업 수행을 위해 커널과 상호작용 by 시스템 호출(system call)

 

- System call layer(kernel space)

: 사용자 공간과 커널 공간 사이의 인터페이스.

파일 처리, 프로세스 관리, 네트워킹과 같은 커널 서비스 접근을 위한 gateway 역할 수행

 

- Linux subsystem(kernel space)

: 완전하고 일관성 있는 강력한 운영 환경을 제공하기 위해 협력하는 커널 구성 요소 집합.

프로세스 스케줄링, 메모리 할당, 장치 제어, 네트워크 관리 등의 시스템 운영을 관리하는 기본 계층.

주요 목표 =  하드웨어 관리 추상화, 안전하고 안정적인 시스템 자원 제공, 애플리케이션의 효율적 실행과 통신 보장.

 

- Process management(kernel space)

a. Multitasking: 프로세스 스케줄링과 컨텍스트 전환을 관리해 여러 프로세스 동시 실행.

b. Scheduler: 각 프로세스가 어느 시점에 실행될지 결정하고, 공정한 CPU 시간 분배와 우선순위를 관리.

c. Architecture-specific code(아키텍처 특화 코드)

: 특정 하드웨어 아키텍처에 대한 세부 사항과 최적화 관리.

일반 커널 코드와 특정 하드웨어 아키텍처 간 인터페이스 제공.

 

- Memory management(kernel space)

a. virtual memory: 각 프로세스에 고유한 주소 공간 제공 for 프로세스 간 충돌 방지 및 메모리 자원 효율적 관리

b. memory manager: 프로세스 위해 메모리 할당 및 해제. paging 통해 메모리 접근을 제어하고, RAM 효율적 사용 보장

 

- File system(kernel space)

a. file, directories: 파일 및 디렉터리 구조를 관리해 사용자와 애플리케이션이 데이터에 '계층적' 형식으로 접근 가능.

b. file system types: Ext4와 같은 다양한 파일 시스템을 지원, 각 파일 시스템은 고유한 기능과 역량 가지고 있음.

c. block devices: 하드 드라이브, SSD와 같은 장치에서 데이터를 블록 단위로 읽고 쓰는 작업을 처리해 효율적 데이터 관리 가능

(me: 블록 단위? 정확한 개념이 뭐지?)

(-> block = 외부 기억장치에서 사용하는 전송 단위. 대용량 저장장치의 경우 그 크기가 512byte 또는 1KB)

(이때, 외부 저장장치와 연결되어 있는 데이터 버스의 폭은 8, 16, 32bit로 작은 단위이기 때문에 한 블록을 전송하기 위해)(서는 여러 번의 전송이 연속적으로 수행된다.)

 

- Device drivers(kernel space)

a. device access, terminals: 하드웨어 장치와의 상호작용 관리. 하드웨어와 커널 간 원활한 통신 위한 드라이버 제공.

b. character devices: 키보드, 직렬 장치와 같이 데이터 스트림을 문자 단위로 처리하는 장치를 다룸.

 

- Network(kernel space)

a. network functionality: 다양한 인터페이스/프로토콜 통해 데이터 패킷 송수신하는 네트워크 기능 관리

b. network protocols: 네트워크 통신 프로토콜을 구현해 네트워크 상에서 데이터 전송 가능하게 함

c. network drivers: NIC(네트워크 인터페이스 카드)에 대한 특정 드라이버 제공해 커널이 네트워크 하드웨어와 통신할 수 있게 함

 

- Hardware layer(hardware space)

: CPU, 메모리 등 컴퓨터 시스템을 구성하는 물리적 장치와 구성 요소 포함. 리눅스 커널의 직접적인 제어 하에 동작.

목적 = 운영체제와 사용자 프로그램이 필요한 연산 위한 성능, 메모리, 입출력 제공

 

- CPU(hardware space)

: 사용자 애플리케이션과 커널 프로세스의 명령을 실행함. 커널은 태스크 스케줄링과 프로세스 간의 로드 밸런싱을 포함한 CPU 자원 관리함.

(ME: 로드 밸런싱?)

(-> CPU 로드 밸런싱 =  멀티 코어 또는 멀티 프로세서 시스템에서 실행 중인 프로세스나 작업을 서로 다른 CPU에 최대한) (공평하게 할당해 시스템 성능과 효율성을 향상시키는 것)

 

- RAM(hardware space)

: 휘발성 메모리로, CPU가 자주 접근하는 데이터/코드를 저장. 커널은 RAM을 관리해 활성 프로세스와 애플리케이션에 효율적으로 사용되도록 함.

 

- Storage devices(hard disk, CD, floppy disk, etc.) (hardware space)

: 파일 시스템이 저장된 비휘발성 저장 매체의 다양한 형태를 나타냄. 커널은 드라이버를 사용해 읽기/쓰기 작업을 관리하고, 저장장치에 접근함.

 

- Various terminal equipment(hardware space)

: 키보드, 마우스, 디스플레이 터미널과 같은 장치를 포함하며, 문자 장치 드라이버에 의해 관리됨.

 

- Network adapter(hardware space)

: 이더넷 카드/wifi 어댑터와 같은 네트워크 연결을 가능하게 하는 하드웨어.

네트워크 드라이버는 이러한 어댑터와 상호작용해 네트워크 스택을 통해 네트워크 상에서 데이터 송수신.

 

**Linux kernel source code structure

디렉터리 설명
arch/ 특정 CPU 아키텍처 관련된 코드를 담고 있음
 - x86, ARM, RISC-V 등 각 아키텍처마다 CPU 명령어 처리, 시스템 호출(system call) 구현, 부팅 과정 등의
   아키텍처에 특화된 내용 포함
플랫폼에 의존적인 세부사항(예: 하드웨어 인터페이스, 레지스터 구성 등)을 처리
drivers/ 네트워크 카드, 저장 장치, USB 장치 등 다양한 하드웨어 구성 요소에 대한 장치 드라이버 포함
fs/ 리눅스가 지원하는 다양한 파일 시스템의 구현과 VFS(가상 파일 시스템) 포함
include/ 커널 전반에서 사용되는 헤더 파일 포함
주요 데이터 구조, 함수 프로토타입, 매크로 정의
kernel/ 커널의 핵심 구성 요소 포함 - 프로세스 관리, 스케줄링, 시스템 호출 등
mm/ 메모리 관리와 관련된 코드 포함 - 가상 메모리, 페이징, 메모리 할당 등
net/ 네트워크 스택 포함 - 프로토콜, 네트워크 인터페이스, 소켓 관리 등
ipc/ 프로세스 간 통신(IPC) 메커니즘 구현 포함 - 메시지 큐, 공유 메모리, 세마포어, 시그널 등
init/ 커널 초기화 코드 포함 - 시스템 부팅 및 최초의 사용자 공간 프로세스 시작하는 역할 담당
lib/ 커널 전반에서 사용되는 다양한 유틸리티 함수 포함 - 데이터 구조, 암호화 함수, 문자열 조작 루틴 등
security/ SELinux와 같은 리눅스 보안 모듈(LSM)을 포함한 보안 기능 관련 코드 포함
sound/ 사운드 카드와 오디오 처리를 포함한 오디오 하드웨어와 관련된 드라이버 및 서브시스템 포함
block/ 블록 장치(HDD, SSD 등)를 관리하는 블록 계층 관련 코드 포함
crypto/ 커널 내에서 암호화, 해싱 등 보안 작업에 사용되는 암호화 알고리즘 및 서브시스템 포함
virt/ KVM 및 기타 가상화 기술 지원과 관련된 코드 포함
documentation/ 커널 서브시스템, 코딩 표준, 커널 기여 가이드라인에 대한 정보 제공하는 문서 파일 포함
반응형