iconicon
BBBlllooogggPPPooorrrtttfffooollliiiooo
    Uncategorized

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

    2026년 04월 12일

    On this page

    • 리눅스 시스템의 계층 구조
    • 1. 하드웨어 계층 (Hardware Layer)
    • 2. 커널 (Kernel) - 리눅스의 핵심
    • 주요 커널 구성요소
    • 프로세스 관리 (Process Management)
    • 메모리 관리 (Memory Management)
    • 파일 시스템 (File System)
    • 장치 드라이버 (Device Drivers)
    • 네트워크 스택 (Network Stack)
    • 3. 시스템 라이브러리 (System Libraries)
    • glibc (GNU C Library)
    • 기타 시스템 라이브러리들
    • 4. 사용자 공간 (User Space)
    • 시스템 유틸리티
    • 셸 (Shell)
    • 데스크탑 환경
    • 리눅스 부팅 과정에서 보는 아키텍처
    • 가상 파일시스템들
    • /proc 파일시스템
    • /sys 파일시스템
    • /dev 파일시스템
    • 커널 공간 vs 사용자 공간
    • 커널 공간 (Kernel Space)
    • 사용자 공간 (User Space)
    • 시스템 콜 (System Calls)
    • 주요 시스템 콜 카테고리
    • 리눅스 아키텍처의 장점
    • 모듈성

    On this page
    • 리눅스 시스템의 계층 구조
    • 1. 하드웨어 계층 (Hardware Layer)
    • 2. 커널 (Kernel) - 리눅스의 핵심
    • 주요 커널 구성요소
    • 프로세스 관리 (Process Management)
    • 메모리 관리 (Memory Management)
    • 파일 시스템 (File System)
    • 장치 드라이버 (Device Drivers)
    • 네트워크 스택 (Network Stack)
    • 3. 시스템 라이브러리 (System Libraries)
    • glibc (GNU C Library)
    • 기타 시스템 라이브러리들
    • 4. 사용자 공간 (User Space)
    • 시스템 유틸리티
    • 셸 (Shell)
    • 데스크탑 환경
    • 리눅스 부팅 과정에서 보는 아키텍처
    • 가상 파일시스템들
    • /proc 파일시스템
    • /sys 파일시스템
    • /dev 파일시스템
    • 커널 공간 vs 사용자 공간
    • 커널 공간 (Kernel Space)
    • 사용자 공간 (User Space)
    • 시스템 콜 (System Calls)
    • 주요 시스템 콜 카테고리
    • 리눅스 아키텍처의 장점
    • 모듈성

    ---
    
    # '리눅스 기초(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()
    ## 리눅스 아키텍처의 장점
    
    ### 모듈성
    
    - 각 구성요소가 독립적으로 개발/유지보수 가능