오류 검출을 위한 대기열 기반 인터럽트 서비스 프로토콜
  • 2015-05-08
  • 김언한 기자, unhankim@elec4.co.kr
  • 글 | 로히트 고얄(Rohit Goyal), 라훌 아그라왈(Rahul Agrawal), 아쉬시 밴가(Ashish Banga), Freescale India Pvt. Ltd.


전역 변수 인터럽트 서비스 프로토콜이 직면하는 제약을 없애고, 시스템 소프트웨어에서 최대한의 성능을 끌어내는데 유용한 대기열(Queue) 기반 인터럽트 서비스 프로토콜에 대해 설명한다.

코어(또는 프로세서)는 요즘 사용되는 칩의 모든 동작 조작을 제어하는 SoC의 핵심이다. 코어에서 최대의 성능을 끌어내기 위해 일반적으로 인터럽트 기반의 소프트웨어가 제작된다. 그러나 모든 코어에서 사용이 가능한 인터럽트 라인의 수는 항상 제한되므로, 일반적으로 설계에서 핀 다중화 기술이 사용되며 여러 이벤트가 하나의 인터럽트에 할당된다.

이 기술은 그 목적에 부합하지만, 하나의 인터럽트 서비스 루틴(Interrupt Service Routine, ISR)이 여러 이벤트에 대해 실행되어야 하므로 ISR이 충분히 범용적이어야 한다는 제약이 있다. 다양한 프로세스(개별 task)가 상호 의존하는 시스템의 경우 인터럽트가 예상되는 순서대로 수신되어야 할 필요가 있다.

이는 소프트웨어에서 보류 중인 예상 인터럽트에 대한 값을 갖는 전역 변수 목록을 유지함으로써 실현 가능하지만 모든 전역 변수의 값을 확인해야 하므로 ISR에 많은 오버헤드가 발생하며, 항상 ISR을 최대한 작게 유지해야 한다는 조건도 있다.

머리말

인터럽트를 위한 핀 다중화는 SoC의 일반적인 설계 방법이다. 하나의 인터럽트 라인에 할당되어지는 이벤트 및 인터럽트가 상호 의존성을 갖는 소프트웨어 코드에서는 범용 ISR을 사용할 수 없고, 오류 검출에 도움이 될 뿐만 아니라 동시에 최대한으로 소프트웨어 성능을 끌어내는 데 도움이 되는 인터럽트서비스 프로토콜이 필요하다.

다음은 전역 변수를 사용하는 인터럽트 서비스 프로토콜과 그 제약에 대해 먼저 알아보고, 이후 제안된 대기열 기반 인터럽트 서비스 프로토콜에 대해 설명한다.



전역 변수 기반 인터럽트 서비스 프로토콜

Task 1, 2를 수행해야 하고, Task 1이 먼저 종료될 것으로 예상되는 시스템을 가정해 보자.
이 경우 전역 변수 체계를 사용하면 ISR을 두 가지 방법으로 작성할 수 있다. 하나는 검사기(checker)를 ISR에 구현하는 방법, 다른 하나는 검사기를 메인 코드에 두는 방법이다. 그림 1과 그림2에서 두 코딩 체계를 각각 볼 수 있다.

ISR을 항상 최대한 작게 유지해야 하므로 Style 2가 더 일반적으로 사용된다. 이 방법은 실행될 task의 수가 얼마되지 않는 경우에는 유효하지만 task의 수가 증가하면 검사기가 복잡해지게 된다. N개의 task에 대한 소프트웨어 코드를 아래 그림 3에서 볼 수 있다.

task의 수가 증가하게 되면 검사기가 복잡해지기 때문에 소프트웨어 성능은 저하되고 결국에는 소프트웨어 성능을 향상시킬 수 있는 대안이 필요하게 된다.





대기열 기반 인터럽트 서비스 프로토콜

대기열(FIFO, 선입선출) 버퍼는 메모리에 구현되어 예상되는 인터럽트 값, 그리고 인터럽트 서비스가 순서에 따라야 하는지 아닌지에 대한 정보를 함께 보유할 수 있다(이 문서에서는 순서에 따른 경우만 가정함).

인터럽트가 수신될 때마다 현재 값을 대기열에 가장 먼저 푸시된 값과 비교할 수 있다. 올바른 값이 수신되면 인터럽트는 코어에 올바른 혹은 예상된 인터럽트가 서비스되었다는 알림과 함께 서비스되고, 그렇지 않을 경우 오류 신호와 함께 서비스된다.
이러한 대기열 기반 인터럽트 서비스 프로토콜을 아래 그림 4에서 볼 수 있다.



두 개의 task를 수행해야 하고(Task 1과 Task 2), Task 1이 먼저 종료될 것으로 예상되는 시스템을 다시 한 번 가정해 보자. 대기열 기반 방법을 사용하는 이러한 시스템에 대한 코딩 체계를 그림 5에서 볼 수 있다.

그림 6은 N개의 task가 있는 시스템에서 대기열 기반 방법을 사용하는 코딩 체계를 보여준다. 대기열 기반 인터럽트 서비스 프로토콜의 경우 검사기의 복잡성이 task의 수와 무관하며, 따라서 시스템 소프트웨어에서 최대한의 성능을 끌어내는데 도움이 된다는 점을 명확히 볼 수 있다.
그림 7은 제안된 프로토콜을 사용하는 시스템 소프트웨어의 전체 구현을 보여준다.






결론

위 설명과 비교를 바탕으로, 제안된 대기열 기반 인터럽트 서비스 프로토콜은 가능한 소프트웨어 및 하드웨어 오류를 검출하는데 도움이 될 뿐만 아니라, 동시에 시스템 소프트웨어에서 최대한의 성능을 끌어내는데도 도움이 된다는 점을 명확히 알 수 있다.

참/고/문/헌
[1] Interrupt aware queue implementation for energy efficient multitasking systems based on Cortex-M3 architecture.
[2] Coding ISRs By Jack Ganssle
 

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>


관련 기사

  • 100자평 쓰기
  • 로그인

태그 검색
본문 검색
TOP