운영체제 기본/Linux의 ELF 로딩: 두 판 사이의 차이

실행 이미지 교체와 ELF 적재 각론 목차 신설
 
ELF 목차에서 부팅·init 안내를 분리
 
(같은 사용자의 중간 판 2개는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[운영체제 기본|운영체제 기본 목차]]
[[운영체제 기본|운영체제 기본 목차]]


Linux v6.12의 x86-64 환경에서 <code>execve()</code> 요청이 새 사용자 프로그램의 첫 명령 실행으로 이어지는 과정을 다룬다. 파일 형식의 판별, ELF 세그먼트의 주소 공간 배치, 초기 스택과 레지스터 준비를 나누어 읽는다.
Linux v6.12에서 <code>execve()</code> 요청이 새 사용자 프로그램의 첫 명령 실행으로 이어지는 과정을 다룬다. 정적 링크된 ET_EXEC 실행 파일을 기준으로 파일 형식의 판별, ELF 세그먼트의 배치, 초기 스택과 레지스터 준비를 순서대로 읽는다. 사용자 모드 진입은 x86-64와 RISC-V RV64를 비교한다.


== 읽는 순서 ==
== 읽는 순서 ==
# [[운영체제 기본/Linux의 ELF 로딩/execve와 실행 이미지 교체|execve와 실행 이미지 교체]]: 실행 파일을 열고 binfmt 핸들러를 선택하며 기존 실행 이미지를 교체하는 과정.
# [[운영체제 기본/Linux의 ELF 로딩/execve와 실행 이미지 교체|execve와 실행 이미지 교체]]: 실행 파일을 열고 binfmt 핸들러를 선택하며 기존 실행 이미지를 교체하는 과정.
# [[운영체제 기본/Linux의 ELF 로딩/ELF 세그먼트와 주소 공간|ELF 세그먼트와 주소 공간]]: PT_LOAD 매핑, BSS, 주소 재배치와 PT_INTERP의 역할.
# [[운영체제 기본/Linux의 ELF 로딩/ELF 세그먼트와 주소 공간|ELF 세그먼트와 주소 공간]]: ELF 구조, PT_LOAD에 따른 파일 매핑과 BSS의 0 초기화.
# [[운영체제 기본/Linux의 ELF 로딩/초기 스택과 사용자 모드 진입|초기 스택과 사용자 모드 진입]]: argv·envp·auxv, 첫 RIP와 RSP, 일반 exec와 PID 1의 복귀 경로.
# [[운영체제 기본/Linux의 ELF 로딩/초기 스택과 사용자 모드 진입|초기 스택과 사용자 모드 진입]]: 인자와 초기 스택, x86-64·RV64의 사용자 진입, 마지막으로 동적 링킹의 차이.


부팅 중 실행할 init을 고르는 과정은 [[운영체제 기본/x86-64 Linux의 부팅/루트 파일시스템과 init 선택|루트 파일시스템과 init 선택]]에 있다. 파일 매핑과 페이지 폴트는 [[운영체제 기본/가상 메모리|가상 메모리]]와 [[운영체제 기본/Linux의 파일 메모리 매핑|Linux의 파일 메모리 매핑]]에서 이어진다.
파일 매핑과 페이지 폴트는 [[운영체제 기본/가상 메모리|가상 메모리]]와 [[운영체제 기본/Linux의 파일 메모리 매핑|Linux의 파일 메모리 매핑]]에서 이어진다.