Share to: share facebook share twitter share wa share telegram print page

ACPI

ACPI
Advanced Configuration and Power Interface
상태출판됨
최초 출판일1996년 12월
마지막 버전6.6
2025년 5월
조직
관련 표준통일 확장 펌웨어 인터페이스
분야전원 관리 펌웨어
약어ACPI
웹사이트uefi.org/acpi

고급 구성 및 전원 인터페이스(Advanced Configuration and Power Interface, ACPI)는 운영체제컴퓨터 하드웨어 구성 요소를 검색 및 구성하고, 전원 관리 (예: 사용하지 않는 하드웨어 구성 요소를 절전 상태로 전환), 자동 구성 (예: 플러그 앤 플레이핫 스와핑), 상태 모니터링을 수행하는 데 사용할 수 있는 개방형 표준이다. 1996년 12월에 처음 출시되었다. ACPI는 고급 전원 관리 (APM), MultiProcessor Specification, 플러그 앤 플레이 바이오스 (PnP) 사양을 대체하는 것을 목표로 한다.[1] ACPI는 전원 관리 및 구성 정책을 결정하기 위해 플랫폼별 펌웨어에 의존했던 이전의 바이오스 중심 시스템과는 달리 전원 관리를 운영체제의 제어하에 둔다.[2] 이 사양은 운영체제 주도 구성 및 전원 관리 (OSPM) 시스템의 핵심이다. ACPI는 장치 펌웨어 (예: 바이오스, 통일 확장 펌웨어 인터페이스), 컴퓨터 하드웨어 구성 요소 및 운영체제 간의 하드웨어 추상화 인터페이스를 정의한다.[3][4]

내부적으로 ACPI는 시스템 펌웨어 (통일 확장 펌웨어 인터페이스 또는 바이오스)를 통해 제공되는 명령어 목록("메서드")을 사용하여 사용 가능한 구성 요소와 그 기능을 운영체제 커널에 알리고, 커널은 이를 파싱한다. 그런 다음 ACPI는 내장된 최소 가상 머신을 사용하여 ACPI 머신 언어로 작성된 원하는 작업(예: 하드웨어 구성 요소 초기화)을 실행한다.

인텔, 마이크로소프트도시바가 원래 표준을 개발했으며, 나중에는 HP, 화웨이피닉스도 참여했다. 2013년 10월, ACPI 표준의 원래 개발자였던 ACPI SIG(Special Interest Group)는 모든 자산을 UEFI 포럼으로 이전하기로 합의했으며, 향후 모든 개발은 이곳에서 진행될 예정이다.[5] 최신 버전인 표준 6.6은 2025년 5월 13일에 출시되었다.[6]

구조

펌웨어 레벨 ACPI는 ACPI 테이블, ACPI 바이오스, ACPI 레지스터의 세 가지 주요 구성 요소로 이루어져 있다. ACPI 바이오스는 ACPI 테이블을 생성하고 ACPI 테이블을 메인 메모리로 로드한다. 펌웨어 ACPI 기능의 대부분은 ACPI 테이블에 저장된 튜링 완전 도메인 특정 저급 언어인 ACPI 머신 언어(AML)의 바이트코드로 제공된다.[7] ACPI 테이블을 사용하려면 운영체제에 AML 바이트코드용 인터프리터가 있어야 한다. 참조 AML 인터프리터 구현은 ACPI 구성 요소 아키텍처(ACPICA)에서 제공한다. 바이오스 개발 시 AML 바이트코드는 ASL(ACPI 소스 언어) 코드에서 컴파일된다.[8][9]

ACPI 구성 요소 아키텍처 (ACPICA)

주로 인텔의 엔지니어들이 작성한 ACPI 구성 요소 아키텍처 (ACPICA)는 운영체제 관련 ACPI 코드의 오픈 소스 플랫폼 독립적 참조 구현을 제공한다.[10] ACPICA 코드는 리눅스, 하이쿠, ArcaOS[11]FreeBSD에서 사용되며,[8] 이들 운영체제는 자체 운영체제별 코드를 추가한다.

역사

ACPI 사양의 첫 번째 개정판은 1996년 12월에 출시되었으며, 16, 24, 32비트 주소 공간을 지원했다. 2.0 개정판에서 64비트 주소 지원과 다중 프로세서 워크스테이션 및 서버 지원이 추가된 것은 2000년 8월이 되어서였다.

