'리눅스 기초(1) 리눅스 아키텍쳐

2026년 04월 12일
---

# '리눅스 기초(1) 리눅스 아키텍쳐

## 리눅스 시스템의 계층 구조

리눅스는 크게 4개의 주요 계층으로 구성되어 있습니다:

```plain text
┌─────────────────────────────────┐
│        사용자 애플리케이션        │ ← 사용자 프로그램들
├─────────────────────────────────┤
│          시스템 라이브러리       │ ← glibc, 시스템 콜 래퍼
├─────────────────────────────────┤
│       커널 공간 (Kernel)        │ ← 핵심 운영체제
├─────────────────────────────────┤
│         하드웨어 계층            │ ← CPU, 메모리, 디스크 등
└─────────────────────────────────┘
```

## 1. 하드웨어 계층 (Hardware Layer)

가장 아래쪽에 위치한 물리적 하드웨어 구성요소들입니다:

- **CPU (Central Processing Unit)**: 명령어 실행
- **메모리 (RAM)**: 데이터와 프로그램 임시 저장
- **저장장치**: HDD, SSD 등 영구 저장
- **입출력 장치**: 키보드, 마우스, 네트워크 카드 등
- **버스**: 하드웨어 구성요소 간 데이터 전송 통로
## 2. 커널 (Kernel) - 리눅스의 핵심

커널은 리눅스 운영체제의 심장부로, 하드웨어와 소프트웨어 사이의 다리 역할을 합니다.

### 주요 커널 구성요소

### 프로세스 관리 (Process Management)

```bash
# 현재 실행 중인 프로세스 확인
ps aux

# 프로세스 트리 구조 확인
pstree

# 특정 프로세스 정보 확인
cat /proc/[PID]/status
```

- **프로세스 스케줄링**: CPU 시간을 프로세스들에게 할당
- **프로세스 생성/종료**: fork(), exec(), exit() 시스템 콜 처리
- **멀티태스킹**: 여러 프로세스의 동시 실행 관리
### 메모리 관리 (Memory Management)

```bash
# 메모리 사용량 확인
free -h

# 가상 메모리 정보 확인
cat /proc/meminfo

# 프로세스별 메모리 사용량
cat /proc/[PID]/smaps
```

- **가상 메모리**: 물리 메모리보다 큰 주소 공간 제공
- **페이징**: 메모리를 페이지 단위로 관리
- **스왑**: 디스크를 임시 메모리로 활용
### 파일 시스템 (File System)

```bash
# 마운트된 파일시스템 확인
mount | column -t

# 파일시스템 사용량 확인
df -h

# inode 정보 확인
ls -li
```

- **VFS (Virtual File System)**: 다양한 파일시스템에 대한 공통 인터페이스
- **ext4, btrfs, xfs**: 실제 파일시스템 구현체들
- **파일 권한 및 소유권 관리**
### 장치 드라이버 (Device Drivers)

```bash
# 로드된 커널 모듈 확인
lsmod

# 하드웨어 정보 확인
lshw
lspci
lsusb

# 커널 메시지 확인
dmesg | tail
```

- **하드웨어 추상화**: 하드웨어를 소프트웨어로 제어할 수 있게 변환
- **모듈**: 동적으로 로드/언로드 가능한 드라이버
- **디바이스 파일**: `/dev` 디렉토리의 장치 파일들
### 네트워크 스택 (Network Stack)

```bash
# 네트워크 인터페이스 확인
ip addr show

# 네트워크 연결 상태
netstat -tuln

# 라우팅 테이블 확인
ip route show
```

- **TCP/IP 프로토콜 스택**: 네트워크 통신 프로토콜 구현
- **소켓**: 네트워크 통신을 위한 인터페이스
- **방화벽**: iptables, netfilter를 통한 패킷 필터링
## 3. 시스템 라이브러리 (System Libraries)

사용자 프로그램과 커널 사이의 중간 계층입니다.

### glibc (GNU C Library)

```bash
# glibc 버전 확인
ldd --version

# 프로그램의 라이브러리 의존성 확인
ldd /bin/ls
```

