ACPI와 APIC의 철자가 비슷하기 때문에 헷갈리는 경우가 있습니다. 게시판에 올려진 글을 읽어봐도 많은 분들이 혼동을 하고 계신 것 같아서 씁니다. ACPI는 Advanced Configuration and Power Interface의 약자고, APIC은 Advanced Programmable Interrupt Controller의 약자입니다. 글자의 배열은 비슷하지만 둘은 완전히 다른 용어이고 의미도 완전히 다릅니다. 간단히 말해서, ACPI는 전원 관리와 관련된 것이고, APIC은 인터럽트와 관련된 것입니다. ACPI는 APM(Advanced Power Management)을 보완하기 위해서 개발되었고, APIC은 기존의 PIC(Programmable Interrupt Controller)를 보완하기 위해서 개발된 것입니다.
절전에 대한 개념이 생기면서 컴퓨터의 전원을 사용하는 정도에 따라 능동적으로 조절할 필요가 생겼습니다. 그래서, APM이라는 것이 개발되었습니다. APM은 BIOS 레벨에서 전원을 관리합니다. 그러나, APM의 한계로 인해서, 운영 체제에서 좀더 효율적(?)으로 전원을 관리할 필요가 생깁니다. 그래서, Intel, Microsoft 및 Toshiba에서 새로운 규격을 제시한게 ACPI입니다. ACPI은 운영 체제가 시스템의 전원 관리을 조절할 수 있도록 하기 위해서 제시된 갖가지 규격입니다. 많은 분들이 혼동하고 계시듯이 IRQ공유과 관련된 기능은 없습니다.
APIC은 기존의 PC-AT기반의 인터럽트 관리 기능의 한계를 넘기 위해서 새로 만들어진 규격입니다. 프로세서의 속도가 AT 시절 이후로 몇 백배 이상 빨라졌지만, 기본적인 구조는 크게 바뀌지 않았습니다. 특히 인터럽트 관련 부분은8259 인터럽트 콘트롤러를 사용할 때와 비교해서 달라진게 별로 없었습니다. 그러나, 갖가지 새로운 주변 장치들이 개발되면서 필요한 인터럽트의 숫자는 계속 늘어나게 됩니다. IRQ 충돌이라는 문제가 생기기 시작한 겁니다. 그외에도 여러가지 한계들이 드러나게 되죠 (예를 들어서 느린 속도). 그래서, 새로운 개념의 인터럽트 컨트롤러가 필요하게 되고, APIC이란게 제시됩니다. APIC은 로컬 APIC이라는 것과 I/O APIC이라는 것으로 나누어져 있습니다. 로컬 APIC은 각각의 프로세서에 인터럽트 신호를 전달하고, 멀티 프로세서 시스템도 고려해서 설계되어 있습니다. I/O APIC은 시스템당 최대 8개까지 있을 수 있고, 각종 입출력 장치로부터 인터럽트 신호를 모아서 로컬 APIC으로 전달합니다. 인텔의 경우 시스템 당 보통 24개의 인터럽트를 가지도록 설계하고 있지만, 여러개의 I/O APIC을 사용할 경우 시스템 하나가 수백개의 IRQ를 가지게 설계할 수도 있습니다. IRQ 충돌이란 악몽이 해결되는 겁니다.
그러면, 실제로 우리가 접할 수 있는 상황으로 부연 설명해보겠습니다.
Q: ACPI는 IRQ 공유를 유발시킬까?
A: 윈도우즈 2000/XP를 설치할 때, 많은 분들이 ACPI 때문에 IRQ 공유가 일어나는 것으로 알고 있습니다만, 실제는 그렇지 않습니다. 정확히 말하면, ACPI(advanced Configuration and Power Interface)때문에 일어나는 현상이 아니라 시스템이 APIC(Advanced Programmable Interrupt Controller)를 제대로 지원하지 못해서 일어하는 현상입니다. 실제로 인텔은 1994년도부터 자사의 프로세서가 로컬 APIC 을 지원하도록 설계하기 시작했습니다. 그러나, 지원하는 칩셋과 운영 체제에서 제대로 지원을 하지 못해서 반쪽짜리였죠. Microsoft가 APIC을 제대로 지원하기 시작한 것은 윈도우즈 2000 이후부터입니다. 문제는 여전히 칩셋과 마더보드에서 APIC을 제대로 지원하지 못하는 경우가 많았습니다. 여기서 문제가 발생하기 시작한겁니다. APIC을 지원하지 못할 경우, PIC을 사용하면서, IRQ 공유 같은 문제가 발생하게 됩니다. 제가 사용하고 있는 시스템중 하나는 APIC을 지원하는 Gigabyte의 7VTXH이고, 다른 하나는 APIC을 지원하지 못하는 시스템입니다. 둘을 비교해보면, 7VTXH는 IRQ 번호가 15번을 넘어가는 장치들이 보입니다 (각각의 장치들이 독자적인 IRQ를 사용하고 있습니다). ACPI 기능도 물론 활성화되어 있습니다만, IRQ 공유 같은 현상은 안일어납니다. 반면 다른 시스템은 IRQ 번호가 15번을 넘지 못하고 공유하는 현상이 나타나죠. 둘다 최근에 구입한 시스템인데도 APIC 지원이 되는게 있고 안되는게 있습니다. 그리고, Windows 2000의 경우 IRQ 점유 상황을 표시하는 방법에 약간 문제가 있습니다. 같은 하드웨어에 XP를 설치할 경우 ACPI를 활성화해도 IRQ 하나에 여러 장치가 몰려서 나타나는 현상은 안일어납니다. 결론은 ACPI와 IRQ 공유는 관련이 없다는 겁니다.
Q: ACPI와 표준 PC 중에서 어떤 것을 선택해야 하는가?
A: ACPI는 전원 관리와 관련된 규격입니다. 문제는 하드웨어 제조 업체들이 ACPI를 제대로 지원하는 드라이버를 못만들어내고 있다는데 있습니다. 현재는 상황이 많이 좋아졌고 좋아지고 있지만, 운영 체제가 전원을 관리하려고 해도, 드라이버 레벨에서 제대로 지원을 못하거나, 마더보드의 BIOS가 완벽하게 지원하지 못하는 문제가 여전이 있습니다. 예를 들어서, 드라이버 지원이 좋기로 알려진 nVidia의 경우도 비디오 입출력 부분과 관련된 WDM 드라이버에서 ACPI를 제대로 지원하지 못하고 있습니다. 아마도 코어 드라이버 부분이 ACPI가 보편화되기 이전에 씌여져서 그럴겁니다. 시스템을 Standby 모드로 전환했다가 다시 켤 때 시스템이 죽으면 대부분 드라이버 문제입니다. 꼭 Standby 모드와 관련되지 않더라도, 일반 사용시에도 시스템이 다운되는 현상도 생깁니다. 사용하고 있는 시스템의 모든 부분이 ACPI를 잘 지원하면 모르겠지만, 그렇지 않으면 표준 PC를 사용하는 편이 문제를 줄일 수 있습니다. 그러나, 시스템이 제대로 지원만 한다면 ACPI를 활성화해서 새로운 기능들을 사용할 수 있습니다. ACPI의 S3(Suspend to RAM) 기능을 사용할 경우, 시스템 부팅 시간을 몇 초 이내로 줄일 수 있습니다. 전원 스위치를 누를 이후로 바탕 화면이 나타나고 원래 작업하던 화면이 나타날 때까지 5초 정도 걸립니다.
Q: 어떤 조합이 좋은가?
A: 시스템만 잘 지원한다면 가장 좋은 조합은 ACPI+APIC입니다. 문제는 아직도 이를 제대로 지원하는 시스템이 적다는데 있습니다. 대체로 사용하는 드라이버가 WHQL이면 ACPI는 제대로 지원한다고 보시면 됩니다. 그러나, 제대로 지원하지 못하는 장치를 사용할 경우에는 표준 PC를 사용하는 것이 좋습니다. APIC은 마더보드가 제대로 지원해야 하고, 사용하는 운영 체제도 고려해야 합니다. Windows 2000 이후의 제품을 사용하고 있고, 마더보드가 제대로 지원한다면 IRQ 충돌 없이 사용할 수 있습니다. 그러나, 최근 출시된 제품 중에도 지원하는 제품이 있고, 지원하지 않는 제품이 있습니다.