1999년, 당시 마이크로소프트 CEO 빌 게이츠는 이메일에서 리눅스가 ACPI 덕분에 아무런 작업 없이도 이득을 볼 것이라고 말하며, 이를 윈도우 전용으로 만들 것을 제안했다.[12][13][14]

2004년 9월, 3.0 개정판이 출시되어 ACPI 사양에 SATA 인터페이스, PCI 익스프레스 버스, 256개 이상의 프로세서를 위한 다중 프로세서 지원, 주변광 센서 및 사용자 존재 감지 장치 지원이 추가되었으며, 이전 프로세서 중심 지원을 넘어선 열 모델을 확장했다.

2009년 6월에 출시된 ACPI 사양 4.0 개정판은 설계에 다양한 새로운 기능을 추가했다. 가장 주목할 만한 기능은 USB 3.0 지원, 논리 프로세서 유휴 지원 및 x2APIC 지원이다.

처음에는 ACPI가 X86 아키텍처에만 독점적이었지만, 2011년 12월에 출시된 ACPI 사양 5.0 개정판에서는[15] ARM 아키텍처 지원이 추가되었다. 5.1 개정판은 2014년 7월에 출시되었다.[16] 2025년 5월에 출시된 최신 개정판 6.6은 RISC-V 지원을 추가했다.

운영체제

Windows 9x의 "이제 컴퓨터를 꺼도 안전합니다" 화면. 대부분의 컴퓨터 주변기기는 오프라인 상태이며, 이 화면을 종료하는 유일한 방법은 컴퓨터를 끄거나 재설정하는 것이다.
Windows 10 및 11의 "이제 시스템 전원을 꺼도 안전합니다" 화면.

마이크로소프트의 윈도우 98은 ACPI를 구현한 최초의 운영체제였지만,[17][18] 그 구현이 다소 버그가 많거나 불완전했다.[19][20] 하지만 이와 관련된 일부 문제는 1세대 ACPI 하드웨어로 인해 발생했다.[21] 이후 버전의 마이크로소프트 윈도우, MacOS (x86 macOS만 해당), eComStation, ArcaOS,[22] FreeBSD (FreeBSD 5.0부터[23]), NetBSD (NetBSD 1.6부터[24]), OpenBSD (OpenBSD 3.8부터[25]), HP-UX, OpenVMS, 리눅스, GNU/HurdPC 버전의 솔라리스를 포함한 다른 운영체제는 ACPI에 대한 일부 지원을 제공한다.[26] 윈도우 비스타와 같은 일부 최신 운영체제는 컴퓨터에 ACPI 호환 바이오스가 필요하며, 윈도우 8부터 S0ix/Modern Standby 상태가 구현되었다.[27]

윈도우 운영체제는 acpi.sys[28]를 사용하여 ACPI 이벤트에 접근한다.

리눅스 커널 2.4 시리즈는 ACPI에 대한 최소한의 지원만 있었고, 커널 버전 2.6.0부터는 더 나은 지원이 구현되었다(기본적으로 활성화됨).[29] 오래된 ACPI 바이오스 구현은 버그가 많은 경향이 있어 최신 운영체제에서는 지원되지 않는다. 예를 들어, 윈도우 2000, 윈도우 XP, 윈도우 서버 2003은 바이오스 날짜가 1999년 1월 1일 이후인 경우에만 ACPI를 사용한다.[30] 마찬가지로, 리눅스 커널 2.6은 바이오스 날짜가 2001년 1월 1일 이전인 경우 ACPI를 사용하지 않을 수 있다.[29]

리눅스 기반 운영체제는 acpid를 통해 ACPI 이벤트를 처리할 수 있다.[31]

OSPM 책임

OSPM 호환 운영체제가 ACPI를 활성화하면 전원 관리 및 장치 구성의 모든 측면을 독점적으로 제어한다. OSPM 구현은 장치 드라이버에 ACPI 호환 환경을 노출해야 하며, 이는 특정 시스템, 장치 및 프로세서 상태를 노출한다.

전원 상태

전역 상태

