운영체제 기본/Linux/x86-64/BIOS 부팅/GRUB의 커널 적재와 제어권 전달: 두 판 사이의 차이

역링크 갱신 완료 후 불필요한 호환 span id 제거
잔글 관리자님이 운영체제 기본/Linux/x86-64/BIOS 부팅/GRUB에서 커널로 문서를 운영체제 기본/Linux/x86-64/BIOS 부팅/GRUB의 커널 적재와 제어권 전달 문서로 이동했습니다: 문서 내용을 직관적으로 나타내는 명사형 제목으로 정리
 
(같은 사용자의 중간 판 3개는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[운영체제 기본/x86-64 Linux의 BIOS 부팅|부팅 목차]] · 다음: [[운영체제 기본/x86-64 Linux의 BIOS 부팅/진입 규약과 압축 해제|진입 규약과 압축 해제]]
{{이전 다음 문서
|목차=[[운영체제 기본/Linux/x86-64/BIOS 부팅|BIOS 부팅 목차]]
|다음=다음 문서 →<br />[[운영체제 기본/Linux/x86-64/BIOS 부팅/진입 규약과 압축 해제|진입 규약과 압축 해제]]
}}


'''BIOS 환경의 GRUB 2.12가 <code>linux</code> 명령으로 Linux v6.12의 x86-64 bzImage를 부팅하는 경로'''를 다룬다. GRUB 메뉴에서 커널을 선택한 시점부터 시작한다.
'''BIOS 환경의 GRUB 2.12가 <code>linux</code> 명령으로 Linux v6.12의 x86-64 bzImage를 부팅하는 경로'''를 다룬다. GRUB 메뉴에서 커널을 선택한 시점부터 시작한다.
50번째 줄: 53번째 줄:
커널 적재 주소 역시 언제나 <code>0x100000</code>이라고 단정하면 안 된다. GRUB는 헤더의 재배치 가능 여부, 정렬 조건, 선호 주소와 초기 실행 공간 크기를 읽어 메모리를 확보한다. 실제 선택한 위치에 맞춰 <code>code32_start</code>도 조정한다. 여기까지는 압축된 이미지를 실행할 공간을 준비하는 단계이며, GRUB가 Linux의 압축 해제 작업을 대신 끝낸 상태는 아니다.<ref name="grub-linux" />
커널 적재 주소 역시 언제나 <code>0x100000</code>이라고 단정하면 안 된다. GRUB는 헤더의 재배치 가능 여부, 정렬 조건, 선호 주소와 초기 실행 공간 크기를 읽어 메모리를 확보한다. 실제 선택한 위치에 맞춰 <code>code32_start</code>도 조정한다. 여기까지는 압축된 이미지를 실행할 공간을 준비하는 단계이며, GRUB가 Linux의 압축 해제 작업을 대신 끝낸 상태는 아니다.<ref name="grub-linux" />


<code>initrd</code> 명령은 별도의 이미지를 메모리에 올리고 그 주소와 크기를 기록한다. 이름이 initrd여도 실제 내용은 initramfs일 수 있다. 부트로더 관점에서는 커널에 전달할 바이트 배열이며, 이를 해석하여 초기 루트 파일시스템으로 사용하는 일은 커널 쪽 일이다. 이 데이터가 <code>/init</code> 파일로 이어지는 과정은 [[운영체제 기본/x86-64 Linux의 BIOS 부팅/루트 파일시스템과 init 선택#init 실행을 위한 루트 파일시스템 준비|루트 파일시스템과 init 선택]]에서 다룬다.
<code>initrd</code> 명령은 별도의 이미지를 메모리에 올리고 그 주소와 크기를 기록한다. 이름이 initrd여도 실제 내용은 initramfs일 수 있다. 부트로더 관점에서는 커널에 전달할 바이트 배열이며, 이를 해석하여 초기 루트 파일시스템으로 사용하는 일은 커널 쪽 일이다. 이 데이터가 <code>/init</code> 파일로 이어지는 과정은 [[운영체제 기본/Linux/x86-64/BIOS 부팅/루트 파일시스템과 init 선택#init 실행을 위한 루트 파일시스템 준비|루트 파일시스템과 init 선택]]에서 다룬다.


== boot_params와 부트 정보 전달 ==
== boot_params와 부트 정보 전달 ==
82번째 줄: 85번째 줄:


== 커널 인계 직전의 CPU 상태 ==
== 커널 인계 직전의 CPU 상태 ==
GDT의 디스크립터와 세그먼트 선택자가 주소 해석과 권한을 정하는 방식은 [[운영체제 기본/x86-64 Linux의 BIOS 부팅/GDT와 LDT 초기화|GDT와 LDT 초기화]]에서 설명한다.
GDT의 디스크립터와 세그먼트 선택자가 주소 해석과 권한을 정하는 방식은 [[운영체제 기본/Linux/x86-64/BIOS 부팅/GDT와 LDT 초기화|GDT와 LDT 초기화]]에서 설명한다.


부팅 규약은 데이터를 어디에 놓는지만 정하지 않는다. CPU가 어떤 상태로 첫 명령을 실행해야 하는지도 정한다. 이 32비트 진입에서는 다음 상태가 인계 계약이다.<ref name="boot-protocol" />
부팅 규약은 데이터를 어디에 놓는지만 정하지 않는다. CPU가 어떤 상태로 첫 명령을 실행해야 하는지도 정한다. 이 32비트 진입에서는 다음 상태가 인계 계약이다.<ref name="boot-protocol" />
124번째 줄: 127번째 줄:
BIOS용 GRUB에는 <code>linux16</code>과 <code>initrd16</code>도 있다. 이 경로는 Linux의 16비트 setup에 진입하며, setup이 BIOS 기반 초기 작업과 보호 모드 전환을 수행한다. 하지만 그것은 이 문서의 일반 <code>linux</code> 경로와 다른 선택이다. '''BIOS로 시작했다는 이유만으로 Linux의 16비트 setup도 실행되었다고 결론 내릴 수 없다.'''<ref name="grub-manual" />
BIOS용 GRUB에는 <code>linux16</code>과 <code>initrd16</code>도 있다. 이 경로는 Linux의 16비트 setup에 진입하며, setup이 BIOS 기반 초기 작업과 보호 모드 전환을 수행한다. 하지만 그것은 이 문서의 일반 <code>linux</code> 경로와 다른 선택이다. '''BIOS로 시작했다는 이유만으로 Linux의 16비트 setup도 실행되었다고 결론 내릴 수 없다.'''<ref name="grub-manual" />


64비트 모드 전환과 압축 해제는 [[운영체제 기본/x86-64 Linux의 BIOS 부팅/진입 규약과 압축 해제|다음 장]]으로 이어진다.
64비트 모드 전환과 압축 해제는 [[운영체제 기본/Linux/x86-64/BIOS 부팅/진입 규약과 압축 해제|다음 장]]으로 이어진다.


== 참고 문헌 ==
== 참고 문헌 ==
<references />
<references />
{{이전 다음 문서
|목차=[[운영체제 기본/Linux/x86-64/BIOS 부팅|BIOS 부팅 목차]]
|다음=다음 문서 →<br />[[운영체제 기본/Linux/x86-64/BIOS 부팅/진입 규약과 압축 해제|진입 규약과 압축 해제]]
}}
{{운영체제 기본 둘러보기}}