본문 바로가기
IT/임베디드 시스템

임베디드 소프트웨어 (1) - 라운드로빈 구조, 인터럽트 라운드로빈 구조

by 뽀짝뉴스 2020. 6. 2.

 

임베디드 소프트웨어 기본 구성을 위해서 다양한 구조에 대해서 알아봅시다.

 

주어진 시스템에 어떤 소프트웨어 구조가 적합한지를 결정하는 가장 중요한 요소는 얼마나 많은 시스템의 응답을 제어해야 하는지와 밀접한 관계가 있습니다. 절대적인 응답 시간뿐만 아니라 마이크로프로세서의 속도와 다른 수행 조건들에 의해서도 얼마나 좋은 응답을 얻을 수 있는지가 결정됩니다. 응답 시간에 대한 조건의 거의 없고, 그리 절박하지 않은 시스템은 매우 간단한 구조로 작성될 수도 있죠. 많은 종류의 이벤트에 대해서 빠르게 반응해야만 하고 다양한 수행 조건들과 각기 다른 제한 시간, 다양한 우선순위를 가진 시스템은 더 복잡한 구조를 가져야만 하고요.

 

네 종류의 구조에 대해서 다룰 예정입니다. 먼저 실제적으로 시스템의 응답이나 우선 순위에 대해서 제어를 하지 않는 가장 단순한 구조부터, 많은 제어를 할 수 있지만 더불어 복잡성이 증대된 만큼 비용을 더 들여야 하는 복잡한 구조로 설명을 해나 갈 겁니다. 하나하나 살펴보고 결국 어떤 구조를 선택해야 하는지까지 말해볼 테니 잘 따라와 주세요.

 

총 네 가지를 살펴볼 텐데 이 글에서는 두 가지를 먼저 설명합니다.

 

 

[라운드로빈 구조]

 

여기에는 인터럽트가 없습니다. 가장 단순한 구조이지요. 메인 루프는 단순히 각각의 I/O 장치를 순서대로 점검하다가 서비스가 필요한 장치에 대해 서비스를 해줍니다. 이 구조는 놀랄 만큼 간단한 구조입니다. 인터럽트, 공유 데이터, 인터럽트 지연에 대해 걱정할 필요조차 없습니다. 그러므로 이 구조로 문제 해결이 가능할 경우 가장 매력적인 방법임을 의심할 여지가 없습니다.

 

구조가 단순한 탓에 라운드로빈 구조는 어떤 일에는 매우 적합합니다. 디지털 멀티미터를 떠올려보면 쉽게 연상이 가능합니다. 전기저항, 전류, 전압을 각각의 범위에서 옴, 암페어, 볼트 단위로 측정하는데 일반적인 멀티미터는 회로의 두 점을 찍기 위해서 두 개의 프로브를 가지고 있고, 디지털 표시 장치, 어떤 전기적 특성을 어떤 범위에서 측정할지를 결정하는 커다란 회전 스위치를 가지고 있습니다. 시스템은 연속으로 측정을 해야 하고, 가장 최근에 측정한 것을 반영하기 위해 표시를 계속 갱신해야 합니다.

 

단지 세 가지의 디바이스만 있고, 특별히 수행 시간이 긴 작업도 없고, 빠른 응답을 요구하는 것도 없기 때문에, 이 시스템은 라운드로빈 구조로 충분히 구현할 수 있습니다. 마이크로프로세서는 필요한 순간에 측정한 값을 하드웨어를 통해 읽을 수 있고, 원하는 속도로 표시 장치에 쓸 수 있어요. 사용자가 회전 스위치를 돌렸을 때, 마이크로프로세서가 루프를 도는데 필요한 시간인 차란의 순간을 주목하진 않습니다. 많은 경우에 사용자는 프로브를 측정하려는 곳에 위치시키느라 정신이 없는게 보통이라서 제법 긴 시간 동안 다른 데 신경쓰지 않죠. 사용자는 손이 두 개밖에 없기 때문에 한 손으로 스위치를 돌리는 동안 프로브의 다른 한 쪽은 그냥 작업대 위에 있을 수 밖에 없으니까요. 라운드로빈 구조는 이런 모든 조건을 만족시킵니다. 라운드로빈 구조의 단순함은 이러한 시스템을 위해서 매우 적합하다고 볼 수 있습니다.

 

하지만 본론은 지금부터입니다. 라운드로빈 구조는 다른 구조와 비교해서 단숨함이란 장점을 가진 반면 너무나 많은 문제를 가지고 있어서 범용적으로 쓰이기에 적합하지 않습니다.

 

  • 만약 어떤 장치의 마이크로프로세서가 최악의 경우 메인 루프를 도는 시간보다 짧은 응답 시간을 필요한다면 시스템은 제대로 동작하지 못할 겁니다. 시리얼 포트, 네트워크 포트, 푸시 버튼 등 세상에는 빠른 응답을 원하는 I/O장치가 많아서 문제가 점점 커집니다.
  • 응답 조건이 절대적인 시간제한이 없을지라도 어떤 수행할 작업이 긴 시간을 소요한다면 역시 시스템은 제대로 동작하지 못합니다.
  • 이렇게 생긴 구조는 깨지기 쉽습니다. 간신히 모든 조건을 만족하면서 프로세서가 루프를 돌리도록 조정을 했다고 하더라도 새로운 장치의 추가나 새로운 조건의 추가는 모든 것을 날려 버릴 수 있습니다.

 

 