ACPI 사양은 ACPI 호환 컴퓨터 시스템을 위한 다음과 같은 네 가지 전역 "Gx" 상태와 여섯 가지 절전 "Sx" 상태를 정의한다.[32][33]

Gx 이름 Sx 설명
G0 작동 S0 컴퓨터가 실행 중이며 CPU가 명령어를 실행한다. "Away 모드"는 S0의 하위 집합으로, 모니터는 꺼져 있지만 백그라운드 작업이 실행 중이다.
G1 절전 S0ix 모던 스탠바이,[34] 또는 "저전력 S0 유휴". 부분 프로세서 SoC 절전.[35][36] 하위 상태에는 S0i1, S0i2 및 S0i3이 포함된다. ARM 및 x86 장치에 알려져 있다.
S1 전원 켜기 일시 중단 (POS): 프로세서의 전원이 꺼지고 CPU가 명령어 실행을 중지한다. CPU 및 RAM의 전원은 유지된다. 모니터 및 하드 디스크와 같은 주변 장치는 꺼질 수 있다.
S2 CPU 전원 꺼짐. CPU 캐시가 RAM으로 플러시된다.
S3 일반적으로 대기, 절전 또는 Suspend to RAM (STR)이라고 한다: RAM은 전원이 유지되고, RAM은 자체 새로 고침 모드로 들어간다. 대부분의 주변 장치는 꺼진다. 팬은 일반적으로 꺼진다. Windows에서 GPU 드라이버가 필요하다.
S4 최대 절전 모드 또는 Suspend to Disk: 메인 메모리의 모든 내용이 비휘발성 메모리 (예: 하드 드라이브)에 저장되고 시스템 전원이 꺼진다.
G2 소프트 오프 S5 종료: 시스템 전원이 꺼진다.
G3 기계적 오프 기계식 스위치 (예: PSU 후면)를 통해 컴퓨터의 전원이 완전히 제거되었다. 전원 코드를 제거할 수 있으며 시스템은 분해에 안전하다 (일반적으로 실시간 시계만 자체 소형 배터리를 사용하여 계속 작동한다).

이 사양은 또한 레거시 상태를 정의한다: ACPI를 지원하지 않는 운영체제의 상태이다. 이 상태에서는 하드웨어 및 전원이 ACPI를 통해 관리되지 않아 ACPI가 사실상 비활성화된다.

장치 상태

장치 상태 D0–D3는 장치에 따라 다르다:

  • D0 또는 완전히 켜짐은 작동 상태이다.
    • S0ix와 마찬가지로, 인텔은 SoC의 중간 레벨에 D0ix 상태를 가지고 있다.[37]
  • D1 및 D2는 장치에 따라 정의가 다른 중간 전원 상태이다.
  • D3: D3 상태는 D3 Hot (보조 전원 공급)과 D3 Cold (전원 공급 없음)로 더 나뉜다:
    • Hot: 장치는 더 높은 전원 상태로 전환하기 위한 전원 관리 요청을 주장할 수 있다.
    • Cold 또는 Off는 장치가 전원 꺼짐 상태이며 버스에 응답하지 않는다.

프로세서 상태

CPU 전원 상태 C0–C3는 다음과 같이 정의된다:

  • C0은 작동 상태이다.
  • C1 (종종 Halt라고도 함)은 프로세서가 명령어를 실행하지 않지만, 거의 즉시 실행 상태로 돌아갈 수 있는 상태이다. 모든 ACPI 호환 프로세서는 이 전원 상태를 지원해야 한다. 펜티엄 4AMD 애슬론과 같은 일부 프로세서는 더 낮은 전력 소비를 위해 향상된 C1 상태 (C1E 또는 향상된 정지 상태)를 지원하지만, 이는 일부 시스템에서 버그가 있는 것으로 나타났다.[38][39]
  • C2 (종종 Stop-Clock이라고도 함)는 프로세서가 소프트웨어에서 보이는 모든 상태를 유지하지만, 깨어나는데 더 오랜 시간이 걸릴 수 있는 상태이다. 이 프로세서 상태는 선택 사항이다.
  • C3 (종종 Sleep이라고도 함)는 프로세서가 캐시 일관성을 유지할 필요는 없지만, 다른 상태를 유지하는 상태이다. 일부 프로세서에는 프로세서를 깨우는 데 걸리는 시간이 다른 C3 상태 (Deep Sleep, Deeper Sleep 등)의 변형이 있다. 이 프로세서 상태는 선택 사항이다.
  • 일부 프로세서에 대해 제조업체가 추가 상태를 정의한다. 예를 들어, 인텔하스웰 플랫폼은 C10까지의 상태를 가지고 있으며, 코어 상태와 패키지 상태를 구분한다.[40]

