SW 사관학교 정글(Jungle)/운영체제-PintOS

cpu와 스레드

jinsang-2 2024. 10. 1. 08:18

스레드가 CPU를 점유하고 있다는 것은 해당 스레드가 현재 CPU에서 실행되고 있다는 의미입니다. 이 개념을 이해하려면, 스레드와 CPU의 관계를 먼저 살펴볼 필요가 있습니다.

1. 스레드와 CPU의 관계

  • CPU는 컴퓨터의 연산 장치로, 모든 프로그램이나 작업을 처리합니다. 하지만 CPU는 한 번에 하나의 작업(즉, 하나의 스레드)만 실행할 수 있습니다.
  • 스레드는 프로그램 실행의 단위입니다. 프로그램 내의 스레드가 CPU에서 실행됨으로써 프로그램의 로직을 처리하게 됩니다.

여러 스레드가 동시에 존재할 수 있지만, CPU는 한 순간에 하나의 스레드만 실행할 수 있기 때문에, 운영체제의 스케줄러는 여러 스레드를 번갈아가며 실행하도록 조정합니다.

2. CPU를 점유하고 있다는 의미

스레드가 CPU를 점유하고 있다는 것은, 현재 해당 스레드가 CPU에서 실행되고 있으며, CPU 자원을 사용 중이라는 뜻입니다. 예를 들어, a, b, c라는 3개의 스레드가 있다고 가정할 때:

  • a 스레드가 CPU를 점유하고 있다면, a 스레드가 CPU에서 실행 중이며, 나머지 b와 c 스레드는 준비 상태로 대기하고 있는 상태입니다.
  • b나 c 스레드가 실행되기 위해서는 스케줄러가 a 스레드의 실행을 중단하고, b나 c 스레드를 CPU에서 실행시켜야 합니다.

3. CPU를 점유하는 스레드의 상태

스레드가 CPU에서 실행되고 있을 때는 Running 상태에 있다고 말합니다. 스레드의 상태는 보통 다음과 같은 단계를 거칩니다:

  1. Ready (준비 상태): 스레드가 실행되기를 기다리고 있지만, 아직 CPU에 할당되지 않은 상태입니다.
  2. Running (실행 상태): 스레드가 CPU에서 실행 중인 상태입니다. 이때, 스레드가 CPU를 점유하고 있다고 말합니다.
  3. Blocked (차단 상태): 스레드가 어떤 자원(예: I/O)을 기다리느라 CPU에서 실행되지 못하는 상태입니다.

4. 스케줄링과 CPU 점유

운영체제의 스케줄러는 CPU를 사용하고 있는 스레드를 계속 모니터링하고, 여러 스레드가 공평하게 실행되도록 조정합니다. 예를 들어:

  • 스레드가 너무 오래 CPU를 점유하고 있으면, 스케줄러가 강제로 스레드를 멈추고 다른 스레드에게 CPU를 넘겨주는 방식(선점형 스케줄링)이 사용됩니다.
  • 스레드가 스스로 thread_yield() 같은 함수를 통해 CPU를 자발적으로 양보할 수도 있습니다.

5. CPU 점유가 중요한 이유

  • 프로그램 실행: 스레드가 CPU를 점유하지 않으면, 해당 스레드는 실행되지 않습니다. 즉, CPU에서 작업을 처리해야만 프로그램의 로직이 실행될 수 있습니다.
  • 동시성: 여러 스레드가 동시에 존재할 수 있지만, CPU는 한 번에 하나의 스레드만 실행할 수 있기 때문에 스레드 간의 실행 순서 조정(스케줄링)이 매우 중요합니다.

예시:

  • 싱글 CPU 시스템에서 a, b, c 세 개의 스레드가 있고, a 스레드가 CPU를 점유하고 있을 때:
    • a 스레드가 현재 실행 중이며, CPU에서 작업을 처리하고 있는 상태입니다.
    • b, c 스레드는 CPU에서 실행되기를 기다리고 있으며, 준비 상태(ready)로 대기하고 있습니다.
    • a 스레드가 thread_yield()를 호출하거나 일정 시간이 지나면 스케줄러가 a 스레드를 중지하고 b 또는 c 스레드를 실행할 수 있습니다.

결론적으로, 스레드가 CPU를 점유한다는 것은 스레드가 현재 CPU에서 실행 중이라는 뜻이며, 이때 해당 스레드가 CPU 자원을 독점적으로 사용하여 프로그램의 작업을 처리하게 됩니다.