로봇 소프트웨어 구조설계로봇미들웨어개발로봇 미들웨어 구현
출제기준 좌표2·1·3·2
2과목 · 로봇 소프트웨어 구조설계

미들웨어 프로세스 관리

로봇미들웨어개발로봇 미들웨어 구현
# 로봇소프트웨어구조설계
01

📌 개요

  • 미들웨어 위 로봇 소프트웨어 = 수십 개의 프로세스(노드)가 동시에 도는 시스템
  • 프로세스 관리 = 이들을 띄우고·통신시키고·충돌 없이 협력시키고·죽으면 살려내는 것
  • 빈출 핵심: 프로세스 상태 천이(준비↔실행→대기), 프로세스와 스레드의 비교, IPC 기법 비교(공유 메모리가 가장 빠름), 뮤텍스·세마포어, 교착상태의 4가지 필요조건
02

📖 핵심 개념

프로세스의 일생 — 5가지 상태

프로세스(Process)는 실행 중인 프로그램이며, OS는 프로세스를 다섯 상태로 관리한다.

  • 생성(New)준비(Ready): 실행 준비 완료, CPU 배정만 기다림
  • 준비 → 실행(Running): 스케줄러가 CPU를 배정(디스패치)
  • 실행 → 준비: 시간 할당량(타임 슬라이스) 만료 또는 더 급한 프로세스에 선점당함
  • 실행 → 대기(Waiting/Blocked): 입출력 등 이벤트를 기다리며 CPU를 내놓음
  • 대기 → 준비: 기다리던 이벤트 완료 (바로 실행이 아니라 준비로 감에 주의!)
  • 실행 → 종료(Terminated)
준비 vs 대기 — 단골 함정

준비(Ready) 는 "CPU만 주면 당장 뛸 수 있는" 상태, 대기(Waiting) 는 "CPU를 줘도 못 뛰는(I/O 결과를 기다리는)" 상태다. 대기가 끝나면 실행이 아니라 준비 큐로 들어간다.

  • 각 프로세스의 정보(상태, 레지스터, 메모리 정보)는 PCB(Process Control Block) 에 저장
  • 컨텍스트 스위칭(Context Switching) = CPU를 다른 프로세스로 넘길 때 현재 상태를 PCB에 저장하고 다음 것을 복원하는 작업
  • 공짜가 아니며, 너무 잦으면 오버헤드가 커짐

프로세스 vs 스레드

구분 프로세스 스레드
메모리 독립 공간 (서로 침범 불가) 프로세스 안에서 코드·전역 데이터·힙 공유 (스택만 개별)
생성·전환 비용 크다 작다
하나가 죽으면 다른 프로세스는 생존 (격리) 같은 프로세스 전체가 위험
통신 IPC 필요 (아래) 메모리 공유로 간단 (대신 동기화 필수)
  • 로봇 미들웨어 전형적 구성 — 노드 = 프로세스로 분리해 장애를 격리 (카메라 노드가 죽어도 모터 노드는 산다)
  • 노드 내부는 멀티스레드로 콜백·통신을 병렬 처리

프로세스 간 통신 (IPC, Inter-Process Communication)

독립된 메모리를 가진 프로세스들이 데이터를 주고받는 OS 차원의 수단들:

기법 방식 특징
파이프(Pipe) 한쪽이 쓰면 한쪽이 읽는 단방향 통로 단순, 주로 부모-자식 간
메시지 큐(Message Queue) 커널의 큐에 메시지를 넣고 꺼냄 구조화된 비동기 전달
공유 메모리(Shared Memory) 같은 메모리 영역을 함께 매핑 복사가 없어 가장 빠름 — 대신 동기화(뮤텍스 등) 필수
소켓(Socket) 네트워크 프로토콜로 통신 다른 컴퓨터 간에도 가능 — 미들웨어 통신의 기반
신호(Signal) 비동기 이벤트 통지 데이터 전달보다는 알림용 (종료 요청 등)
  • 미들웨어의 토픽 통신도 결국 이 IPC 위에 구현됨
  • 원격 노드 ↔ 소켓(UDP/TCP), 같은 컴퓨터 안 ↔ 공유 메모리로 대용량(영상)을 복사 없이 넘기는 최적화

동기화 — 경쟁 상태를 막아라

  • 경쟁 상태(Race Condition): 둘 이상의 실행 흐름이 공유 데이터에 동시 접근하여, 실행 순서에 따라 결과가 달라지는 오류
  • 임계 구역(Critical Section): 공유 자원에 접근하는 코드 구간 — 한 번에 하나만 들어가야 한다 (상호 배제, Mutual Exclusion)
  • 뮤텍스(Mutex): 임계 구역의 자물쇠. 잠근(소유한) 스레드만 풀 수 있다 — 1개 자원의 상호 배제
  • 세마포어(Semaphore): 카운터 기반 — N개까지 동시 접근 허용(자원 풀), 이진 세마포어는 뮤텍스와 유사하게 사용
  • ISR 수준의 원자성 문제는 임베디드 특성에서 본 것과 같은 뿌리다