성능 상태

장치 또는 프로세서가 작동 중일 때 (각각 D0 및 C0), 여러 전력-성능 상태 중 하나에 있을 수 있다. 이러한 상태는 구현에 따라 다르다. P0은 항상 최고 성능 상태이며, P1부터 Pn까지는 순차적으로 낮은 성능 상태이다. 총 상태 수는 장치 또는 프로세서에 따라 다르지만 16개를 초과할 수 없다.[41]

P-상태는 인텔 프로세서에서는 스피드스텝, AMD 프로세서에서는 파워나우! 또는 쿨 앤 콰이어트, VIA 프로세서에서는 PowerSaver로 알려져 있다.

  • P0 최대 전력 및 주파수
  • P1 P0보다 낮음, 전압 및 주파수 스케일링
  • P2 P1보다 낮음, 전압 및 주파수 스케일링[42]
  • Pn P(n–1)보다 낮음, 전압 및 주파수 스케일링

인터페이스

하드웨어

ACPI 호환 시스템은 "고정 기능 하드웨어(FFH) 인터페이스" 또는 OEM에서 제공하는 플랫폼별 ACPI 머신 언어(AML)에 의존하는 플랫폼 독립적인 하드웨어 프로그래밍 모델을 통해 하드웨어와 상호 작용한다.

고정 기능 하드웨어 인터페이스는 성능 및 오류 복구를 위해 플랫폼 제조업체에서 제공하는 플랫폼별 기능이다. 표준 인텔 기반 PC인텔이 정의한 고정 기능 인터페이스를 가지고 있으며,[43] 이는 부팅 시간이나 주요 시스템 오류 시 기본 기능을 제공하기 위해 ACPI 호환 시스템이 전체 드라이버 스택을 필요로 하는 것을 줄여주는 핵심 기능 세트를 제공한다.

ACPI 플랫폼 오류 인터페이스(APEI)는 칩셋, RAM 등의 하드웨어 오류를 운영체제에 보고하기 위한 사양이다.

펌웨어

ACPI는 ACPI 호환 운영체제와 시스템 펌웨어(바이오스 또는 통일 확장 펌웨어 인터페이스) 간의 인터페이스를 제공하는 많은 테이블을 정의한다. 여기에는 RSDP, RSDT, XSDT, FADT, FACS, DSDT, SSDT, MADT, MCFG 등이 포함된다.[44][45]

이 테이블은 플랫폼 독립적인 방식으로 시스템 하드웨어를 설명할 수 있으며, 고정 형식 데이터 구조 또는 AML로 제공된다. 주요 AML 테이블은 DSDT (차별화 시스템 설명 테이블)이다. AML은 OS 호환성 확장을 위해 테이블을 패치하는 목적으로 인텔의 iASL (오픈 소스, ACPICA의 일부)과 같은 도구로 디컴파일할 수 있다.[46][47]

루트 시스템 설명 포인터(RSDP)는 플랫폼 종속적인 방식으로 위치하며 나머지 테이블을 설명한다.

Windows 플랫폼 이진 테이블(WPBT)이라고 불리는 사용자 지정 ACPI 테이블은 마이크로소프트가 공급업체가 Windows OS에 소프트웨어를 자동으로 추가할 수 있도록 허용하는 데 사용된다. 레노버와 같은 일부 공급업체는 이 기능을 사용하여 악성 소프트웨어를 설치한 것이 적발되었다.[48] 삼성은 Windows 업데이트가 비활성화된 PC를 출시했다.[48] 윈도우 7 이전 버전의 Windows는 이 기능을 지원하지 않지만, 다른 기술을 사용할 수 있다. 이 동작은 루트킷과 비교되기도 한다.[49][50]

비판

