컴퓨터 부팅 이후 프로세스 실행 과정
- CS
- 운영체제
개념 정리
시스템 콜이란?
- 보안과 안정성 때문에 운영체제가 제공하는 서비스(파일 접근, 프로세스 생성 등)를 일반 프로그램(사용자 공간)에서 직접 사용할 수 없음
- 따라서 사용자 프로그램은 필요한 기능을 요청하기 위해 시스템 콜이라는 특별한 인터페이스를 통해 OS 커널에 대행을 요청함
- 시스템 콜이 호출되면 CPU의 실행 권한이 사용자 모드에서 커널 모드로 전환되어, 운영체제가 해당 요청을 직접 처리
1. 커널 초기화 및 파일 시스템 마운트
커널 초기화
부트로더가 커널을 메모리에 로드하면, 커널은 시스템을 사용 가능한 상태로 만들기 위해 초기화 작업을 시작한다.
하드웨어 장치 드라이버 초기화
- CPU, 메모리, 디스크, 네트워크 카드 등 하드웨어 장치를 인식
- 각 장치를 제어하기 위한 드라이버를 로드하고 초기화
- 하드웨어와 OS 간 통신 가능한 상태로 설정
루트 파일 시스템 마운트
마운트(Mount)란?
물리적 저장 장치(HDD, SSD 등)에 있는 파일 시스템을 OS의 디렉토리 구조에 연결하는 과정이다.
루트 파일 시스템 마운트 과정
- 커널이 부트 파라미터로부터 루트 파일 시스템의 위치를 확인
- 해당 저장 장치를 '/' (루트) 디렉토리에 연결
- OS가 이 저장소에 접근할 수 있게 됨
루트 파일 시스템 구성
/bin: 기본 실행 파일 (ls, cp, cat 등)/etc: 시스템 설정 파일/usr: 사용자 프로그램 및 라이브러리/var: 가변 데이터 (로그 파일 등)/home: 사용자 홈 디렉토리
이 단계가 완료되면 OS는 설정 파일과 주요 시스템 바이너리를 읽을 수 있는 상태가 된다.
2. 첫 사용자 공간 프로세스 실행 (init/systemd)
사용자 공간 vs 커널 공간
커널 공간(Kernel Space)
- OS의 핵심 부분이 실행되는 메모리 영역
- 하드웨어에 직접 접근 가능
- 높은 권한으로 동작
사용자 공간(User Space)
- 일반 응용 프로그램이 실행되는 메모리 영역
- 하드웨어에 직접 접근 불가
- 시스템 콜을 통해 커널에 요청
init 또는 systemd 실행
커널은 파일 시스템 마운트가 완료되면, 첫 번째 사용자 공간 프로세스를 실행한다.
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 그래픽 서버 시작
- 그래픽 로그인 화면 표시
- 마우스와 키보드로 사용자 인증