[IOT-008][중급] 정해진 시간 안에 작업 끝내기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[IOT-008][중급] 정해진 시간 안에 작업 끝내기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 127회 작성일 26-09-03 19:33

본문

[이번 수업]

실시간 운영체제(RTOS)가 왜 단순히 빠른 운영체제가 아닌지 알아봅니다. 주기, 실행시간, 마감시간을 구분하고 반복 작업이 늦었는지 로컬에서 측정합니다.

[선수지식]

프로세스와 스레드, 반복문, 밀리초의 뜻을 알면 좋습니다. Python 3만 있으면 실습할 수 있습니다.

[학습목표]

1. RTOS와 일반 운영체제의 목표 차이를 설명한다.
2. 작업의 주기·실행시간·마감시간·지터를 구분한다.
3. 절대 시각을 기준으로 반복 작업을 예약하고 마감 위반을 기록한다.

[핵심개념]

실시간 시스템에서 실시간은 ‘가장 빨리’보다 ‘정해진 시간 안에 예측 가능하게’라는 뜻에 가깝습니다. 센서 값을 읽어 모터 출력을 바꾸는 작업처럼 결과가 늦으면 쓸모없거나 위험한 경우, 올바른 값과 함께 시간 조건도 지켜야 합니다. RTOS는 실행 가능한 작업 중 우선순위가 높은 작업에 CPU를 주는 등 예측 가능한 스케줄링을 제공합니다.

작업(task)은 스케줄러가 실행 순서를 정하는 일의 단위입니다. 주기는 작업을 다시 시작하는 간격, 실행시간은 한 번의 계산에 걸린 시간, 마감시간은 끝내야 하는 한계입니다. 지터(jitter)는 시작이나 완료 시각이 목표에서 흔들리는 정도입니다. 마감을 한 번도 놓치면 안 되는 제어는 하드 실시간, 가끔 늦으면 품질이 낮아지는 처리는 소프트 실시간으로 볼 수 있습니다.

RTOS를 쓴다고 자동으로 마감이 보장되지는 않습니다. 최악 실행시간, 여러 작업의 CPU 사용량, 우선순위 역전, 인터럽트와 공유 자원 대기를 함께 분석해야 합니다. 평균 시간이 아니라 가장 불리한 조건을 측정하고 여유 시간을 둡니다.

[따라하기]

아래를 `timing_demo.py`로 저장합니다. 일반 PC에서 개념만 관찰하는 예제이며 RTOS의 시간 보장을 대신하지 않습니다.

```python
from time import monotonic, sleep

PERIOD = 0.20
DEADLINE = 0.08
WORK_TIMES = [0.03, 0.05, 0.11, 0.04]
next_release = monotonic()

for cycle, work in enumerate(WORK_TIMES, start=1):
    sleep(max(0, next_release - monotonic()))
    started = monotonic()
    sleep(work)  # 센서 처리 시간을 흉내 냄
    elapsed = monotonic() - started
    result = "OK" if elapsed <= DEADLINE else "MISS"
    print(f"{cycle}: {elapsed * 1000:.0f}ms {result}")
    next_release += PERIOD
```

Windows에서는 `py timing_demo.py`, macOS와 Linux에서는 `python3 timing_demo.py`를 실행합니다. 예상 결과는 약 `30ms OK`, `50ms OK`, `110ms MISS`, `40ms OK`입니다. PC 부하와 타이머 정밀도에 따라 숫자는 조금 달라질 수 있지만 세 번째 작업은 80ms 마감을 넘습니다. `monotonic()`은 시스템 시각 변경에도 뒤로 가지 않는 측정용 시계입니다. 다음 시작 시각에 `PERIOD`를 계속 더하면 작업 종료 뒤부터 쉬는 방식보다 누적 밀림을 줄일 수 있습니다.

[흔한 실수]

평균 실행시간만 보고 안전하다고 판단하거나 모든 작업에 높은 우선순위를 주면 안 됩니다. 긴 파일·네트워크 입출력을 중요한 작업 안에서 기다리면 다른 작업도 늦어집니다. 단순히 `sleep(PERIOD)`를 작업 끝에 두면 실행시간만큼 주기가 계속 밀릴 수 있습니다.

[보안 주의]

본인 소유의 로컬·격리 환경에서만 실습하고 실제 모터·히터·의료 장치를 연결하지 마세요. 실장비는 입력 범위 검사, 타임아웃, 워치독, 안전 정지 상태를 별도로 설계해야 합니다. 외부에서 받은 작업이 높은 우선순위로 CPU를 독점하지 못하게 제한하고 마감 위반 로그에는 비밀정보를 넣지 않습니다.

[직접 해볼 과제]

`DEADLINE`을 0.05로 바꿔 결과 변화를 기록하세요. 이어서 `MISS`가 두 번 연속이면 `SAFE MODE`를 출력하되 실제 장치를 제어하지 않는 코드를 추가해 보세요.

[확인문제]

1. 실시간 시스템에서 평균 속도보다 예측 가능성이 중요한 이유는 무엇인가요?
2. 작업 끝마다 상대적으로 쉬는 방식이 주기를 밀리게 하는 이유는 무엇인가요?
3. RTOS를 사용해도 최악 실행시간을 분석해야 하는 이유는 무엇인가요?

[다음 학습]

다음은 CORE-009에서 주소 입력부터 웹페이지가 열릴 때까지의 전체 흐름을 배웁니다.

[공식 참고 자료]

- RTOS 기초 공식 문서: https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/01-RTOS-fundamentals
- 주기 작업 공식 API: https://www.freertos.org/Documentation/02-Kernel/04-API-references/02-Task-control/03-xTaskDelayUntil
- 스케줄링 공식 문서: https://docs.zephyrproject.org/latest/kernel/services/scheduling/index.html
- 커널 시간 공식 문서: https://docs.zephyrproject.org/latest/kernel/services/timing/clocks.html
- Python 시간 공식 문서: https://docs.python.org/3/library/time.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
4,341
어제
6,862
최대
16,772
전체
770,292
Copyright © 소유하신 도메인. All rights reserved.