2003년 11월, 리눅스 커널의 저자인 리누스 토르발스는 ACPI를 "모든 면에서 완전한 설계 재앙"이라고 묘사했다.[51][52]

같이 보기

각주

  1. “ACPI Overview” (PDF). 《www.acpi.info》. 2019년 5월 25일에 원본 문서 (슬라이드쇼 in PDF)에서 보존된 문서. 
  2. “APM BIOS Specification”. 인텔, 마이크로소프트. February 1996. 2012년 2월 6일에 원본 문서 (RTF)에서 보존된 문서. 2010년 7월 2일에 확인함. 
  3. “What is ACPI (Advanced Configuration and Power Interface)? - Definition from WhatIs.com”. 《SearchWindowsServer》 (영어). 2020년 9월 18일에 확인함. 
  4. “ACPI Device Tree - Representation of ACPI Namespace — The Linux Kernel documentation”. 《www.kernel.org》. 2020년 9월 18일에 확인함. 
  5. “The Advanced Configuration & Power Interface web page has a prominent note that links to the Preexisting ACPI Specifications page on the UEFI web site”. 《acpi.org》. 2014년 7월 23일. 2011년 6월 22일에 원본 문서에서 보존된 문서. 2016년 1월 25일에 확인함. 
  6. “Advanced Configuration and Power Interface (ACPI) Specification Release 6.6” (PDF). 2025년 5월 13일. 2025년 7월 19일에 확인함. 
  7. Bernhard Kauer (August 2009). “ATARE: ACPI Tables and Regular Expressions” (PDF). 2019년 2월 18일에 확인함. 
  8. FreeBSD의 ACPI 구현 - Usenix
  9. Linux의 ACPI, 2005
  10. ACPICA: ACPI 구성 요소 아키텍처
  11. “Readme for the ACPI Driver Package”. 《arcanoae.com》. 2020년 9월 6일에 확인함. 
  12. “Microsoft wollte ACPI nur für Windows”. 《데어 슈탄다르트》 (오스트리아 독일어). 2022년 11월 6일에 확인함. 
  13. “Microsoft: ACPI sollte nur unter Windows funktionieren”. 《Golem.de. 2022년 11월 6일에 확인함. 
  14. Gates, Bill (1999년 1월 24일). “ACPI extensions” (PDF). 2007년 2월 2일에 원본 문서 (PDF)에서 보존된 문서. 
  15. 휴렛 팩커드; 인텔; 마이크로소프트; 피닉스 테크놀로지스; 도시바 (2011년 12월 6일). “Advanced Configuration and Power Interface Specification (Revision 5.0)” (PDF). 《acpi.info》. 2012년 9월 14일에 원본 문서 (PDF)에서 보존된 문서. 2013년 11월 17일에 확인함. 
  16. “Advanced Configuration and Power Interface Specification (Revision 5.1)” (PDF). 《uefi.org》. 2014년 7월 23일. 2015년 5월 24일에 확인함. 
  17. “Limitations When Using Microsoft Windows 98 on Compaq Armada Portables” (PDF). 《physik.hu-berlin.de》 (FTP). October 1998. 3쪽. 2014년 1월 27일에 확인함. 
  18. “Windows 98 on ThinkPad systems - ThinkPad General”. Support.lenovo.com. 2014년 2월 3일에 원본 문서에서 보존된 문서. 2014년 1월 27일에 확인함. 
  19. Robert Cowart; Brian Knittel (2000). 《Using Microsoft Windows 2000 Professional》. Que Publishing. 30쪽. ISBN 978-0-7897-2125-9. 
  20. Windows 98은 ACPI 수동 냉각 모드를 지원하지 않는다
  21. “표지 이야기: Win98 버그 및 수정 사항 - 1998년 12월”. 《winmag.com》. 1999년 10월 13일에 원본 문서에서 보존된 문서. 
  22. “ArcaOS 변경 로그”. 2020년 8월 24일에 확인함. 
  23. “FreeBSD 5.0-RELEASE 발표”. 《www.freebsd.org》. 2020년 12월 3일에 확인함. 
  24. “acpi(4) - NetBSD 매뉴얼 페이지”. 《man.netbsd.org》. 2020년 12월 3일에 확인함. 
  25. “acpi(4) - OpenBSD 매뉴얼 페이지”. 《man.openbsd.org》. 2020년 12월 3일에 확인함. 
  26. Therien, Guy (2000년 1월 6일). “ACPI 2.0 Specification Technical Review, Intel Developer Forum”. 인텔. 2011년 7월 21일에 원본 문서 (PPT)에서 보존된 문서. 2011년 8월 21일에 확인함. 
  27. Marshall, Allen. “Windows Vista의 ACPI” (PPT). 마이크로소프트. 2010년 7월 2일에 확인함. 
  28. “Acpi.sys: Windows ACPI 드라이버”. 마이크로소프트. 2017년 6월 15일. 2019년 9월 20일에 확인함. 
  29. 리눅스 커널의 ACPI 현황
  30. ACPI BIOS. msdn.microsoft.com.
  31. Siever, Ellen; Weber, Aaron; Figgins, Stephen; Love, Robert; Robbins, Arnold (2005). 《Linux in a nutshell》 5판. Sebastopol, California: O'Reilly. 36쪽. ISBN 978-0-596-52949-9. OCLC 773210086. 
  32. ACPI Spec Rev 5.0 - dated December 6, 2011
  33. Anand Lal Shimpi (2012년 10월 5일). “인텔의 하스웰 아키텍처 분석”. 아난드테크. 2013년 10월 20일에 확인함. 
  34. windows-driver-content. “모던 스탠바이”. 《docs.microsoft.com》 (영국 영어). 2020년 3월 20일에 확인함. 
  35. “S0ix States”. 《software.intel.com》 (영어). 2020년 3월 9일. 
  36. Wang, Wendy (2018년 10월 17일). “How to achieve S0ix states in Linux*”. 《01.org》. 
  37. “D0ix States”. 《software.intel.com》 (영어). 2020년 3월 9일. 
  38. “Athlon II X2: Hardware C1E and Return of the CnQ Bug”. 아난드테크. 2020년 10월 26일에 확인함. 
  39. Wasson, Scott (2005년 2월 21일). “인텔의 펜티엄 4 600 시리즈 프로세서”. The Tech Report. 2쪽. 
  40. “프로세서 패키지 및 코어 C-상태”. 아난드테크. 2013년 6월 9일. 2013년 10월 20일에 확인함. 
  41. “고급 설정 및 전원 인터페이스 사양, 개정판 3.0, 섹션 2.6 장치 및 프로세서 성능 상태 정의” (PDF). 《ACPI.info》. 2004년 9월 2일. 23쪽. 2015년 11월 28일에 원본 문서 (PDF)에서 보존된 문서. 2015년 8월 19일에 확인함. 
  42. 링크 애그리게이션
  43. 인텔 (September 2006). “인텔 프로세서 공급업체별 ACPI” (PDF). 2007년 1월 18일에 원본 문서 (PDF)에서 보존된 문서. 2014년 10월 5일에 확인함. 
  44. Brown, Len (2005년 7월 20일). 《Linux의 ACPI》. 《오타와 리눅스 심포지엄》. 3쪽. CiteSeerX 10.1.1.173.2206. 
  45. “ACPI Tables — The Linux Kernel documentation”. 《www.kernel.org》. 2020년 10월 20일에 원본 문서에서 보존된 문서. 2020년 11월 8일에 확인함. 
  46. “DSDT”. 《ArchWiki》. 
  47. “ACPI 시작하기”. 《GitBook》. 
  48. Hoffman, Chris (2015년 8월 19일). “좀비 크랩웨어: Windows 플랫폼 이진 테이블의 작동 방식”. 《How-To Geek》. 
  49. “공급업체 '루트킷': 'Windows 플랫폼 이진 테이블' (WPBT)”. 《Born's Tech and Windows World》. 2017년 12월 6일. 
  50. Mayank Sharma (2021년 9월 27일). “수백만 대의 Windows 10 PC가 위험한 보안 취약점에 노출”. 《테크레이더》 (영어). 2022년 11월 10일에 확인함. 
  51. Linux Magazine issue 162, May 2014, page 9
  52. Searls, Doc (2003년 11월 25일). “리누스 & 룬틱스, 2부”. Linux Journal. 2010년 1월 13일에 확인함. 

외부 링크

Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya