# 4. UEFI 부팅 단계

UEFI를 통한 시스템의 부팅 과정은 Legacy BIOS보다 더 방법론적이며 조직적인 구성을 나타낸다.

<figure><img src="https://224378457-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgAFiQ5sYs9AjXHJxMFpe%2Fuploads%2FLkrL7rJ0pn9IcEwinyT1%2Fimage.png?alt=media&#x26;token=98122989-6133-466f-be05-da753e9afbe6" alt=""><figcaption><p>UEFI boot process</p></figcaption></figure>

총 7단계로 나타낼 수 있으며 각 단계별 수행 동작 정보는 아래와 같다.

SEC-PEI, DXE Phase까지는 BIOS의 POST(Power-On Self Test)에 해당하는 PI(Platform Initialization) 단계이다.

### 1. **SEC**

CPU의 초기화는 32비트 protected mode나 64비트 long mode로 수행할 수 없기 때문에 16비트 real mode의 instruction을 실행한다. 이 real mode에서 수행되는 작업은 프로세서를 보호 모드로 전환하는 것이다. 그리고 DRAM이 초기화되기 이전이기 때문에 CPU cache를 임시 RAM으로 사용할 수 있도록 한다(Cache-As-Ram).

### 2. **PEI**

SPI flash 내부의 FV(firware volume)에 존재하며 윈도우 PE형식과 유사한 TE형식의 모듈로 구성되어 있다. 주 메모리 검색 및 초기화를 담당하고, 메인 RAM 사용이 가능해지면 CAR 메모리를 마무리하고 마더보드의 다른 장치 초기화를 이행한다.

* TE(Trese Executable): PE 형식보다 더 작은 이미지 크기를 지닌 파일 형식

### 3. **DXE**

DXE 단계에서는 PEI와 유사하게 FV가 존재한다. 하지만 TE file 형식이 아닌 실행 모듈을 이용하며, PE32와 PE32+(64비트) file이 사용된다. 모든 DXE 모듈을 열거하고 하나씩 실행하는 전용 디스패처가 존재한다. 각 모듈은 SMM 설정, 네트워킹, 스토리지 및 파일 시스템 스택 노출 등 기본적으로 UEFI 기반 부트로더가 OS(커널)을 불러오는데 필요한 모든 서비스를 제공한다. 보안 부팅이 구현되는 곳이며 가장 중요한 단계이다.

* SMM(System Management Mode): SMI(System Management Interrupt)에 의해 호출되어지며 root 권한으로 펌웨어를 실행하는 모드이다.

### 4. **BDS**

DXE 단계 이후에 GPT 디스크와 EFI 시스템 파티션을 찾는다. 윈도우의 경우에는 bootmgfw\.efi 가 로드되고 실행되며, 리눅스의 경우에는 grub.efi 등 각 운영체제별 부트로더 정보가 존재한다.

### 5. **TLS**

이 단계에서는 OS가 없는 UEFI 셸(`shellx64.efi`) 실행이 가능하며 일반적인 부트 로더가 실행된다. winload.efi와 같은 부트로더는 커널을 위한 실행 환경을 구축하고 커널 자체를 로드한다. 완료 후에는 `ExitBootServices()`라는 UEFI 서비스를 호출하고 부트 프로세스의 종료를 알린다.

### 6. RT

EFI는 부트 프로세스 종료 이후에 커널이 동작을 수행하고 있는 동안에 디바이스 드라이버를 로드하거나 서비스 및 백그라운드 프로세스 생성에 이용되어 진다. core 서비스들 중에서 부트 프로세스 종류 이후에도 메모리에 상주되는 런타임 서비스들이 이에 관여한다.