- **시스템 콜 래퍼**: 커널 시스템 콜을 C 함수로 감싸서 제공
- **표준 C 라이브러리 함수들**: printf, malloc, fopen 등
- **POSIX 호환성**: 유닉스 표준 API 제공
### 기타 시스템 라이브러리들

- **libm**: 수학 함수 라이브러리
- **libpthread**: 스레드 라이브러리
- **libssl**: 암호화 라이브러리
- **libX11**: X Window System 라이브러리
## 4. 사용자 공간 (User Space)

사용자가 직접 실행하는 애플리케이션들이 동작하는 영역입니다.

### 시스템 유틸리티

```bash
# 시스템 정보 확인 도구들
uname -a      # 시스템 정보
uptime        # 시스템 가동 시간
whoami        # 현재 사용자
id            # 사용자 ID 정보
```

### 셸 (Shell)

```bash
# 현재 사용 중인 셸 확인
echo $SHELL

# 사용 가능한 셸 목록
cat /etc/shells

# 셸 프로세스 정보
ps -p $$
```

- **bash, zsh, fish**: 다양한 셸 종류
- **명령어 해석**: 사용자 입력을 커널이 이해할 수 있는 형태로 변환
- **스크립팅**: 자동화된 작업 실행
### 데스크탑 환경

- **X11/Wayland**: 그래픽 디스플레이 서버
- **GNOME, KDE, XFCE**: 데스크탑 환경
- **윈도우 매니저**: 창 관리 시스템
## 리눅스 부팅 과정에서 보는 아키텍처

리눅스 시스템이 부팅되는 과정을 통해 각 계층이 어떻게 초기화되는지 살펴보겠습니다:

```plain text
1. BIOS/UEFI → 하드웨어 초기화
2. 부트로더 (GRUB) → 커널 로드
3. 커널 초기화 → 하드웨어 감지, 드라이버 로드
4. init 프로세스 → 시스템 서비스 시작
5. 로그인 관리자 → 사용자 세션 시작
```

```bash
# 부팅 메시지 확인
dmesg | head -20

# 시스템 서비스 상태 확인 (systemd)
systemctl status

# 부팅 시간 분석
systemd-analyze blame
```

## 가상 파일시스템들

리눅스에는 실제 파일이 아닌 커널 정보를 파일 형태로 제공하는 특별한 파일시스템들이 있습니다:

### /proc 파일시스템

```bash
# 프로세스 정보
ls /proc/[PID]/

# 시스템 정보
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/version
```

### /sys 파일시스템

```bash
# 하드웨어 정보
ls /sys/class/
ls /sys/devices/

# CPU 정보
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
```

### /dev 파일시스템

```bash
# 디바이스 파일들
ls -la /dev/

# 블록 디바이스
ls /dev/sd*

# 문자 디바이스
ls /dev/tty*
```

## 커널 공간 vs 사용자 공간

리눅스에서 가장 중요한 구분은 커널 공간과 사용자 공간의 분리입니다:

### 커널 공간 (Kernel Space)

- **권한**: 하드웨어에 직접 접근 가능
- **메모리**: 물리 메모리에 직접 매핑
- **실행 모드**: 특권 모드 (Ring 0)
- **보호**: 사용자 프로그램에서 직접 접근 불가
### 사용자 공간 (User Space)

- **권한**: 제한된 권한, 시스템 콜을 통해서만 커널 기능 사용
- **메모리**: 가상 메모리 주소 공간
- **실행 모드**: 사용자 모드 (Ring 3)
- **보호**: 다른 프로세스나 커널에 영향을 주지 못함
## 시스템 콜 (System Calls)

사용자 공간과 커널 공간을 연결하는 인터페이스입니다:

```bash
# 프로그램이 사용하는 시스템 콜 추적
strace ls

# 시스템 콜 통계
strace -c ls

# 특정 시스템 콜만 추적
strace -e trace=open,read,write cat /etc/hostname
```

### 주요 시스템 콜 카테고리

- **파일 조작**: open(), read(), write(), close()
- **프로세스 관리**: fork(), exec(), wait(), exit()
- **메모리 관리**: mmap(), brk(), sbrk()
- **네트워크**: socket(), bind(), listen(), accept()
## 리눅스 아키텍처의 장점

### 모듈성

- 각 구성요소가 독립적으로 개발/유지보수 가능