교착상태 (Deadlock)

  • 두 프로세스가 서로가 가진 자원을 기다리며 영원히 멈추는 상태
  • 다음 4가지 조건이 모두 성립할 때만 발생 (단골 출제):
  1. 상호 배제(Mutual Exclusion): 자원을 한 번에 하나만 사용할 수 있다
  2. 점유와 대기(Hold and Wait): 자원을 쥔 채로 다른 자원을 기다린다
  3. 비선점(No Preemption): 남의 자원을 강제로 빼앗을 수 없다
  4. 순환 대기(Circular Wait): A→B→…→A로 기다림이 원을 이룬다

대응:

  • 예방 — 조건 중 하나를 깸 (예: 모든 프로세스가 자원을 같은 순서로 획득하게 하여 순환 대기 제거)
  • 회피 — 안전 상태를 검사하며 할당 (은행가 알고리즘)
  • 탐지·복구 — 발생 후 처리 (프로세스 강제 종료)

미들웨어의 노드(프로세스) 관리

OS의 일반 이론이 미들웨어에서는 이렇게 나타난다:

  • 일괄 기동 — 런치(Launch) 시스템: 수십 개 노드와 파라미터를 설정 파일 하나로 한 번에 기동 (ROS launch)
  • 라이프사이클 관리: ROS 2의 관리형 노드(Managed Node)는 Unconfigured → Inactive → Active → Finalized 상태를 가지며, 전이를 외부에서 제어할 수 있다 — "센서 노드가 Active가 된 것을 확인한 후 제어 노드를 Active로" 같은 기동 순서 보장이 가능해진다
  • 감시와 복구: 하트비트(주기적 생존 신호)·워치독으로 이상을 감지하고, 죽은 노드를 자동 재시작(respawn) — 워치독 타이머의 시스템판
  • 자원 배정: 중요 노드에 높은 스케줄링 우선순위나 전용 CPU 코어를 배정(친화도, affinity)해 실시간성을 확보
03

📊 다이어그램 · 수식

프로세스 상태 천이도

DIAGRAM
stateDiagram-v2
    state "생성 (New)" as NEW
    state "준비 (Ready)" as READY
    state "실행 (Running)" as RUN
    state "대기 (Waiting)" as WAIT
    state "종료 (Terminated)" as TERM
    [*] --> NEW
    NEW --> READY : 승인
    READY --> RUN : 디스패치 (CPU 배정)
    RUN --> READY : 타임슬라이스 만료 / 선점
    RUN --> WAIT : 입출력·이벤트 요청
    WAIT --> READY : 입출력·이벤트 완료
    RUN --> TERM : 완료

교착상태의 순환 대기

