개념 정리
보안과 안정성 때문에 운영체제가 제공하는 서비스(파일 접근, 프로세스 생성 등)를 일반 프로그램(사용자 공간)에서 직접 사용할 수 없음따라서 사용자 프로그램은 필요한 기능을 요청하기 위해 시스템 콜이라는 특별한 인터페이스를 통해 OS 커널에 대행을 요청함시스템 콜이 호출되면 CPU의 실행 권한이 사용자 모드에서 커널 모드로 전환되어, 운영체제가 해당 요청을 직접 처리1. 커널 초기화 및 파일 시스템 마운트
부트로더가 커널을 메모리에 로드하면, 커널은 시스템을 사용 가능한 상태로 만들기 위해 초기화 작업을 시작한다.
하드웨어 장치 드라이버 초기화
CPU, 메모리, 디스크, 네트워크 카드 등 하드웨어 장치를 인식각 장치를 제어하기 위한 드라이버를 로드하고 초기화하드웨어와 OS 간 통신 가능한 상태로 설정마운트(Mount)란?
물리적 저장 장치(HDD, SSD 등)에 있는 파일 시스템을 OS의 디렉토리 구조에 연결하는 과정이다.
루트 파일 시스템 마운트 과정
- 커널이 부트 파라미터로부터 루트 파일 시스템의 위치를 확인
- 해당 저장 장치를 '/' (루트) 디렉토리에 연결
- OS가 이 저장소에 접근할 수 있게 됨
루트 파일 시스템 구성
/bin: 기본 실행 파일 (ls, cp, cat 등)/etc: 시스템 설정 파일/usr: 사용자 프로그램 및 라이브러리/var: 가변 데이터 (로그 파일 등)/home: 사용자 홈 디렉토리이 단계가 완료되면 OS는 설정 파일과 주요 시스템 바이너리를 읽을 수 있는 상태가 된다.
2. 첫 사용자 공간 프로세스 실행 (init/systemd)
커널 공간(Kernel Space)
OS의 핵심 부분이 실행되는 메모리 영역하드웨어에 직접 접근 가능높은 권한으로 동작사용자 공간(User Space)
일반 응용 프로그램이 실행되는 메모리 영역하드웨어에 직접 접근 불가시스템 콜을 통해 커널에 요청커널은 파일 시스템 마운트가 완료되면, 첫 번째 사용자 공간 프로세스를 실행한다.
init/systemd의 특징
PID(Process ID) 1번을 할당받음시스템에서 가장 먼저 시작되는 사용자 공간 프로세스커널에 의해 직접 실행되는 유일한 프로세스모든 다른 프로세스의 부모 프로세스 역할init/systemd의 역할
시스템 초기화 총괄다른 프로세스 생성 및 관리서비스(데몬) 시작 및 관리고아 프로세스(부모가 죽은 프로세스) 수습시스템 종료 및 재부팅 관리init vs systemd
init: 전통적인 초기화 시스템, 순차적 실행systemd: 현대적인 초기화 시스템, 병렬 실행으로 부팅 속도 향상, 대부분의 최신 리눅스 배포판에서 사용3. 시스템 서비스 및 런레벨 초기화
init/systemd는 설정 파일을 읽어 시스템 운영에 필요한 서비스들을 시작한다.
실행 방식
순차적 실행: init 시스템에서 사용, 하나씩 차례로 실행병렬 실행: systemd에서 사용, 여러 서비스를 동시에 시작하여 부팅 속도 향상네트워크 서비스
네트워크 인터페이스 설정IP 주소 할당 (DHCP 또는 고정 IP)네트워크 연결 활성화로그 시스템
시스템 로그 수집 및 기록이벤트 및 오류 메시지 저장디버깅 및 문제 해결을 위한 정보 제공스케줄러
정기적으로 실행되는 작업 관리 (cron)시스템 유지보수 작업 자동화백업, 로그 정리 등데몬(Daemon)
백그라운드에서 지속적으로 실행되는 서비스예시: 웹 서버(Apache, Nginx), 데이터베이스(MySQL), SSH 서버 등사용자 로그인 없이도 계속 동작런레벨(Runlevel) - init 시스템
시스템의 동작 상태를 나타내는 숫자 (0-6)0: 시스템 종료1: 싱글 유저 모드 (복구 모드)3: 멀티 유저 모드 (CLI)5: 그래픽 환경6: 재부팅타겟(Target) - systemd
런레벨과 유사한 개념이지만 더 유연multi-user.target: CLI 환경graphical.target: GUI 환경4. 사용자 로그인 환경 준비
시스템 서비스가 정상적으로 실행되면, 사용자가 시스템에 접근할 수 있는 환경이 준비된다.
CLI (Command Line Interface) 환경
텍스트 기반 콘솔 (TTY)검은 화면에 login: 프롬프트 표시Getty 프로세스가 실행되어 로그인 대기사용자 입력을 받아 /bin/login 프로그램 실행GUI (Graphical User Interface) 환경
디스플레이 매니저 실행 (GDM, LightDM, SDDM 등)X Server 또는 Wayland 그래픽 서버 시작그래픽 로그인 화면 표시마우스와 키보드로 사용자 인증