그라운드 임베디드 EN 유튜브 구독

실험실

RTOS 스케줄러 시뮬레이션

우선순위가 다른 세 태스크를 스케줄러가 어떻게 번갈아 실행하는지 봅니다. 선점형과 비선점형의 차이, 실행 시간이 길어졌을 때의 마감 놓침, 뮤텍스 때문에 생기는 우선순위 역전과 상속까지 직접 만들어 봅니다.

조작

실행 기록 최근 80 ms

채워진 구간이 실행, 흐린 구간이 준비된 채 기다린 시간, 빨간 구간이 뮤텍스를 기다린 시간입니다.

측정

CPU 사용률
-
센서 최대 응답 시간
-
마감 놓침
0회
뮤텍스를 쥔 태스크
-

이렇게 해 보세요

  1. 층 하나가 태스크 하나입니다. 위쪽일수록 우선순위가 높습니다. 노란 구슬이 CPU이고, 지금 실행 중인 태스크의 층에 올라가 있습니다.
  2. 처음 설정에서는 센서 태스크가 10 ms마다 깨어나 2 ms를 쓰고 내려갑니다. 그때마다 아래 태스크가 하던 일을 멈췄다가 이어서 합니다. 이것이 선점입니다.
  3. 스케줄링을 비선점형으로 바꿔 보세요. 센서 태스크가 깨어나도 아래 태스크가 끝날 때까지 기다립니다. "센서 최대 응답 시간"이 크게 늘어납니다.
  4. 다시 선점형으로 두고 통신 실행 시간을 끝까지 늘려 보세요. 가장 낮은 표시 태스크가 차례를 못 받아 마감을 놓치기 시작합니다.
  5. 공유 자원을 뮤텍스로 바꾸면 우선순위 역전이 생깁니다. 표시 태스크가 뮤텍스를 쥔 사이에 센서가 깨어나면 기다려야 하는데, 그 사이에 통신 태스크가 끼어들어 센서가 훨씬 오래 기다립니다.
  6. 뮤텍스 + 우선순위 상속으로 바꾸면, 뮤텍스를 쥔 표시 태스크가 잠깐 센서의 우선순위를 물려받아 빨리 끝내고 내려놓습니다.

읽는 법

스케줄러의 규칙은 하나입니다. 실행할 준비가 된 태스크 가운데 우선순위가 가장 높은 것을 실행합니다. 선점형에서는 더 높은 태스크가 준비되는 즉시 바꾸고, 비선점형에서는 실행 중인 태스크가 스스로 내려놓을 때 바꿉니다.

마감은 다음 주기가 시작되기 전까지입니다. 그 안에 끝내지 못하면 마감 놓침으로 셉니다.

이 실험실의 주기와 실행 시간은 예시 값입니다. 문맥 전환에 걸리는 시간은 넣지 않았습니다.

자세한 설명은 태스크와 스케줄러 노트와 우선순위 역전 노트에 있습니다.

FREE PDF무료 전자책 3권 받기돌려 본 원리를 글로 정리해 두고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →