실시간 시스템은 답이 맞아도 늦으면 틀린 시스템이다. 자동차 에어백이 계산은 정확한데 충돌 1초 뒤에 터지면 쓸모가 없다. 그래서 평균적으로 빠른 것보다, 정해진 시간 안에 반드시 끝나는 것이 중요하다. 이를 위해 운영체제는 인터럽트에 빨리 반응하고, 급한 작업이 덜 급한 작업을 즉시 밀어낼 수 있어야 한다.
예시로 보기
실시간 작업을 일반 스케줄러에 맡기면 얼마나 늦어지는지 비교해 보자.
| 스케줄러 | 실시간 작업이 준비된 뒤 실행되기까지 | 실시간에 쓸 수 있나 |
|---|---|---|
| 선점형 라운드 로빈 | 준비 큐 뒤에 서서 자기 시간 조각을 기다린다 | 대개 너무 늦다 |
| 비선점 우선순위 | 지금 프로세스가 막히거나 끝날 때까지 기다린다. 느린 낮은 우선순위 작업이 돌고 있으면 몇 초가 걸릴 수 있다 | 안 된다 |
| 우선순위 + 시계 기반 선점 지점 | 일정 간격의 선점 지점에서 더 높은 우선순위 작업이 기다리면 끊는다(커널 작업 포함). 몇 밀리초 | 일부 응용엔 충분 |
| 즉시 선점 | 운영체제가 인터럽트에 거의 바로 반응한다(꼭 막아 둔 임계 구간에 있을 때만 예외). 100 µs 이하 | 까다로운 응용 |
정확히 말하면
실시간 시스템에서는 계산의 논리적 결과뿐 아니라 결과가 나오는 시각도 시스템이 올바른지를 정한다. 작업은 바깥 세상의 사건을 제어하거나 그에 반응하고, 그 사건은 “실시간”으로 일어나므로 작업이 따라잡아야 한다. 실시간 작업은 마감을 얼마나 엄격히 지켜야 하느냐, 주기가 있느냐로 나뉜다.
| 구분 | 내용 |
|---|---|
| 경성 (hard) | 반드시 마감 시간을 지켜야 한다. 놓치면 치명적인 손상이나 시스템 오류가 난다 |
| 연성 (soft) | 마감 시간을 지키는 것이 바람직하지만 필수는 아니다 |
| 주기 작업 | 주기 \(T\)마다 한 번씩, 또는 \(T\) 간격으로 끝내야 한다 |
| 비주기 작업 | 시작이나 끝에 마감 시간 제약이 있지만 일정한 주기가 없다 |
실험실 실험 제어, 공장 공정 제어, 로봇, 항공 교통 관제, 통신, 군사 지휘 통제가 예다.
실시간 운영체제에 필요한 다섯 성질
실시간 운영체제는 다음 다섯 가지 성질을 갖춰야 한다.
| 성질 | 내용 |
|---|---|
| 결정성 | 연산이 미리 정해진 시각이나 시간 간격 안에 일어난다. 특히 운영체제가 인터럽트를 알아채기까지 얼마나 지연되는지, 요청을 모두 제때 처리할 여유가 있는지가 관건이다 |
| 응답성 | 인터럽트를 알아챈 뒤 처리하기까지 걸리는 시간. 처리 루틴을 시작하는 데 걸리는 시간, 처리하는 시간, 중첩 인터럽트의 영향을 포함한다 |
| 사용자 제어 | 사용자가 작업 우선순위를 세밀하게 정할 수 있다. 페이징·스와핑 여부, 디스크 전송 알고리즘, 프로세스 권한도 정하게 할 수 있다 |
| 신뢰성 | 성능이 떨어지는 것만으로도 큰 재앙이 될 수 있다 |
| 실패 연착륙 (fail-soft) | 고장이 나도 기능과 데이터를 최대한 지키는 방식으로 실패한다. 모든 마감을 지킬 수 없을 때도 가장 중요한 마감은 지키는 안정성이 중요하다 |
결정성과 응답성을 합친 것이 인터럽트에 대한 전체 반응 시간이다1.
실시간 운영체제의 특징. 빠른 프로세스·스레드 전환, 작은 크기, 바깥 인터럽트에 빠른 반응, 세마포어·시그널·이벤트 같은 프로세스 간 통신 도구를 갖춘 다중 작업, 데이터를 빠르게 쌓는 특수 순차 파일, 우선순위 기반 선점 스케줄링, 인터럽트를 막는 구간을 최소로, 정해진 시간만큼 작업을 늦추는 기능, 특수 알람과 타임아웃.
활용
- 리눅스는 실시간 스레드용 SCHED_FIFO(같은 우선순위 안에서 선입선출)와 SCHED_RR(같은 우선순위 안에서 라운드 로빈), 일반 스레드용 SCHED_OTHER 클래스를 둔다. 실시간 클래스는 늘 일반 스레드보다 먼저 실행된다.
- SVR4 UNIX는 우선순위 160단계를 세 클래스로 나눈다. 실시간(159~100)은 커널·시분할 프로세스보다 반드시 먼저 실행되고 이들을 선점할 수 있다. 커널(99~60), 시분할(59~0)이 뒤를 잇는다. 커널 코드 안에 선점 지점을 넣어 실시간 작업이 오래 기다리지 않게 했다.
- Windows는 우선순위를 실시간과 가변 두 대역으로 나누고 우선순위 기반 선점 스케줄러를 쓴다.
연결
확인 문제
C1 다음은 경성 실시간인가 연성 실시간인가? ① 영상 통화의 화면 프레임 ② 항공기 비행 제어 ③ 공장 로봇 팔의 충돌 방지 정지
답: ① 연성. 프레임 몇 개를 늦게 그려도 화질이 잠깐 나빠질 뿐이다. ②·③ 경성. 마감을 놓치면 사고가 난다.
C2 비선점 우선순위 스케줄러에 실시간 작업의 우선순위를 가장 높게 줘도 실시간에 쓸 수 없는 이유는?
답: 우선순위가 높아도 지금 실행 중인 작업이 막히거나 끝날 때까지 기다려야 한다. 느린 낮은 우선순위 작업이 돌고 있으면 몇 초가 걸릴 수 있다. 실시간에는 급한 작업이 지금 작업을 즉시 끊는 선점이 필요하다.
C3 결정성과 응답성은 인터럽트 처리 시간의 어느 부분을 가리키는가?
답: 결정성은 인터럽트가 와서 운영체제가 그것을 알아채기까지의 지연이 예측 가능한가이다. 응답성은 알아챈 뒤 처리 루틴을 시작하고 끝내기까지의 시간이다.
-
Stallings 6판 10.2절을 따랐다. ↩