RTOS 스케줄러 시뮬레이션
우선순위가 다른 세 태스크를 스케줄러가 어떻게 번갈아 실행하는지 봅니다. 선점형과 비선점형의 차이, 실행 시간이 길어졌을 때의 마감 놓침, 뮤텍스 때문에 생기는 우선순위 역전과 상속까지 직접 만들어 봅니다.
CPUidle준비된 태스크 없음
실행 중준비됨 (차례 기다림)뮤텍스를 기다림
3D 장면을 불러오는 중입니다
조작
실행 기록 최근 80 ms
채워진 구간이 실행, 흐린 구간이 준비된 채 기다린 시간, 빨간 구간이 뮤텍스를 기다린 시간입니다.
측정
- CPU 사용률
- -
- 센서 최대 응답 시간
- -
- 마감 놓침
- 0회
- 뮤텍스를 쥔 태스크
- -
이렇게 해 보세요
- 층 하나가 태스크 하나입니다. 위쪽일수록 우선순위가 높습니다. 노란 구슬이 CPU이고, 지금 실행 중인 태스크의 층에 올라가 있습니다.
- 처음 설정에서는 센서 태스크가 10 ms마다 깨어나 2 ms를 쓰고 내려갑니다. 그때마다 아래 태스크가 하던 일을 멈췄다가 이어서 합니다. 이것이 선점입니다.
- 스케줄링을 비선점형으로 바꿔 보세요. 센서 태스크가 깨어나도 아래 태스크가 끝날 때까지 기다립니다. "센서 최대 응답 시간"이 크게 늘어납니다.
- 다시 선점형으로 두고 통신 실행 시간을 끝까지 늘려 보세요. 가장 낮은 표시 태스크가 차례를 못 받아 마감을 놓치기 시작합니다.
- 공유 자원을 뮤텍스로 바꾸면 우선순위 역전이 생깁니다. 표시 태스크가 뮤텍스를 쥔 사이에 센서가 깨어나면 기다려야 하는데, 그 사이에 통신 태스크가 끼어들어 센서가 훨씬 오래 기다립니다.
- 뮤텍스 + 우선순위 상속으로 바꾸면, 뮤텍스를 쥔 표시 태스크가 잠깐 센서의 우선순위를 물려받아 빨리 끝내고 내려놓습니다.
읽는 법
스케줄러의 규칙은 하나입니다. 실행할 준비가 된 태스크 가운데 우선순위가 가장 높은 것을 실행합니다. 선점형에서는 더 높은 태스크가 준비되는 즉시 바꾸고, 비선점형에서는 실행 중인 태스크가 스스로 내려놓을 때 바꿉니다.
마감은 다음 주기가 시작되기 전까지입니다. 그 안에 끝내지 못하면 마감 놓침으로 셉니다.
이 실험실의 주기와 실행 시간은 예시 값입니다. 문맥 전환에 걸리는 시간은 넣지 않았습니다.
자세한 설명은 태스크와 스케줄러 노트와 우선순위 역전 노트에 있습니다.