Linux Interrupt IRQ

Sunmin Kim·2023년 5월 22일
0

Linux Kernel

목록 보기
2/2






[이미지 출처 : https://wogh8732.tistory.com/293]

  • Linux Interrupt

Linux에서 IRQ(Interrupt Request)는 하드웨어 장치로부터 발생하는 인터럽트 신호를 처리하기 위한 메커니즘입니다. IRQ는 주로 입출력 장치, 타이머, 네트워크 카드 등의 하드웨어 장치로부터 발생합니다. IRQ 할당 및 동작은 다음과 같은 단계로 이루어집니다:

장치 인식: 운영체제는 부팅 과정에서 시스템의 하드웨어를 탐지하고 인식합니다. 이때, 각 장치의 IRQ 요구사항을 확인하고 운영체제에 등록합니다.

IRQ 할당: 운영체제는 인식된 장치에 대해 IRQ를 할당합니다. IRQ는 일반적으로 0부터 15까지의 숫자로 표현되며, 이는 인터럽트 컨트롤러(Interrupt Controller)에 의해 관리됩니다. IRQ는 장치의 요구사항과 시스템의 사용 가능한 IRQ 중에서 할당됩니다.

인터럽트 처리 루틴 등록: 운영체제는 인터럽트 처리를 위한 적절한 루틴(Interrupt Handler)을 등록합니다. 인터럽트 처리 루틴은 해당 IRQ에 대한 인터럽트가 발생했을 때 실행되는 코드로, 해당 장치의 동작을 처리하고 필요한 작업을 수행합니다.

인터럽트 서비스 루틴 실행: 하드웨어 장치에서 인터럽트 신호가 발생하면, 인터럽트 컨트롤러가 해당 IRQ에 대한 인터럽트 신호를 운영체제에 전달합니다. 운영체제는 해당 IRQ에 등록된 인터럽트 처리 루틴을 실행하여 실제로 인터럽트를 처리합니다. 이때, 현재 실행 중인 프로세스는 인터럽트 서비스 루틴이 실행되는 동안 일시적으로 중단됩니다.

인터럽트 처리: 인터럽트 서비스 루틴은 해당 장치의 상태를 확인하고 필요한 작업을 수행합니다. 예를 들어, 입출력 장치의 경우 데이터를 읽거나 쓰는 작업을 수행할 수 있습니다. 인터럽트 처리가 완료되면, 운영체제는 해당 장치를 다시 대기 상태로 전환하고 현재 실행 중이던 프로세스를 재개합니다.

IRQ 할당과 동작은 운영체제에서 관리되며, 하드웨어와의 인터페이스를 통해 인터럽트 처리를 수행합니다. 이를 가능하게 하기 위해 운영체제는 인터럽트 컨트롤러와 통신하여 인터럽트 신호를 수신하고 처리할 수 있습니다. 대표적으로 x86 아키텍처에서는 APIC (Advanced Programmable Interrupt Controller)을 사용하여 IRQ를 관리합니다.

APIC는 다수의 IRQ를 처리하기 위한 인터럽트 컨트롤러로, CPU에 내장되어 있습니다. 각 CPU는 로컬 APIC를 가지고 있으며, 시스템에는 IOAPIC(Input/Output Advanced Programmable Interrupt Controller)이라는 외부 APIC도 존재할 수 있습니다. IOAPIC는 입출력 장치로부터 발생하는 인터럽트를 처리하기 위한 기능을 제공합니다.

IRQ는 우선순위를 가지고 있으며, 운영체제는 우선순위와 IRQ 할당 정보를 APIC 레지스터에 설정합니다. 인터럽트가 발생하면 해당 IRQ에 대한 인터럽트 신호가 APIC로 전달되고, APIC는 우선순위에 따라 해당 IRQ를 운영체제에게 알립니다.

운영체제는 알림을 받으면 해당 IRQ에 등록된 인터럽트 처리 루틴을 실행합니다. 이때, 현재 실행 중인 프로세스는 일시적으로 중단되고 인터럽트 서비스 루틴이 실행됩니다. 인터럽트 서비스 루틴은 해당 장치의 상태를 확인하고 필요한 작업을 수행한 후, 인터럽트 처리를 완료합니다.

IRQ는 하드웨어 장치에 의해 발생하는 이벤트를 신속하게 처리하고 시스템의 성능과 효율성을 향상시키는 중요한 메커니즘입니다. Linux 운영체제는 IRQ를 효율적으로 할당하고 관리하여 다양한 하드웨어 장치와의 상호작용을 가능하게 합니다.

profile
Embedded Linux Engineer

0개의 댓글