APIC
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
APIC(Advanced Programmable Interrupt Controller)는 고급 프로그래밍 가능 인터럽트 컨트롤러로, 컴퓨터 시스템에서 인터럽트를 관리하는 데 사용되는 하드웨어 구성 요소이다. APIC 시스템은 각 CPU에 내장된 로컬 APIC(LAPIC)와 주변 장치 버스에서 인터럽트를 관리하는 I/O APIC로 구성된다. APIC는 인텔에서 개발되었으며, xAPIC, x2APIC로 발전하면서 CPU 수 및 인터페이스 성능이 향상되었다. APIC는 고해상도 타이머를 제공하며, 운영 체제와 펌웨어의 버그로 인해 시스템 오류를 발생시킬 수 있는 문제점도 존재한다.
더 읽어볼만한 페이지
- 인터럽트 - 프로그래머블 인터럽트 컨트롤러
프로그래머블 인터럽트 컨트롤러(PIC)는 컴퓨터 시스템에서 인터럽트 요청을 관리하며, 인터럽트 요청 레지스터 등을 사용하여 인터럽트를 처리하고 다양한 우선순위 체계를 지원하며, x86 아키텍처에서는 인텔 8259가 널리 사용되었다. - 인터럽트 - 도스 API
도스 API는 응용 프로그램이 MS-DOS 운영체제의 시스템 기능을 사용하도록 제공되는 인터페이스로, CP/M 호환성을 고려한 초기 설계 이후 유닉스 개념 도입, 네트워크 기능 추가 등으로 확장되었으며, 다양한 운영체제에서 에뮬레이터를 통해 지원된다. - 메인보드 - 칩셋
칩셋은 컴퓨터 시스템에서 CPU와 주변 장치 간 통신을 중재하는 핵심 부품으로, 초기에는 노스브리지와 사우스브리지로 구성되었으나 현재는 사우스브리지가 주요 부분을 담당하며, 인텔, AMD 등 CPU 제조사들이 시장을 주도하고 있다. - 메인보드 - 버스 (컴퓨팅)
버스는 컴퓨터 내부 구성 요소나 컴퓨터 간에 데이터를 전송하는 통로로, 데이터 전송 방식에 따라 병렬 버스와 직렬 버스로 나뉘며, 컴퓨터 시스템의 성능 향상에 핵심적인 역할을 하는 중요한 구성 요소이다. - IBM PC 호환기종 - EISA
EISA는 1988년 컴팩을 중심으로 한 PC 제조업체 컨소시엄이 IBM의 MCA에 대항하기 위해 개발한 32비트 PC 버스 표준으로, ISA 버스와의 호환성을 유지하면서 고급 기능을 제공하고 특허 및 라이선스 정책에서 자유로워 업계의 지지를 얻으며 PC 버스 기술 발전에 기여했다. - IBM PC 호환기종 - CP/M-86
디지털 리서치가 개발한 16비트 운영 체제 CP/M-86은 인텔 8086 프로세서용으로 설계된 CP/M-80의 후속작이었으나 MS-DOS에 밀려 널리 사용되지 못했고, 다양한 버전과 간지 CP/M-86도 존재했으며, 1990년대 후반에 오픈 소스화되었다.
| APIC | |
|---|---|
| 일반 정보 | |
| 유형 | 컴퓨터 인터럽트 컨트롤러 |
| 개발사 | 인텔 |
| 상세 정보 | |
| 지원 CPU | 인텔 펜티엄 이상 |
| 인터럽트 요청 라인 | 240개 (최대) |
| 특징 | 다중 프로세서 지원 인터럽트 우선순위 관리 메시지 신호 인터럽트 (MSI) 지원 |
| 관련 기술 | |
| 관련 기술 | 인터럽트 PIC (Programmable Interrupt Controller) I/O APIC |
| 기타 | |
| 약어 | APIC |
2. 구성 요소
APIC 시스템은 크게 로컬 APIC (Local APIC, LAPIC)와 I/O APIC의 두 가지 주요 구성 요소로 이루어진다. 시스템의 각 CPU에는 하나의 LAPIC이 있으며, 주변 버스마다 하나의 I/O APIC이 있는 것이 일반적이다.[1]
초기 시스템 설계에서 LAPIC과 I/O APIC은 전용 APIC 버스로 연결되었다. 그러나 최신 시스템은 모든 APIC 구성 요소 간의 통신에 시스템 버스를 사용한다. APIC에는 CPU에 내장된 '''로컬 APIC'''와 I/O로부터의 인터럽트를 관리하는 '''IOAPIC'''의 2 종류가 존재한다. 펜티엄 프로 시대에는 APIC 버스라고 불리는 인터럽트 전용 버스가 사용되었지만, 넷버스트 세대 이후, APIC 버스는 폐지되어, FSB를 통해 인터럽트가 통지된다.
개별 칩이든 CPU에 통합된 것이든 각 APIC에는 특정 APIC 구현에 대한 4비트 버전 번호가 포함된 버전 레지스터가 있다. 예를 들어, 82489DX의 APIC 버전 번호는 0이고, 버전 1은 펜티엄 90 및 100 프로세서에 통합된 첫 번째 세대 로컬 APIC에 할당되었다.[1]
8259 PIC를 포함하는 시스템에서 8259는 시스템의 부트스트랩 프로세서(BSP), 시스템의 I/O APIC 중 하나 또는 둘 모두에 연결될 수 있다. 그러나 논리적으로 8259는 주어진 시간에 한 번만 연결된다.
2. 1. 로컬 APIC (Local APIC, LAPIC)
로컬 APIC(LAPIC)는 SMP 시스템에서 특정 프로세서의 모든 외부 인터럽트를 관리하며, LAPIC 간의 프로세서 간 인터럽트(IPI)를 수락하고 생성할 수 있다. 단일 LAPIC는 I/O APIC에서 최대 224개의 사용 가능한 인터럽트 벡터를 지원할 수 있는데, 0에서 255까지의 벡터 번호 중 0에서 31까지는 x86 프로세서의 예외 처리를 위해 예약되어 있다.[1]CPU 내부에 구현되어 외부로부터의 모든 인터럽트를 관리한다. I/O로부터의 인터럽트 외에도 IPI(Inter-Processor Interrupt)라고 불리는, 멀티 프로세서에 의한 인터럽트를 사용한 CPU 간 통신에도 사용된다.
P5 마이크로아키텍처(P54C)를 시작으로 모든 인텔 프로세서에는 내장 로컬 APIC가 탑재되었다.[6][8] P5 프로세서에서 로컬 APIC가 비활성화된 경우에는 소프트웨어로 다시 활성화할 수 없었지만, P6 프로세서 및 이후 프로세서에는 이러한 제한이 없어졌다.[8]
펜티엄 4 HT와 펜티엄 D가 도입되면서 각 CPU 코어와 각 CPU 스레드에는 통합 LAPIC가 탑재되었다.
초창기 인텔 APIC 칩인 82489DX는 인텔 80486 및 초기 펜티엄 프로세서와 함께 사용하도록 설계되었으며, 실제로는 하나의 회로 내에 로컬 APIC와 I/O APIC가 외장으로 통합된 형태였다. 인텔 MP 1.4 사양에서는 대부분의 펜티엄 프로세서에서 찾아볼 수 있는 "통합 APIC"와 대조하여 이를 "개별 APIC"라고 지칭한다.[2] 82489DX는 16개의 인터럽트 라인을 가지고 있었으며,[3] 일부 ISA 인터럽트를 손실할 수 있는 결함이 있었다.[4]
486 멀티 프로세서 시스템에서는 각 CPU가 자체 82489DX와 쌍을 이루어야 했고, 추가적인 82489DX가 I/O APIC로 사용되어야 했다. 82489DX는 8259A (XT-PIC)를 에뮬레이션할 수 없었기 때문에 하위 호환성을 위해 이러한 칩도 물리적으로 포함되어야 했다.[5] 82489DX는 132핀 PQFP 패키지로 제공되었다.[3]
PCI 2.2 이상 사양의 메시지 신호 인터럽트(MSI) 기능은 로컬 APIC가 활성화되지 않으면 사용할 수 없다.[7] MSI를 사용하면 I/O APIC가 필요하지 않다. 또한 MSI 모드에서는 최대 224개의 인터럽트가 지원되며 IRQ 공유는 허용되지 않는다.[13]
APIC의 또 다른 장점은 간격 모드와 일회성 모드 모두에서 사용할 수 있는 고해상도(1 마이크로초 또는 그 이상) 타이머를 제공한다는 것이다.[8] APIC 타이머는 초기에는 널리 사용되지 못했다.
APIC 타이머가 제공하는 비주기적 인터럽트는 리눅스 커널 틱리스 커널 기능에 사용된다. 이 기능은 선택적이지만 기본 기능으로 2.6.18에서 새롭게 추가되었다. APIC 타이머가 있는 컴퓨터에서 이 기능이 활성화되면 커널은 시간 관리를 위해 8253 프로그래머블 인터벌 타이머를 사용하지 않는다.[11]
2. 2. I/O APIC
I/O APIC는 주변 장치에서 받은 인터럽트를 하나 이상의 로컬 APIC로 전달하는 역할을 하는 리디렉션 테이블을 가지고 있다. 초기 I/O APIC (82489DX, SIO.A, PCEB/ESC 등)는 16개의 인터럽트 라인만 지원했지만, 이후 모델인 82093AA(PIIX3/PIIX4용 별도 칩) 등은 24개의 인터럽트 라인을 지원했다.[13] 82093AA는 64핀 PQFP로 패키징되었다.[14] 82093AA는 주로 PIIX3/PIIX4에 연결되었고, 내장된 레거시 8259 PIC를 사용했다.[14] ICH1은 I/O APIC를 통합했으며, 최신 칩셋에 통합된 I/O APIC는 24개 이상의 인터럽트 라인을 제공할 수 있다.[15]모든 I/O 인터럽트는 우선 IOAPIC에서 수신된다. IOAPIC는 운영 체제(OS)나 BIOS에 의해 설정된 리디렉션 테이블을 참조하여 CPU에 인터럽트를 알린다. 리디렉션 테이블에는 인터럽트 종류(에지/레벨 트리거), 인터럽트 벡터(우선 순위), 인터럽트 대상 CPU 등의 설정을 할 수 있다.
PCI 버스에는 하나의 버스에 INT_A, B, C, D의 최대 4개의 I/O 인터럽트 라인이 있으며, 이 라인들은 IOAPIC에 연결된다. IOAPIC에는 각 인터럽트 라인에 대한 리디렉션 테이블이 할당되어 인터럽트 종류, 인터럽트 벡터 등 CPU의 로컬 APIC와 통신하기 위한 설정이 이루어진다.
I/O 장치가 많아 4개의 인터럽트 라인이 부족하면, 여러 I/O 장치에서 하나의 인터럽트 라인을 공유하기도 한다. 이러한 관리도 IOAPIC가 담당한다. IOAPIC는 시스템에 여러 개 존재할 수 있다.
메시지 신호 인터럽트(MSI)를 지원하는 PCI I/O 장치는 인터럽트 라인을 사용하지 않지만, 칩셋에 의해 MSI 메시지는 일단 IOAPIC로 라우팅된 후, 리디렉션 테이블을 거쳐 CPU로 인터럽트가 전달된다.
3. 작동 방식
인텔 APIC 시스템은 ''로컬 APIC''(LAPIC)와 ''I/O APIC'' 두 가지 구성 요소로 이루어져 있다. 각 CPU에는 하나의 LAPIC이 있으며, I/O APIC는 주변 장치에서 발생한 인터럽트를 하나 이상의 로컬 APIC로 라우팅하는 역할을 한다. 초기 시스템 설계에서는 LAPIC과 I/O APIC이 전용 APIC 버스로 연결되었지만, 최신 시스템은 시스템 버스를 사용하여 통신한다.[1]
I/O APIC는 주변 버스에서 인터럽트 신호를 받으면, 리디렉션 테이블을 참조하여 해당 인터럽트를 처리할 CPU (로컬 APIC)를 결정하고 인터럽트 메시지를 보낸다. 로컬 APIC는 인터럽트 메시지를 수신하면 인터럽트 우선순위 등을 확인하고 인터럽트 핸들러를 호출한다.
인터럽트 핸들러는 인터럽트를 발생시킨 I/O 장치를 확인하고 인터럽트 신호 통지를 중지시킨 후, 필요한 처리를 수행한다. 처리가 완료되면 CPU는 EOI(End of Interrupt, 인터럽트 종료) 명령을 I/O APIC에 보내어 인터럽트 처리가 완료되었음을 알린다. I/O APIC는 EOI를 통해 인터럽트 처리가 완료되었음을 인식하고, 필요시 (예: PCI 장치에서 여전히 인터럽트 신호가 유지되는 경우) 다시 인터럽트를 발생시킨다.
이러한 과정을 통해 인터럽트 손실을 방지하고, 인터럽트 선을 공유하여 사용할 수 있게 된다.
3. 1. 우선순위 제어
NetBurst 세대 후기의 로컬 APIC는 인터럽트 처리에 들어가고 나올 때마다 그 인터럽트 우선순위를 FSB를 통해 정기적으로 칩셋에 통지하는 기능을 구현했다. 운영체제(OS)는 이 기능을 이용하여 멀티프로세서 시스템에서 적절한 인터럽트 분산이 가능하게 되었다. 다만, 이 기능을 지원하려면 IOAPIC 및 노스브리지가 필요하다.[6][8]높은 우선순위의 인터럽트를 처리하고 있는 CPU에 낮은 우선순위의 인터럽트를 통지하면, 그 처리는 일단 대기된다. 따라서 인터럽트 처리를 하지 않거나, 낮은 우선순위의 인터럽트를 처리하는 CPU에 인터럽트를 통지해야 한다.
4. 발전 과정
초기 APIC는 별도의 칩(82489DX) 형태로 제공되었으며, 인텔 80486 및 초기 펜티엄 프로세서와 함께 사용되었다.[2] 82489DX는 16개의 인터럽트 라인을 가지고 있었지만,[3] 일부 ISA 인터럽트를 손실할 수 있는 결함이 있었다.[4] 486 멀티 프로세서 시스템에서는 각 CPU마다 82489DX가 필요했고, I/O APIC로 사용하기 위한 추가적인 82489DX도 필요했다. 하위 호환성을 위해 8259A (XT-PIC) 칩도 물리적으로 포함되어야 했다.[5] 82489DX는 132핀 PQFP 패키지로 제공되었다.[3]
펜티엄 프로(P6) 마이크로아키텍처부터 로컬 APIC가 CPU에 통합되기 시작했다. APIC에는 CPU에 내장된 '''로컬 APIC'''와 I/O로부터의 인터럽트를 관리하는 '''IOAPIC'''가 존재한다. 초기에는 로컬 APIC와 IOAPIC가 APIC 버스라는 인터럽트 전용 버스를 통해 통신했지만, 넷버스트 세대 이후 APIC 버스는 폐지되고 FSB를 통해 인터럽트가 통지된다.
4. 1. xAPIC 및 x2APIC
xAPIC는 펜티엄 4와 함께 도입되었으며, x2APIC는 2008년 11월 네할렘 마이크로아키텍처와 함께 도입된 최신 세대의 인텔 프로그래밍 가능 인터럽트 컨트롤러이다.[17] x2APIC의 주요 개선 사항은 지원되는 CPU 수와 인터페이스 성능에 대한 것이다.x2APIC는 32비트를 사용하여 CPU를 어드레싱하므로, 물리적 대상 모드를 사용하여 최대 4,294,967,295개의 CPU를 어드레싱할 수 있다. 논리적 대상 모드는 클러스터를 도입하여 다르게 작동하며, 이 모드를 사용하면 최대 1,048,560개의 프로세서를 어드레싱할 수 있다.
향상된 인터페이스는 프로세서 간 인터럽트 (IPI) 전송에 필요한 APIC 레지스터 액세스 수를 줄여준다. 이러한 장점으로 인해 KVM은 x2APIC를 물리적으로 지원하지 않는 구형 프로세서에 대해 x2APIC를 에뮬레이션할 수 있으며, 실제로 그렇게 한다. 이 지원은 QEMU에서 콘로까지, 심지어 AMD 옵테론 G 시리즈 프로세서(둘 다 기본적으로 x2APIC를 지원하지 않음)까지 제공된다.[18][19]
5. 가상화 지원 (APICv)
APICv는 게스트의 인터럽트 오버헤드를 줄이는 것을 목표로 하는 인텔의 하드웨어 가상화 지원 브랜드 이름이다. APICv는 아이비 브릿지-EP 프로세서 시리즈에 도입되었으며, 2013년 말에 출시된 제온 E5-26xx v2와 2014년 초에 출시된 제온 E5-46xx v2로 판매된다.[20][21] AMD는 AVIC라고 하는 유사한 기술을 발표했으며,[22][23] 이는 15h 모델 6Xh(Carrizo) 프로세서 및 이후 제품군에서 사용할 수 있다.[24]
6. 경쟁 기술
AMD와 Cyrix는 한때 최대 32개의 프로세서를 지원하는 OpenPIC 아키텍처를 제안했다.[25] 그러나 OpenPIC을 탑재한 x86 마더보드는 출시되지 않았다.[27] x86 시장에서 OpenPIC이 실패한 후, AMD는 AMD 애슬론 및 이후 프로세서에 인텔의 APIC를 라이선스했다.
IBM은 OpenPIC 레지스터 사양을 기반으로 자체 다중 프로세서 인터럽트 컨트롤러(MPIC)를 개발했다.[28] MPIC는 IBM을 포함한 PowerPC 기반 설계에 사용되었으며, RS/6000 시스템[29]과 Power Mac G5[30][31] 등에 사용되었다.
7. 문제점 및 한계
APIC 시스템 구현에는 여러 가지 알려진 버그가 있으며, 특히 8254 타이머 연결 방식에 관한 문제가 많다. 결함이 있는 BIOS는 인터럽트 라우팅을 제대로 설정하지 못하거나, 잘못된 ACPI 테이블과 인텔 멀티프로세서 사양(MPS) 테이블을 제공할 수 있다.
APIC는 운영 체제가 이를 제대로 지원하지 않을 때 시스템 오류의 원인이 될 수도 있다. 구형 운영 체제에서는 I/O 및 로컬 APIC를 종종 비활성화해야 했다. 대칭형 멀티프로세서 및 멀티코어 시스템 보급으로 더 이상 불가능하지만, 펌웨어 및 운영 체제 버그는 이제 드물게 발생한다.
참조
[1]
간행물
Intel MultiProcessor Specification
http://www.intel.com[...]
1997-05
[2]
간행물
Intel MultiProcessor Specification
http://www.intel.com[...]
1997-05
[3]
서적
Adv Microprocessors Interfacing
https://books.google[...]
Tata McGraw-Hill Education
[4]
웹사이트
A Description of the APIC I/O Subsystem
http://people.freebs[...]
2023-05-14
[5]
간행물
Intel MultiProcessor Specification
1997-05
[6]
서적
Upgrading and Repairing PCs
Que Publishing
[7]
웹사이트
Windows Hardware Dev Center
http://msdn.microsof[...]
2017-06
[8]
문서
μ-second precision timer support for the Linux kernel
http://telematics.tm[...]
[9]
웹사이트
Guidelines For Providing Multimedia Timer Support
http://msdn.microsof[...]
2002-09-20
[10]
웹사이트
Windows 8 and APIC timer
https://social.msdn.[...]
2023-05-14
[11]
웹사이트
VMware Knowledge Base
http://kb.vmware.com[...]
[12]
문서
Timekeeping in VMware Virtual Machines (for VMware vSphere 5.0, Workstation 8.0, Fusion 4.0)
http://www.vmware.co[...]
[13]
문서
Reducing Interrupt Latency Through the Use of Message Signaled Interrupts
http://www.intel.com[...]
[14]
웹사이트
Resource & Design Center for Development with Intel
http://www.intel.com[...]
[15]
웹사이트
Intel 400 Series Chipset Family Platform Controller Hub Datasheet - Volume 2 of 2
https://cdrdv2-publi[...]
Intel
2020-05
[16]
문서
Reducing Interrupt Latency Through the Use of Message Signaled Interrupts
http://www.intel.com[...]
[17]
웹사이트
Intel Nehalem mit X2APIC - Extended xAPIC Architecture (Bild 27/27) - ComputerBase
http://www.computerb[...]
[18]
웹사이트
Re: [Qemu-devel] [Question] why x2apic's set by default without host sup
https://lists.gnu.or[...]
[19]
웹사이트
'[Qemu-devel] [PATCH] target-i386: enable x2apic by default on more recen'
http://lists.nongnu.[...]
[20]
웹사이트
Reviewing Unused and New Features for Interrupt/APIC Virtualization
http://www.linuxplum[...]
2023-05-14
[21]
웹사이트
APIC Virtualization Performance Testing and Iozone* - Intel® Software
https://software.int[...]
[22]
문서
Introduction of AMD Advanced Virtual Interrupt Controller
http://www.slideshar[...]
XenSummit 2012
[23]
웹사이트
Next-generation Interrupt Virtualization for KVM
http://www.linuxplum[...]
2023-05-14
[24]
웹사이트
'[Xen-devel] [RFC PATCH 0/9] Introduce AMD SVM AVIC'
https://www.mail-arc[...]
[25]
웹사이트
OpenPIC Definition from PC Magazine Encyclopedia
https://www.pcmag.co[...]
Pcmag.com
2011-11-03
[26]
논문
AMD, Cyrix offer up alternative SMP spec
https://books.google[...]
1995-03-20
[27]
문서
Note attached to "Linux Benchmarking: Part III -- Interpreting Benchmark Results"
Linux Gazette, Issue 24
1998-01
[28]
간행물
Multiprocessor Interrupt Controller. Data Book
https://www-01.ibm.c[...]
IBM
[29]
문서
The IBM Corporation RS/6000 Distributed System Running AIX Version 4.3.1. TCSEC Evaluated C2 Security
http://www.ashtonlab[...]
[30]
서적
Take a Look Inside the G5-Based Dual-Processor Power Mac
http://www.informit.[...]
2006-10-13
[31]
문서
Power Mac G5 Developer Note (Legacy)
https://developer.ap[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com