본문으로 이동
  • 현재 모든 문서는 작성 중입니다. 보시는 데 불편함이 있더라도 양해 부탁드립니다.

운영체제 기본/x86-64 Linux의 BIOS 부팅: 두 판 사이의 차이

~ldmsys
부팅 각론을 짧은 안내와 네 하위 장의 읽기 순서로 분리
태그: 대체됨
PID 1 첫 사용자 실행을 부팅 범위에 포함하도록 목차 정리
 
(같은 사용자의 중간 판 6개는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[운영체제 기본|운영체제 기본 목차]]
[[운영체제 기본|운영체제 기본 목차]]


Linux 커널이 제어를 넘겨받은 뒤, 사용자 공간의 첫 프로그램을 실행하기까지의 과정을 따라간다. 기준은 '''Linux v6.12, x86-64, bzImage의 64비트 부트 프로토콜'''이다. 다른 부팅 방식과 갈라지는 지점은 해당 장에서 구분한다.
BIOS 환경의 GRUB 2.12가 Linux v6.12의 x86-64 커널을 적재하고, 커널이 첫 사용자 프로그램인 init을 실행하기까지의 과정을 따라간다. GRUB의 일반 <code>linux</code> 명령이 사용하는 32비트 부트 프로토콜을 기준으로 한다.
 
전체 흐름은 '''진입 환경 준비 → 압축 해제된 커널의 초기화 → PID 1 생성 → init 실행'''이다. 아래 장을 순서대로 읽으며 각 단계가 무엇을 넘겨받고 무엇을 준비해 다음 단계로 넘기는지 살펴본다.


== 읽는 순서 ==
== 읽는 순서 ==
# [[운영체제 기본/x86-64 Linux의 부팅/진입 규약과 압축 해제|진입 규약과 압축 해제]] — 로더가 준비할 CPU 상태와 부트 정보, 두 startup_64의 차이.
# [[운영체제 기본/x86-64 Linux의 BIOS 부팅/GRUB에서 커널로|GRUB에서 커널로]]: 커널·initramfs 적재, boot_params와 CPU 상태의 인계.
# [[운영체제 기본/x86-64 Linux의 부팅/커널 초기화|커널 초기화]] — 초기 주소 공간과 C 실행 환경에서 start_kernel까지.
# [[운영체제 기본/x86-64 Linux의 BIOS 부팅/진입 규약과 압축 해제|진입 규약과 압축 해제]]: startup_32에서 64비트 모드로 전환하고 커널 본체를 배치하는 과정.
# [[운영체제 기본/x86-64 Linux의 부팅/PID 1 생성|PID 1 생성]] — 부트 태스크에서 별도 태스크를 만들고 나머지 초기화를 이어가는 과정.
# [[운영체제 기본/x86-64 Linux의 BIOS 부팅/GDT와 LDT 초기화|GDT와 LDT 초기화]]: 부트로더의 GDT에서 커널의 CPU별 GDT·TSS로 넘어가는 과정과 LDT의 초기 상태.
# [[운영체제 기본/x86-64 Linux의 부팅/init 실행과 사용자 모드 진입|init 실행과 사용자 모드 진입]] — /init과 init=의 선택, exec, 실제 사용자 모드 전환.
# [[운영체제 기본/x86-64 Linux의 BIOS 부팅/커널 초기화|커널 초기화]]: 초기 주소 공간과 스택, 예외 처리에서 start_kernel의 공통 초기화까지.
# [[운영체제 기본/x86-64 Linux의 BIOS 부팅/PID 1 생성|PID 1 생성]]: 부트 태스크와 PID 1의 분리, 나머지 초기화와 동기화.
# [[운영체제 기본/x86-64 Linux의 BIOS 부팅/루트 파일시스템과 init 선택|루트 파일시스템과 init 선택]]: rootfs와 initramfs, init 후보의 선택, PID 1의 첫 사용자 프로그램 실행.


함수 호출, 주소로의 분기, 태스크 생성, 프로그램 교체는 서로 다른 사건이다. 흐름도의 화살표를 읽을 때 이 차이를 구별하면 부팅 경로를 이해하기 쉽다.
실행 파일의 형식 판별, 세그먼트 매핑, 초기 스택과 레지스터 준비의 공통 원리는 [[운영체제 기본/Linux의 ELF 로딩|Linux의 ELF 로딩]]에서 설명한다.

2026년 10월 31일 (토) 14:26 기준 최신판

운영체제 기본 목차

BIOS 환경의 GRUB 2.12가 Linux v6.12의 x86-64 커널을 적재하고, 커널이 첫 사용자 프로그램인 init을 실행하기까지의 과정을 따라간다. GRUB의 일반 linux 명령이 사용하는 32비트 부트 프로토콜을 기준으로 한다.

읽는 순서

  1. GRUB에서 커널로: 커널·initramfs 적재, boot_params와 CPU 상태의 인계.
  2. 진입 규약과 압축 해제: startup_32에서 64비트 모드로 전환하고 커널 본체를 배치하는 과정.
  3. GDT와 LDT 초기화: 부트로더의 GDT에서 커널의 CPU별 GDT·TSS로 넘어가는 과정과 LDT의 초기 상태.
  4. 커널 초기화: 초기 주소 공간과 스택, 예외 처리에서 start_kernel의 공통 초기화까지.
  5. PID 1 생성: 부트 태스크와 PID 1의 분리, 나머지 초기화와 동기화.
  6. 루트 파일시스템과 init 선택: rootfs와 initramfs, init 후보의 선택, PID 1의 첫 사용자 프로그램 실행.

실행 파일의 형식 판별, 세그먼트 매핑, 초기 스택과 레지스터 준비의 공통 원리는 Linux의 ELF 로딩에서 설명한다.