Thursday, September 26, 2019

저비용 비선점형 멀티태스킹, Part2 - MP3 플레이어 만들기.

  • 아래링크의 글을 구글 번역 + 다듬은 것입니다.
  • 이 기사 시리즈의 Part 1에서는 매우 간단한 예를 통해 상태 머신 기반 멀티 태스킹 시스템의 기본 사항을 살펴보았습니다. 이 두 번째 Part에서는 시스템의 소프트웨어를 구축하기위한 설계 방법론을 공부합니다. USB, 파일 시스템, LCD 및 정전 식 터치 감지 기능이 통합 된 MP3 플레이어 시스템을 구축함으로써 task설계, task간 통신, 우선 순위 지정 등에 대해 논의합니다.
  • 시스템 소프트웨어 설계
    • 다음은 1 부에서 설명한 기본 원칙을 요약 한 것입니다.
      • 1. 각 기능은 짧은 시간 내에 완료 할 수있는 작은 하위 작업 또는 상태로 나뉩니다.
      • 2. 작업 컨텍스트 저장 및 복원은 상태 머신 및 상태 변수에 의해 수행됩니다.
      • 3. 각 task는 작업의 작은 부분을 수행하고 스케줄러로 제어권을 다시 부여합니다. 시스템은 여러 가지 task/함수에 의해 만들어지며 반복적으로 호출됩니다.
      • 4. 여러 task가 서로 다른 상태에서 교차실행되는 것은 모든 상태 시스템을 동시 실행되는 것처럼 보여줍니다.
      • 5. 스케줄러는 모든 작업을 반복적으로 거르면서 현재 반복에 schedule된 task을 실행하는 무한 루프입니다.
      • 6. 간단한 언어 구성은 가능한 한 많이 사용되어 오버 헤드를 최소화합니다.
    • 상태 머신 기반 멀티 태스킹 시스템의 설계에는 하향식 접근법이 포함됩니다. 스케줄러 자체는 계층 구조의 최상위에 있지만이 기사의 마지막 섹션에서 설명합니다. 먼저 시스템의 소프트웨어를 설계 할 때 어떤 방법을 사용해야하는지 살펴 보겠습니다.
    • 시스템 소프트웨어 설계는 다음 세 가지 하위 범주로 나눌 수 있습니다.
      • 1. 서브 시스템 정의 및 작업 분류
      • 2. 작업 상호 작용 및 우선 순위
      • 3. 작업 일정
  • 서브 시스템 정의
    • 하향식 설계 방식과 마찬가지로 먼저 시스템을 주요 하위 시스템으로 분류합니다. 서브 시스템은 하나의 단일 기술 또는 기능에 속하는 논리적 작업 세트입니다. 이전 줄에서 암시 한 것처럼 하위 시스템은 단일 기능 일 필요는 없지만 서로 상호 작용하는 일련의 기능 일 필요가 있습니다. 디자인의 첫 번째 단계에서 시스템을 최상위 서브 시스템으로 분할해야합니다. 그런 다음 서브 시스템 내에서 각각의 독립적인 하위 기능을 정의할 수도 있습니다.
    • 이제 이 기사의 1 부에서 설명한 FM 플레이어보다 더 복잡한 시스템 인 LCD 디스플레이와 터치 감지 입력이 있는 USB MP3 플레이어를 살펴 보겠습니다. 시스템에 다음과 같은 하드웨어가 있다고 가정 해 봅시다.
      • 1. MP3 디코더 ASIC
      • 2. 정전 식 터치 감지 입력 패드
      • 3. 분할 LCD 디스플레이
      • 4. USB 호스트 마이크로 컨트롤러
    • 시스템의 최상위 수준은 아래 그림 1과 같습니다.
      • 그림 1 : 가상 USB MP3 플레이어 시스템의 블록 다이어그램
    • 우리가 구축한 이 USB MP3 플레이어 시스템에서 다양한 하위 시스템과 내부 구성 요소를 정의할 수 있습니다.
      • 1. USB 서브 시스템
      • 2. 파일 시스템
      • 3. MP3 서브 시스템
        • A. MP3 오디오 관리자
          • i) 버퍼 관리자
          • ii) 파일 관리자
          • iii) 재생 관리자
        • B. MP3 ASIC 드라이버
      • 4. 터치 감지 입력 서브 시스템
        • A. 정전 식 터치 감지 드라이버
        • B. 터치 감지 알고리즘
      • 5. 디스플레이 서브 시스템
        • A. 디스플레이 관리자
        • B. 디스플레이 드라이버
      • 6. 시스템 모니터 및 하우스 키핑
    • 이제부터는 각 하위 시스템 구성 요소를 기능과 하위 기능으로 나눕니다. 예를 들어, MP3 오디오 관리자는 빨리 감기, 되감기 등과 같은 모드를 처리하기 위해 MP3 ASIC 버퍼 관리, 파일 관리자 및 MP3 재생 관리자로 분류되어야합니다.
    • 이 기사의 첫 번째 섹션에 설명 된대로 실행하는 데 1 밀리 초 이상 걸리는 모든 기능은 상태 머신으로 만들어야합니다. 따라서 시스템 분석이 끝나면 간단한 함수 모음과 많은 상태 머신이 남게 됩니다.
    • 모든 독립 기능이 정의되면 스케줄링을 위해 서로 다른 task들로 그룹화해야합니다. 예를 들어 MP3 하위 시스템에는 4 개의 상태 시스템이 필요합니다.
    • "ASIC 드라이버"및 "버퍼 관리자"는 최우선 순위로 실행하고 처리량을 소비해야합니다. “파일 관리자” 및 “재생 관리자”상태 시스템은 보다 느긋하게 실행될 수 있습니다. 파일 관리자와 재생 관리자가 단일 작업으로 그룹화 될 수도 있습니다.
    • 따라서 이 경우 Task는 스케줄링을 위해 함께 그룹화 된 함수 호출 세트입니다. 우리 시스템에는 task이름을 가진 공식적인 함수는 없지만 대신에 스케줄러의 최상위 상태 시스템에 대한 호출 목록이 있을 수 있습니다.
    • 좋은 task디자인을 구성하는 데 시간을 할애하는 것은 중요합니다. task가 너무 많으면 코드 공간이 낭비되고 schedule 오버 헤드가 늘어납니다. 태스크가 너무 적고 단일 태스크이 너무 많은 처리량을 사용하면 멀티 태스킹 효과가 줄어 듭니다.
    • 다음 규칙이 적용됩니다.
      • 1. 동일한 작업에서 서로 의존하는 두 개의 연관된 상태 머신을 그룹화하십시오.
      • 2. 실행하는 데 시간이 오래 걸리는 함수는 다른 작업에 배치하고 스케줄러 루프에서 실행을 지연하십시오 (나중에 자세히 설명).
      • 3. 처리량 균형이 방해받지 않는 한 관련없는 작업을 함께 스케쥴하십시오.
      • 4. 다른 기능 (예 : 터치 감지)에 속하더라도 느린 응답 함수(예 : 입력 처리)에 대해 별도의 작업을 만듭니다. 이러한 작업을 여유롭게 스케쥴하십시오.
    • 시스템의 하위 시스템은 다양한 방식으로 상호 작용합니다. 일부 서브 시스템은 데이터, 타이밍 및 출력을 위해 다른 서브 시스템에 의존합니다. 서로 다른 작업이 서로 통신하는 방식에 따라 작업 간 통신 전략뿐만 아니라 우선 순위와 빈도가 결정됩니다. 이 섹션에서는 먼저 실행 빈도와 우선 순위를 결정하는 방법을 살펴보고 작업 간 통신 방법을 검토합니다.
  • 실행주기 및 순서
    • 작업 내에서 다양한 상태 시스템과 기능을 식별 했으므로 작업의 실행 순서를 알아보겠습니다. 먼저이 용어를 정의하겠습니다.
    • 실행주기는 작업이 스케줄러에서 호출되는 빈도입니다. 일부 작업은 다른 작업보다 더 자주 호출할 필요할 수 있습니다. 이는 모든 작업이 스케줄러 루프 반복에서 매번 스케쥴 될 필요는 없다는 의미이기도 합니다.
    • 이것은 많은 CPU 처리량을 절약합니다. 위의 MP3 플레이어 예에서 LCD 드라이버는 버퍼에서 디스플레이로 단일 문자를 쓰고 다시 스케줄러로 제어권을 되돌려주는 상태 머신입니다. 완전한 디스플레이 작성을 위해서 이 task는 가장 높은 빈도로 호출해야합니다.
    • USB 드라이버 작업은 USB 호스트 신호를 전송하고 연결된 장치를 활성 상태로 유지하기 위해서 자주 호출되어야 하지만, 가장 자주 호출되는 것은 아닙니다. 정전 용량 데이터를 캡처하려면 터치 감지 드라이버 작업을 자주 호출해야합니다. 그러나 터치 감지 감지 알고리즘 작업은 유용한 기능을 수행하기 전에 많은 정전 용량 데이터 샘플이 필요하기 때문에 여유있게 호출될 수 있습니다.
    • 실행 순서는 task 내에서 그룹화된 함수의 호출 순서 및 task가 스케줄러에서 호출되는 순서입니다. task 우선 순위는 task 순서를 결정합니다. 실행 순서는 자연스러운 데이터 흐름 순서를 따릅니다.
    • 아래의 그림 2는 MP3 플레이어 시스템의 "다음 트랙" 터치 패드를 터치했을 때의 데이터 흐름을 보여주는 최상위 데이터 흐름 다이어그램의 일부입니다. "재생 관리자"작업이 "시스템 모니터"작업에 어떻게 의존하고 어떻게 입력에 대한 "터치 감지 감지 알고리즘"작업에 의존하는지 주목하십시오. 처리량 기준이 충족되면 시스템 모니터 및 터치 감지 감지 작업 후에 동일한 실행 빈도로 "재생 관리자"작업을 예약하는 것이 좋습니다.
    • 그림 2 : USB MP3 플레이어 시스템의 데이터 흐름 다이어그램의 일부
    • 스케줄러 루프의 두 단계에서 실행을 비틀어 작업의 우선 순위를 지정할 수 있습니다. 우선 순위가 높은 작업은 첫 번째 단계에서 예약하고 우선 순위가 낮은 작업은 나중에 예약해야합니다. 이 내용은이 기사의 "작업 예약"섹션에서보다 명확 해집니다.
  • 인터 태스크 커뮤니케이션
    • 논리적 기능 단위는 하나의 상태 머신이라는 점을 상기해보면, 독립적으로 스케쥴되는 두 상태 머신 간의 통신에 관심이 생길 것입니다. task는 관련된 혹은 관련없는 일련의 함수 호출입니다.
    • 협동 멀티 태스킹의 state machine 간 통신은 전역 변수에 의해서만 처리됩니다. 이는 모든 작업 전환이 결정적이며 공유 리소스에 동시에 액세스 할 위험이 없기 때문입니다. 우리는 설계상 이 견고성을 갖기 때문에 전역 변수가 작업 간 통신에 사용됩니다.
    • 물론 멀티 태스킹 시스템에서 처리해야하는 많은 유형의 데이터 통신이 있습니다. 많은 종속 작업이 비동기 적으로 실행되기 때문에 입력 및 데이터 구조의 모집단을 사용할 수 있음을 나타내는 "플래그"가 필요합니다.
    • 한 서브 시스템의 이상을 다른 서브 시스템과 통신하려면 “오류 플래그 / 코드”가 필요합니다. 한 상태 머신에서 수집 한 데이터를 다른 작업에서 사용하려면 그것을 보관하는 "버퍼"가 필요합니다. "상태 변수"는 task 상태에 대한 정보를 보유하며, 이는 작업을 전임자에게 위임하는 다른 task에 유용합니다.
    • MP3 플레이어의 예에서, 터치 감지 시스템은 "정전 용량 터치 감지 드라이버"에 의해 읽히는 용량성 패드의 출력을 읽습니다. 이것은 터치 패드의 아날로그-디지털 변환기 ( ADC) 값을 저장하는 버퍼를 사용하여 실행됩니다. "터치 감지 감지"상태 머신은 각 정전식 터치 패드에 대한 플래그 세트를 공유하며 "시스템 모니터"는 이값을 지속적으로 읽습니다.
    • 사용자가 "다음 트랙"터치 패드를 눌렀다고 가정하겠습니다. 터치 감지 감지 상태 머신은 서브 시스템의 하위 계층에서 ADC 버퍼를 분석하고 상위 계층(예 : 시스템 모니터)에 사용될 터치 패드 플래그를 설정합니다.
    • 다음 차례에 시스템 모니터는 재생 관리자에 대해 "다음 파일 열기"플래그와 "디스플레이 관리자"가 사용할 "새 파일 이름 설정"플래그를 설정합니다. 디스플레이 관리자가 “업데이트 된 파일 이름”버퍼에서 현재 재생되는 파일 이름을 구할 수 있습니다.
    • 디스플레이 관리자는이 데이터의 재생 관리자에 의존하며 실행시 재생 관리자를 따라야하므로 우선 순위가 낮습니다. 파일 내용은 다시 버퍼를 통해 MP3 ASIC으로 펌핑됩니다. 이것은 단일 버튼 누름으로 인한 총 데이터 흐름입니다. 이외에 아날로그 모니터나 멀티플렉서등을 가능하게하기 위해 시스템 모니터에 의해 실행된 일부 하드웨어 동작이 있습니다.
    • 잘 설계된 협업 멀티 태스킹 시스템에서는 모든 제어 전환이 미리 결정되어 있으므로 동기화 문제에 대해 걱정할 필요가 없습니다. 따라서 파이프, 메시지 및 세마포어와 같은 값 비싼 동기화 장치을 사용할 필요가 없습니다. 이러한 복잡한 기능은 저렴하고 간단한 플래그, 버퍼 및 대기열을 사용하여 구현됩니다.
  • 작업 일정

No comments: