임베디드 용어 사전
구조·RTOS

협조적 스케줄러

작업을 표로 관리하며 주기마다 호출해 주는 경량 구조. 각 작업이 스스로 양보해야 돌아간다.

슈퍼루프와 RTOS 사이의 절충이다. 선점하지 않고, 각 작업이 짧게 끝내고 돌아온다.

typedef struct { void (*fn)(void); uint32_t period, last; } Task;

static Task tasks[] = {
    { read_sensor,   10,  0 },
    { update_ctrl,   20,  0 },
    { send_status,  100,  0 },
};

for (;;) {
    uint32_t now = now_ms();
    for (int i = 0; i < N; i++)
        if (now - tasks[i].last >= tasks[i].period) { tasks[i].last = now; tasks[i].fn(); }
}

장점

  • 주기와 작업이 한 표에 모여 구조가 눈에 보인다
  • 스택이 하나뿐이라 RAM 을 적게 쓴다
  • 컨텍스트 스위칭이 없어 오버헤드가 작다

한계

한 작업이 길어지면 다른 작업이 밀린다. 선점이 없기 때문이다. 그래서 각 함수가 "짧게 끝내고 돌아온다" 는 규율을 지켜야 하고, 그것이 어려워지는 순간이 RTOS 도입 시점이다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 베어메탈 설계 — RTOS 없이 여러 일을 하기