Interrupt 정의에 대하여 먼저 간단히 정리하면

모든 프로그램은 process단위로 주어진 기능을 각각 수행하는데 기능을 수행하다가 특정 이벤트가 발생하면(Exception, Error, 임의의 이벤트) 처리하던 동작을 잠시 멈추고 이벤트에 따른 처리 동작을 먼저 진행하도록 구현되어있습니다.

 

그림으로 정리하면 위와 같다. Process 진행 특정 Event발생 이를 Trigger 해서 Interrupt 실행됩니다.

Interrupt 실행되면 Interrupt 처리하기 위한 handler 연결되고 handler 실행 종료되면 다시 Process 하던 동작을 마무리하게 됩니다.

 

특정 인터럽트 발생 시에 어떤 동작을 할지는 해당 interrupt handler 구현해서 정의할 있으며 이렇게 존재하는 여러 interrupt들은 고유의 idx값으로 구분하고 우선순위를 두어

먼저 처리되야할 인터럽트의 순서를 정의합니다.

 

1. Interrupt

OS에서 인터럽트의 역할은 매우 중요합니다. 키보드 마우스의 in/out부터 에러 처리와 예외 처리

OS에서 H/W 처리하기 위해서 기본적으로 사용하는 것이 interrupt이기 때문입니다.

 

1) H/W Register 등록

기본적으로 모든 인터럽트동작은 레지스터를 이용하며 특정인터럽트 동작 시에 사용하기 위한 레지스터들이 정의되어 있다.

예를 들어 SP804 chipset 타이머 관련 chipset으로 해당 H/W에서는 타이머 인터럽트 처리를 위한 레지스터가 정의되어 있다. 그리고 ARM역시 Timer처리를 진행하기위한 주소 값이 이미 정의되어있다.

 

가장 먼저 해야할 일은 Timer chipset 레지스터를 struct 통해 구조화한 미리 정의된 ARM Timer 주소 값에 해당 구조체를 연결해주는 작업을 진행해야한다.

이렇게 되면 H/W에서 인터럽트 발생 레지스터를 통해 ARM으로 오게되고 ARM 인터럽트 핸들러(GIC ) 통해서 미리 정의한 인터럽트 핸들러를 처리할 있다.

 

정리하면 결국 모든 인터럽트는 CPU역할을 하는 ARM에서 처리하게 된다. 때문에 연결되는 H/W에서 인터럽트 발생 이를 ARM으로 전달해주어야하고 ARM Firmware interrupt handler 정의함으로써 해당 interrupt 처리한다.

 

기본적으로 interrupt 처리 동작을 진행하기 위해서 가장 먼저 H/W interrupt 처리 register ARM 관련 처리 주소 값을 연결시켜주어야하고

다음으로 H/W에서 발생하는 interrupt ARM interrupt list 등록시켜주어야한다. ARM interrupt 리스트형태로 관리하며 interrupt신호를 전달받았을 interrupt number 바탕으로 list 참조해서 interrupt handler 찾고 실행할 있다.

'OS > Firmware Project' 카테고리의 다른 글

[OS] Firmware Project (8) - Event  (0) 2021.08.02
[OS] Firmware Project (7) - Task  (0) 2021.07.25
[OS] Firmware Project (5) - 입출력  (0) 2021.06.28
Firmware Project (4) - Memory Set  (0) 2021.06.20
[OS] Firmware Project (3) - ELF & SYS_ID  (0) 2021.06.13

+ Recent posts