[인터럽트 라운드로빈 구조]

 

인터럽트 라운드로빈 구조는 위에 비해서 좀 더 많은 제어를 할 수 있습니다. 하드웨어 인터럽트 신호는 마이크로프로세서가 메인 함수에서 하던 일을 멈추고 인터럽트 루틴을 실행하게 하기 때문에, 인터럽트 루틴은 응답성이 좋습니다. 실제로 인터럽트 루틴에 넣은 작업들은 메인 루틴에 있는 태스크 코드들보다 높은 우선순위를 갖게됩니다. 게다가 다양한 우선 순위를 시스템의 인터럽트에 할당할 수 있기 때문에 인터럽트 루틴 사이의 우선 순위 역시 제어할 수 있습니다.

 

라운드로빈과 인터럽트 라운드로빈의 우선 순위 제어는 비교가 됩니다. 이 비교는 순수한 라운드로빈 구조보다 인터럽트를 사용하는 것의 주요한 장점에 대한 것입니다.

 

 

[인터럽트 라운드로빈 구조의 특징]

 

인터럽트 라운드로빈 구조의 단점은 보통 라운드로빈 구조보다 복잡하다는 것을 빼더라도 모든 태스크 코드들이 동일한 우선순위로 실행된다는 것에 있습니다. 어떤 태스크 코드가 장치 1, 2, 3을 각각 200밀리 세컨드 동안 수행한다고 생각해봅시다. 마이크로프로세서가 루프의 맨 처음 문장을 수행하고 있을 때 장치 1, 2, 3 모두가 인터럽트 걸렸다면 장치 3을 위한 태스크 코드가 수행되기 위해서는 400밀리 세컨드 동안 기다려야 하는 사태가 발생합니다.

 

이런 시간 지연이 허용되지 않는 상황이라면 장치 3을 위한 태스크 코드를 장치 3을 위한 인터럽트 루틴으로 옮기는 방법이 있습니다. 이 구조에서는 코드를 인터럽트 루틴 안에 직접 넣는 방법이 유일하게 높은 우선순위를 부여하는 것입니다. 그러나 이러한 방법은 장치 3을 위한 인터럽트 루틴을 이전보다 200 밀리세컨드 더 지연시키기 때문에 더 낮은 우선 순위를 가진 장치 4, 5, 6을 위한 인터럽트 루틴은 200밀리 세컨드 이상 응답이 늦어지는 결과를 얻게 됩니다. 따라서 결국 허용되지 않겠죠.

 

다른 방법으로는 앞의 라운드로빈 구조에서 제안한 것처럼 1, 3, 2, 3, 4, 3, 5, 3의 순서처럼 다른 장치보다 3을 위한 플래그를 더 자주 검사하기 위해 메인 루프의 플래그 검사 순서를 바꿀 수 있습니다. 이렇게 하면 장치 3을위한 태스크 코드의 응답 속도만은 향상시킬 수 있죠. 어쩔 수 없이 다른 장치를 위한 태스크 코드는 희생해야 한다는 문제가 있지만요. 이 방법을 써서 프로그램의 응답 시간 조정은 가능하지만 더 큰 문제가 생길 가능성이 높고 쉽게 망가질 가능성이 있습니다.

 

인터럽트 라운드로빈 구조가 잘 맞지 않는 시스템들은 아래와 같습니다.

 

  • 레이저 프린터 : 검은 점이 어디에 찍혀야 하는지를 계산하는 것은 매우 시간을 소모하는 일입니다. 만약 인터럽트 라운드로빈 구조를 사용한다면 유일하게 좋은 응답을 가지는 것은 인터럽트 루틴 안에 있는 코드들 뿐입니다. 시스템이 검은 점의 위치를 게산하는 동안 어떤 태스크 코드는 아무것도 못하고 정지해 있을 수 있습니다. 불행하게도 레이저프린터는 처리해야 할 다른 필요한 작업들이 많이 있고, 만약 모든 코드가 인터럽트 루틴안에 들어가게 된다면 낮은 우선순위의 인터럽트 루틴은 충분히 빠르게 수행될 것이라고 보장할 수 없습니다.
  • 지하 유류 저장 탱크 : 레이저 프린터처럼 탱크 모니터 시스템은 탐욕스러운 프로세스를 가지고 있습니다. 그것은 탱크에 얼마나 많은 가솔린이 있는지를 계산하는 코드입니다. 모든 나머지 코드를 인터럽트 루틴에 넣는 것을 피하기 위해 이 시스템 또한 더 복잡한 구조가 필요한 것이죠.

댓글