지노랩 /JinoLab

멀티태스킹(Multitasking)이란? 본문

임베디드 시스템/RTOS

멀티태스킹(Multitasking)이란?

지노랩/JinoLab 2025. 6. 7. 11:42
  • 일상생활의 비유: 하루 24시간 동안 식사, 이메일 답장, 전화 통화, 메모 작성, 약속 참석, 수면 등 여러 작업을 처리하듯이, 컴퓨터에서도 여러 “작업(Task)”을 동시에 처리하기 위한 기법을 멀티태스킹이라고 합니다.

작업(Task)이란?

  • 각각의 작업은 CPU에서 실행 가능한 독립적인 코드 단위를 의미합니다.
  • 예시: 온도 모니터링 시스템이라면
    1. 센서 데이터 읽기
    2. 화면 갱신
    3. 사용자 입력(버튼 누름 등) 처리
      이렇게 3가지 작업(Task)이 존재할 수 있습니다.

1. 싱글 코어에서의 멀티태스킹

  • 시간 분할(Time Slice) 방식
    • 하나의 CPU(싱글 코어)로 여러 작업을 처리하기 위해, 일정 시간만큼 각 작업에 CPU를 할당한 뒤 다음 작업으로 넘기는 방식을 사용합니다.
    • 예: 1번 작업에 10ms, 2번 작업에 10ms, 3번 작업에 10ms를 순차적으로 주고, 끝나면 다시 1번 작업으로 돌아오는 식입니다.
    • 이를 관리하는 주체가 바로 **스케줄러(Scheduler)**로, 어떤 작업에 얼마나 CPU를 할당할지 결정합니다.
  • 스케줄러의 역할
    • 각 작업의 우선순위(Priority)나 남은 실행 시간, 요구 시점 등을 감안하여 “다음에 어느 작업을 실행할지”를 결정합니다.
    • 이렇게 짧은 시간 단위로 작업을 번갈아 실행하면, 사용자는 마치 여러 작업이 동시에(Parallel) 실행되는 것처럼 느끼게 됩니다.

2. 멀티코어(Multi-Core)에서의 멀티태스킹

  • CPU가 4개(쿼드코어)라면, 각 코어가 하나의 작업을 동시에 실행할 수 있기 때문에 스케줄러 역할이 조금 단순해집니다.
    • 예) 네 개의 코어에 각각 센서 읽기, 화면 갱신, 사용자 입력 처리, 그 외 다른 작업이 바로 할당될 수 있습니다.
    • 이론적으로는 네 작업이 “진짜” 동시에 실행되므로, 응답 지연이 더 줄어듭니다.
  • 그러나 임베디드 환경에서는 비용과 전력 등의 이유로 보통 싱글 코어 MCU(Microcontroller)를 사용하기 때문에, 대부분의 경우 스케줄러가 짧은 시간 분할로 멀티태스킹을 구현하게 됩니다.

3. 멀티태스킹 예시

  • 데스크톱에서의 멀티태스킹:
    • 웹 브라우저, 음악 재생 프로그램, 코드 편집기, 계산기 등 수많은 프로세스가 각각 스레드 단위로 돌아가면서 CPU를 공유합니다.
    • 사용자는 동시에 여러 프로그램이 실행되는 것처럼 느끼지만, 사실은 스케줄러가 짧은 시간 단위로 CPU를 나누어 주는 것입니다.
  • 임베디드 시스템에서의 멀티태스킹:
    • 예) 온도 센서 데이터를 읽고 → 화면에 표시하고 → 버튼 입력을 처리하고 → 통신 모듈로 데이터를 전송하는 등 각 기능을 담당하는 작업이 있습니다.
    • 단일 코어 MCU에서는 이 작업들을 각각 작은 시간(Time Slice)을 주어 실행시키거나, 각각 우선순위를 두고 스케줄링해 처리합니다.

4. 멀티태스킹의 주요 장점

  1. CPU 활용도(Utilization) 향상
    • 한 작업이 I/O 작업(센서 읽기, 디스플레이 갱신 등)으로 대기 상태에 있더라도, 스케줄러가 다른 작업을 그 사이에 실행시켜 유휴 시간을 최소화합니다.
  2. 응답성(Responsiveness) 개선
    • 긴 작업이 돌아가더라도, 우선순위가 높은 작업(예: 버튼 입력 처리)을 곧바로 실행해 즉각 처리할 수 있습니다.
  3. 모듈화(Modularity)와 유지보수성(Maintainability) 향상
    • 각 기능을 별도 작업(Task)으로 나누어 개발하면, 코드 구조가 더 깔끔해지고 수정·확장하기 쉬워집니다.

5. 정리

  • 싱글 코어 환경: 스케줄러가 짧은 시간(Time Slice) 단위로 여러 작업을 번갈아 실행해 “가상 동시 실행”을 구현.
  • 멀티코어 환경: 각 코어가 독립적으로 작업을 병렬 실행해 진짜 동시 실행.
  • 임베디드 시스템: 대부분 싱글 코어 MCU이므로, 스케줄러 기반 멀티태스킹이 일반적.
  • 작업(Task): CPU에서 실행 가능한 독립적인 코드 단위.
  • 스케줄러(Scheduler): 어떤 작업에 언제 CPU를 할당할지 결정하는 핵심 엔진.

이로써 멀티태스킹의 개념과 동작 원리를 이해하셨을 텐데요, 다음 섹션에서는 실제 RTOS(Real-Time OS) 위에서 이 멀티태스킹을 어떻게 구현하는지 살펴보겠습니다.