프로그래밍공부(Programming Study)/운영체제(OS)

CPU, Dispatcher, Scheduler, Run Queue, Task: 개념과 동작 원리

Chann._.y 2024. 9. 22.
728x90

1. CPU 개념

CPU(중앙처리장치, Central Processing Unit)는 컴퓨터 시스템의 핵심 구성 요소로, 모든 연산 작업을 처리하는 장치입니다. CPU는 주로 명령어 처리, 데이터 연산, 제어 신호 생성의 역할을 합니다.

  • 명령어 처리: 메모리에서 프로그램 명령어를 가져와 이를 해석하고 실행.
  • 데이터 연산: 산술 및 논리 연산을 수행.
  • 제어 신호: 시스템의 각 부품과 장치를 제어.

2. Dispatcher의 역할

Dispatcher는 운영체제에서 중요한 모듈 중 하나로, CPU 스케줄러가 선택한 작업(프로세스나 스레드)을 실제로 CPU에서 실행할 수 있도록 합니다. Dispatcher는 문맥 교환(Context Switching), 모드 변경(User Mode ↔ Kernel Mode), 프로세스 실행 제어 등의 작업을 담당합니다.

  • 문맥 교환: CPU에서 실행 중인 프로세스의 상태를 저장하고, 새로운 프로세스의 상태를 복원하여 실행을 전환.
  • 모드 변경: 사용자 모드에서 커널 모드로 전환하거나 그 반대로 전환.

3. Scheduler의 개념과 종류

Scheduler는 CPU에 작업을 할당하는 운영체제의 모듈로, 효율적인 CPU 사용을 위해 작업을 관리합니다. 스케줄러는 주로 다음과 같은 3가지로 나뉩니다.

  1. 장기 스케줄러(Long-term Scheduler):
    • 시스템에 어떤 프로세스를 실행할지 결정.
    • 주로 배치 시스템에서 사용.
  2. 중기 스케줄러(Mid-term Scheduler):
    • 메모리 관리를 위해 일부 프로세스를 메모리에서 제거하거나 다시 로드하는 역할.
    • 스왑(swap)을 통해 메모리 공간을 확보.
  3. 단기 스케줄러(Short-term Scheduler):
    • CPU에 즉시 실행할 프로세스를 선택.
    • 운영체제 커널에서 주로 사용.

4. Run Queue란 무엇인가?

Run Queue(실행 대기 큐)CPU가 실행할 수 있도록 준비된 프로세스들의 목록입니다. 프로세스들은 보통 준비 상태(Ready State)에서 이 큐에 놓이며, 스케줄러는 이 큐에서 다음 실행할 프로세스를 선택합니다.

  • 큐의 관리: FIFO 방식이 기본이지만, 우선순위 기반 큐도 사용될 수 있습니다.
  • 멀티코어 시스템: 각 CPU 코어에 별도의 Run Queue가 있을 수 있습니다.

5. Task의 정의와 종류

Task는 운영체제에서 관리하는 작업 단위로, 프로세스 또는 스레드가 그 예입니다. Task는 실행 준비 상태에 있으며, 스케줄러에 의해 CPU에 할당됩니다.

  1. 프로세스(Task as Process):
    • 메모리 공간을 독립적으로 소유하며, 실행 가능한 프로그램의 인스턴스.
  2. 스레드(Task as Thread):
    • 프로세스 내에서 실행되는 작은 단위.
    • 메모리를 공유하여 더 가볍게 동작.

6. CPU 스케줄링의 사례 (Python 코드 예시)

CPU 스케줄링은 다양한 알고리즘을 사용합니다. 그 중 라운드 로빈(Round Robin) 스케줄링의 간단한 Python 구현 예시를 통해 개념을 살펴보겠습니다.

from collections import deque

# Task 클래스 정의
class Task:
    def __init__(self, name, burst_time):
        self.name = name
        self.burst_time = burst_time
        self.remaining_time = burst_time

# 라운드 로빈 스케줄러 정의
def round_robin_scheduling(tasks, quantum):
    queue = deque(tasks)
    time = 0

    while queue:
        task = queue.popleft()
        if task.remaining_time > quantum:
            print(f"Task {task.name} 실행 중... (Time: {time})")
            task.remaining_time -= quantum
            time += quantum
            queue.append(task)  # 아직 남은 작업이 있으므로 다시 큐에 넣음
        else:
            time += task.remaining_time
            print(f"Task {task.name} 완료! (Time: {time})")
            task.remaining_time = 0

# 테스트용 태스크 설정
tasks = [Task("Task1", 10), Task("Task2", 5), Task("Task3", 8)]
quantum = 3

round_robin_scheduling(tasks, quantum)

위 코드에서 라운드 로빈 스케줄링 알고리즘은 각 태스크에 정해진 시간(퀀텀)을 할당하여 실행하며, 작업이 완료되지 않으면 다시 큐에 넣어 순차적으로 처리합니다.


CPU, Dispatcher, Scheduler, Run Queue, Task: 개념과 동작 원리

  1. CPU는 컴퓨터 시스템에서 모든 작업을 처리하는 중요한 장치입니다.
  2. Dispatcher는 스케줄러가 선택한 작업을 실제로 CPU에서 실행하게 해줍니다.
  3. Scheduler는 작업을 효율적으로 관리하며, 장기, 중기, 단기로 구분됩니다.
  4. Run Queue는 CPU에서 실행 대기 중인 프로세스들의 목록입니다.
  5. Task는 운영체제에서 실행하는 작업 단위로, 프로세스나 스레드가 될 수 있습니다.

 

728x90

댓글