DIAGRAM
flowchart LR
    P1["프로세스 A
(자원 X 점유)"] -- "자원 Y 요청 → 대기" --> R2["자원 Y"] P2["프로세스 B
(자원 Y 점유)"] -- "자원 X 요청 → 대기" --> R1["자원 X"] R2 -. "B가 점유" .-> P2 R1 -. "A가 점유" .-> P1

(A와 B가 서로의 자원을 기다리는 원 — 자원 획득 순서를 X→Y로 통일하면 이 원이 생기지 않는다)

04

🎯 핵심 요약 · 암기 포인트

익힘 0 / 10카드를 눌러 뒤집고, 앞면에서 아는지 표시하세요.
Q · 1
프로세스의 5가지 상태는?
A
생성 → 준비 → 실행 ↔ 대기 → 종료
Q · 2
준비(Ready)와 대기(Waiting) 상태의 차이는?
A
준비는 CPU 배정만 기다리는 상태, 대기는 입출력 등 이벤트 완료를 기다리는 상태 (대기가 끝나면 준비로 돌아간다)
Q · 3
컨텍스트 스위칭이란?
A
CPU를 넘길 때 현재 프로세스 상태를 PCB에 저장하고 다음 프로세스 상태를 복원하는 작업 — 잦으면 오버헤드 증가
Q · 4
스레드가 공유하는 것과 공유하지 않는 것은?
A
코드·전역 데이터·힙은 공유, 스택(지역 변수)은 스레드마다 개별
Q · 5
로봇 미들웨어에서 노드를 프로세스로 분리하는 이유는?
A
메모리 격리로 한 노드가 죽어도 다른 노드가 생존 — 부분 장애 격리와 개별 재시작
Q · 6
IPC 기법 중 가장 빠른 것과 그 대가는?
A
공유 메모리 — 데이터 복사가 없어 가장 빠르지만 별도의 동기화(뮤텍스 등)가 필요
Q · 7
여러 컴퓨터 사이에서도 사용 가능한 IPC 기법은?
A
소켓(Socket) — 네트워크 기반이라 분산 미들웨어 통신의 기반이 된다
Q · 8
경쟁 상태(Race Condition)란?
A
둘 이상의 실행 흐름이 공유 데이터에 동시 접근해 실행 순서에 따라 결과가 달라지는 오류
Q · 9
뮤텍스와 세마포어의 차이는?
A
뮤텍스는 1개 자원의 상호 배제 잠금(소유자만 해제), 세마포어는 카운터로 N개 자원의 동시 접근을 관리
Q · 10
교착상태의 4가지 필요조건은?
A
상호 배제, 점유와 대기, 비선점, 순환 대기 — 모두 성립해야 발생

교착상태 예방의 대표적 방법은?::자원 획득 순서를 모든 프로세스에서 동일하게 통일해 순환 대기를 제거 ROS 2 관리형(라이프사이클) 노드의 4가지 기본 상태는?::Unconfigured → Inactive → Active → Finalized (전이를 외부에서 제어해 기동 순서 보장)

05

✏️ 예상문제

1. 실행(Running) 중인 프로세스가 입출력을 요청하면 어느 상태로 전이되는가?

① 준비(Ready) ② 생성(New) ③ 대기(Waiting) ④ 종료(Terminated)

정답 및 해설

정답: ③ 입출력이 끝날 때까지는 CPU를 줘도 할 일이 없으므로 대기 상태로 가서 CPU를 내놓는다. 입출력이 완료되면 실행이 아니라 준비 상태로 돌아가 다시 CPU 배정을 기다린다는 것까지가 단골 출제다.

2. 프로세스와 스레드에 대한 설명으로 옳지 않은 것은?

① 프로세스는 독립된 메모리 공간을 가진다 ② 같은 프로세스의 스레드들은 전역 데이터와 힙을 공유한다 ③ 스레드의 생성·전환 비용은 프로세스보다 작다 ④ 스레드는 각자 완전히 독립된 힙 영역을 가진다

정답 및 해설

정답: ④ 스레드가 개별로 갖는 것은 스택뿐이고, 힙과 전역 데이터는 프로세스 안에서 공유한다. 그래서 스레드 간 통신은 간단하지만 공유 데이터 접근에 동기화가 반드시 필요하다.

3. IPC(프로세스 간 통신) 기법 중 데이터 복사가 없어 가장 빠르지만, 별도의 동기화 수단이 반드시 필요한 것은?

① 공유 메모리 ② 파이프 ③ 소켓 ④ 신호(Signal)

정답 및 해설

정답: ① 공유 메모리는 두 프로세스가 같은 메모리 영역을 직접 읽고 쓰므로 커널을 거치는 복사가 없어 가장 빠르다. 대신 동시 접근을 막을 뮤텍스·세마포어가 필수다. 같은 컴퓨터 안에서 대용량 영상을 노드 간에 넘길 때 이 방식이 활용된다.

4. 교착상태(Deadlock)의 4가지 필요조건에 해당하지 않는 것은?

① 상호 배제 ② 자원의 선점 허용 ③ 점유와 대기 ④ 순환 대기

정답 및 해설

정답: ② 교착상태의 조건은 상호 배제, 점유와 대기, 비선점, 순환 대기다. "선점을 허용"하면 남의 자원을 빼앗을 수 있으므로 오히려 교착상태가 성립하지 않는다 — 조건의 부정형을 끼워 넣는 전형적 함정이다.

5. ROS 2에서 여러 노드를 정해진 순서로 구성·활성화하기 위해, 노드의 상태(Unconfigured→Inactive→Active)를 외부에서 전이시킬 수 있게 만든 개념은?

① 파라미터 서버 ② 정적 라이브러리 ③ 관리형(라이프사이클) 노드 ④ 데드락 탐지기

정답 및 해설

정답: ③ 관리형 노드(Managed/Lifecycle Node)는 표준화된 상태 머신을 갖고 상태 전이를 외부 명령으로 제어한다. "센서가 Active인 것을 확인한 뒤 제어 노드를 Active로" 같은 기동 순서 보장이 가능해져, 대규모 시스템의 안정적 기동·종료에 쓰인다.

06

🔗 관련 노트

로봇소프트웨어개발기사 필기 · 학습 교재출제기준 2025.1.1 – 2027.12.31