{{위키데이터 속성 추적}}
[[파일:Logo of the UEFI Forum.svg|섬네일|UEFI 로고]]
[[파일:EFI_KOR.png|섬네일|350px|소프트웨어 스택에서의 확장 펌웨어 인터페이스의 위치]]
'''통일 확장 펌웨어 인터페이스''' 또는 '''통합 확장 펌웨어 인터페이스'''({{llang|en|Unified Extensible Firmware Interface, UEFI}})는 [[운영 체제]]와 플랫폼 [[펌웨어]] 사이의 소프트웨어 인터페이스를 정의하는 규격이다. [[IBM PC 호환기종]]에서 사용되는 [[바이오스]] 인터페이스를 대체할 목적으로 개발되었다. [[인텔]]이 개발한 '''EFI'''(Extensible Firmware Interface) 규격에서 출발하였다. EFI의 관행과 데이터 포맷 중 일부는 [[마이크로소프트 윈도우]]의 것과 동일하게 사용된다.<ref>[https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html IBM PC Real Time Clock should run in UT]. Cl.cam.ac.uk. Retrieved on 2013-10-30.</ref><ref name="Matthew Garrett">{{웹 인용 |url=https://www.youtube.com/watch?v=V2aq5M3Q76U#t=14m45s |title=EFI and Linux: The Future Is Here, and It's Awful  |first=Matthew |last=Garrett  |date=19 January 2012 |work=[[linux.conf.au]] 2012 |accessdate=2 April 2012}}</ref> 2005년, UEFI는 EFI 1.10 (EFI의 최신판)의 사용을 권장치 않기로 했다. [[통일 EFI 포럼]]은 UEFI 사양을 관리하는 산업체이다.

== 역사 ==
원래 EFI가 개발된 동기는 1990년대 중반에 인텔과 HP가 초대 [[아이테니엄]]기의 개발 초기까지 거슬러 올라간다. 개인용 컴퓨터의 바이오스 제한(16비트 [[보호 모드]], 1 메가바이트의 [[주소 공간]], [[PC/AT]] 하드웨어에의 의존) 때문에 아이테니엄 대상으로 한 거대한 서버 플랫폼에는 채용할 수 없는 것이 판명되었다. 여기서 교훈을 얻은 첫 성과를 '''인텔 부트 이니셔티브'''(Intel Boot Initiative)로 부르는데 나중에 EFI와 이름을 바꾸는 것이었다.

EFI 규격은 2000년 12월 12일에 인텔이 공개했다.(첫 버전은 1.01이지만, 법적인 문제 등으로 바로 취소되었다). EFI 규격 1.10은 2002년 12월 1일에 인텔이 공개했다. 여기에는 버전 1.02부터 몇 가지 상세한 기능 강화와 EFI 드라이버 모델이 기재되어 있다.

2005년, 인텔은 이 규격을 [[UEFI 포럼]]에 공개했다. 이 포럼은 규격의 개발과 보급에 책임을 지며 실시한다. EFI는 이것을 반영하여 유나이티드 EFI(UEFI)와 이름을 바꾸어서, 많은 문서가 양쪽 모두의 용어를 함께 사용하게 되었다.

UEFI 포럼은 2007년 1월 7일에 UEFI 규격 버전 2.1을 공개했는데, 이것은 2007년 3월 현재의 최신 규격이 되어왔다. 이 규격에는 개선된 암호화, 네트워크 인증, 사용자 인터페이스의 아키텍처가 추가되어 있다.

== 기능 ==
=== 서비스 ===
EFI는 두 종류의 서비스가 있다: 부트 서비스, 런타임 서비스. 부트 서비스는 펌웨어가 플랫폼을 소유하는 동안에만 이용이 가능하며(예: ExitBootServices 호출 이전) 다양한 장치, 버스, 블록, 파일 서비스 상의 텍스트와 그래픽 콘솔을 포함하고 있다. 런타임 서비스들은 운영 체제가 실행 중인 동안에 접근 가능하며, 날짜, 시간, [[NVRAM]] 접근과 같은 서비스들을 포함한다.

또, 그래픽 출력 프로토콜(GOP)은 제한된 런타임 서비스 지원을 제공한다. 운영 체제는 런타임 모드 중에 GOP가 제공하는 프레임버퍼에 직접 쓸 권한이 있다. 그러나 OS 그래픽스 드라이버가 로드될 때까지 런타임 서비스 모드로 전환한 뒤에는 비디오 모드를 변경하는 기능은 손실된다.

; 변수 서비스
: UEFI 변수들은 데이터, 특히 플랫폼 펌웨어와 운영 체제 사이에 공유되는 비휘발성 데이터를 저장하는 방법을 제공한다. 변수 이름공간들은 GUID로 식별하며, 변수들은 키/값 쌍을 이룬다. 이를테면, 변수들은 운영 체제 충돌 이후 다시 시작 시 NVRAM에 충돌 메시지를 보관하는데 사용할 수 있다.<ref name=theh-brickwindows>{{웹 인용|title=Samsung UEFI bug: Notebook bricked from Windows|url=http://www.h-online.com/open/news/item/Samsung-UEFI-bug-Notebook-bricked-from-Windows-1801439.html|publisher=The H|accessdate=27 February 2013}}</ref>

; 시간 서비스
: UEFI는 장치 독립 시간 서비스들을 제공한다. 시간 서비스들은 타임존과 일광 절약 필드를 지원하므로, 하드웨어 [[실시간 시계]]가 로컬 시간이나 UTC로 설정할 수 있게 한다.<ref>UEFI specification, section 7.3</ref> PC-AT 실시간 클럭을 사용하는 머신에서 시계는 BIOS 기반 윈도우와의 호환성을 위해 로컬 시간으로 설정해야 한다.<ref name="Matthew Garrett"/>

=== 응용 프로그램 ===
[[파일:Efi flowchart extended.svg|섬네일|upright=1.9|EFI 부트 매니저와 EFI 드라이버 간의 상호 작용.]]
운영 체제를 로드하는 것과는 독립적으로, UEFI는 단독 UEFI 응용 프로그램들을 실행하는 기능이 있으며, 이러한 응용 프로그램들은 시스템 제조업체와는 독립적으로 개발, 설치할 수 있다. UEFI 응용 프로그램들은 ESP의 파일들로 상주하며, 펌웨어의 부트 매니저나 다른 UEFI 응용 프로그램들에 의해 직접 시작할 수 있다. 한 계열의 UEFI 응용 프로그램들은 운영 체제 로더들인데, 이를테면 [[rEFInd]], [[gummiboot]], [[윈도우 부트 매니저]]가 있다. 이들은 특정한 운영 체제를 시작하며 선택적으로 사용자 인터페이스를 제공함으로써 실행할 다른 UEFI 응용 프로그램을 선택할 수 있게 한다. UEFI 셸과 같은 유틸리티들 또한 UEFI 응용 프로그램들이다.

=== 프로토콜 ===
EFI는 프로토콜을 2개의 바이너리 모듈 간의 통신에 사용되는 소프트웨어 인터페이스 집합으로 정의한다. 모든 EFI 드라이버들은 프로토콜을 통해 서비스들을 다른 대상들에 제공해야 한다.

=== 장치 드라이버 ===
표준 아키텍처에 특화된 장치 드라이버뿐 아니라, EFI 사양은 EFI 바이트 코드, 즉 EBC라는 프로세서 독립 [[장치 드라이버]] 환경을 제공한다. 시스템 펌웨어는 환경에 상주하거나 로드되는 EBC 이미지를 인터프리터가 전달하기 위해 UEFI 사양에 의거하여 필수적이다. 그러므로 EBC는 [[파워PC]] 기반 [[애플 매킨토시]]와 [[썬 마이크로시스템즈]] [[SPARC]] 컴퓨터 등에 쓰이는 하드웨어 독립 펌웨어인 [[오픈 펌웨어]]와 비슷하다고 볼 수 있다.

일부 아키텍처 특화(EBC가 아닌) EFI 장치 드라이버 유형들은 운영 체제에서 사용할 수 있도록 인터페이스를 갖추고 있다. 이로써 기본적인 그래픽스 및 네트워크 기능을 위해 운영 체제에 특화된 드라이버가 로드될 때까지 운영 체제가 EFI에 의존할 수 있게 한다.

=== 그래픽스 기능 ===
EFI 사양은 장치 독립 그래픽스를 지원하는 한 방법으로 UGA (유니버설 그래픽 어댑터) 프로토콜을 정의하였다. UEFI는 UGA를 포함하지 않았으며 이것이 GOP(그래픽스 출력 프로토콜)로 대체되었는데, 여기에는 [[VGA]] 하드웨어 의존을 제거하려는 명확한 목표가 포함되어 있다. 이 둘은 비슷하다.<ref>{{웹 인용
 | url = http://www.intel.com/content/www/us/en/intelligent-systems/intel-embedded-graphics-drivers/faq-bios-firmware.html
 | title = Intel Embedded Graphics Drivers FAQ: BIOS and firmware
 | accessdate = 2014-05-19
 | publisher = [[Intel]]
}}</ref>

UEFI 2.1은 사용자 입력, 지역화 문자열, 글꼴, 폼 (HTML)을 관리하기 위해 휴먼 인터페이스 인프라스트럭처(HII)를 정의하였다. 이로써 [[OEM]]이나 [[IBV]](독립 바이오스 업체)가 부팅 전 구성을 위한 그래픽 인터페이스를 설계할 수 있게 한다. UEFI 그 자체는 사용자 인터페이스를 정의하지 않는다.

초기의 대부분의 UEFI 펌웨어 구현체들은 콘솔 기반이었으나, 2007년 초 즈음 일부 구현체들이 그래픽 사용자 인터페이스를 제공하기 시작했다.

=== EFI 시스템 파티션 ===
{{본문|EFI 시스템 파티션}}

종종 ESP로 줄여서 이르는 EFI 시스템 파티션은 UEFI 사양을 따르는 컴퓨터에 사용되는 [[데이터 스토리지 디바이스]] 파티션이다. 컴퓨터의 전원이 켜질 때 UEFI 펌웨어에 의해 접근되는 이 파티션은 UEFI 응용 프로그램들 및 이러한 프로그램들의 실행에 필요한 파일들([[운영 체제 커널]] 포함)을 저장한다.

지원되는 [[파티션 테이블]] 스킴에는 [[마스터 부트 레코드|MBR]] 및 [[GUID 파티션 테이블|GPT]] 뿐 아니라 광 디스크 상의 [[엘 토리토]] 볼륨을 포함한다.<ref name="uefi-spec-24">{{웹 인용
 | url = http://www.uefi.org/specifications
 | title = UEFI Specifications (version 2.4 and older)
 | format = PDF | publisher = Unified EFI, Inc.
 | date = June 2013 | accessdate = 2013-09-25
}}</ref>{{rp|section 2.6.2}}
ESP에 사용할 경우, UEFI는 [[FAT 파일 시스템]]에 특화된 버전을 정의하며, 이는 UEFI 사양의 일부로서, 오리지널 FAT 사양과는 별개로 유지보수되는데, 여기에는 ESP 상의 [[FAT32]] 파일 시스템류들과 이동식 미디어의 [[FAT16]], [[FAT12]] 파일 시스템을 아우른다.<ref name="uefi-spec-24" />{{rp|section 12.3}}<ref name="uefi-spec-2.5">{{웹 인용
 | url = http://www.uefi.org/sites/default/files/resources/UEFI%202_5.pdf#page=536
 | title = UEFI Specification Version 2.5, Section 12.3 File System Format
 | date = April 2015 | accessdate = 2015-05-29
 | website = uefi.org
 | format = PDF | pages = 536, 537
 | quote = The file system supported by the Extensible Firmware Interface is based on the FAT file system. EFI defines a specific version of FAT that is explicitly documented and testable. Conformance to the EFI specification and its associate reference documents is the only definition of FAT that needs to be implemented to support EFI. To differentiate the EFI file system from pure FAT, a new partition file system type has been defined.
}}</ref><ref>{{웹 인용
 | url = https://developer.apple.com/library/mac/technotes/tn2166/_index.html#//apple_ref/doc/uid/DTS10003927-CH1-SUBSECTION6
 | title = Technical Note TN2166: Secrets of the GPT
 | date = 2006-11-06 | accessdate = 2015-05-06
 | website = developer.apple.com
}}</ref> ESP 또한 하위 바이오스 호환의 일부로서 부트 섹터를 위한 공간을 제공한다.<ref name="arch-forum-uefi-mbr">{{웹 인용| url = https://bbs.archlinux.org/viewtopic.php?id=142637 | title = UEFI system booting from MBR partition table and GRUB legacy | date = June 2012 | accessdate = 2013-10-06 | publisher = Arch Linux Forums}}</ref>

=== 부팅 ===
==== UEFI 부팅 ====
BIOS와 달리, UEFI는 [[부트 섹터]]에 의존하지 않으며, 대신 UEFI의 사양의 일부로서 [[멀티 부팅|부트 매니저]]를 정의한다.
==== CSM 부팅 ====
하위 호환성을 보장하기 위해, PC 등급의 컴퓨터에서 대부분의 UEFI 펌웨어 구현들은 레거시 바이오스 모드에서의 MBR 파티션 디스크 부팅도 지원하며, 이는 레거시 바이오스 호환을 제공하는 호환성 지원 모듈(Compatibility Support Module , CSM)을 통해 처리된다.
==== 네트워크 부팅 ====
UEFI 사양은 [[사전 부팅 실행 환경]](PXE)을 통해 네트워크를 경유한 부팅 지원을 포함한다.
==== 시큐어 부트 ====
UEFI 2.3.1 Errata C 사양 이상에서는 시큐어 부트(secure boot)라는 프로토콜을 정의하며, 적재 가능한 [[디지털 서명]]으로 서명되지 않은 드라이버나 장치 로더의 로드를 막음으로써 부팅 프로세스에 보안을 제공할 수 있다.

== 비판 ==
* [[코어부트]]의 개발자 Ronald G. Minnich는 EFI에 대하여 [[칩셋]] 프로그래밍과 내부 구조에 관한 일련의 지적 재산권의 은닉을 위한 시도이며, 오픈소스인 [https://web.archive.org/web/20120423101551/http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Welcome TianoCore]를 통해 임의의 EFI를 구축하는 것이 가능하다고는 하나 이 또한 칩셋 제조사에서 공개하지 않거나 비자유 소프트웨어 라이선스에 따라 공개한 특정 부분에 의존할 수밖에 없게 되어 있다고 비판한 바 있다.<ref>{{웹 인용 |url=http://archive.fosdem.org/2007/interview/ronald+g+minnich |제목=보관된 사본 |확인날짜=2011-03-11 |보존url=https://web.archive.org/web/20110129035004/http://archive.fosdem.org/2007/interview/ronald+g+minnich |보존날짜=2011-01-29 |url-status=dead }}</ref>
* EFI는 대부분의 시스템에서 바이오스용 장치 드라이버와 운영체제용 장치 드라이버를 따로 필요로 하는 문제를 해결하는 역할은 하지 못한다.<ref>[https://www.youtube.com/watch?v=X72LgcMpM9k]</ref>
* EFI는 기존의 바이오스보다 더 유연한 원격 네트워크 부팅을 지원한다. 이는 보안 면에서는 취약점으로 작용할 수도 있다.<ref>[http://catless.ncl.ac.uk/Risks/26.18.html#subj13]</ref>

== 같이 보기 ==
* [[UEFI 포럼]]
* [[오픈 펌웨어]]
* [[바이오스]], [[오픈바이오스]]
* [[ACPI]]
* [[시스템 관리 바이오스]]
* [[x86-64]]
* [[코어부트]](구 LinuxBIOS)
* [[시스템 관리 모드]]

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* [http://www.uefi.org/ UEFI 홈페이지]
* [http://www.intel.com/technology/efi/ 인텔 EFI 페이지]
* [http://www.intel.com/technology/Framework/ 인텔 프레임워크 페이지]
* [https://web.archive.org/web/20080205221635/http://www.microsoft.com/whdc/system/platform/firmware/efibrief.mspx EFI에 대한 마이크로소프트의 공식 입장]
* [http://www.tianocore.org/ 인텔 스폰서 오픈 소스 EFI 펌웨어 발의]
* [http://elilo.sourceforge.net/ EFI 리눅스 로더 프로젝트 (ELILO)]
* [http://gnu-efi.sourceforge.net/ EFI 리눅스 그누 도구모음 (gnu-efi)]
* [http://www.ddj.com/dept/embedded/199500688?cid=RSSfeed_DDJ_All EFI Architecture] Dr. Dobbs 포털 본문

{{전거 통제}}

[[분류:바이오스]]