[운영체제] Ch5 CPU 스케줄링

박소미·2024년 10월 20일

운영체제

목록 보기
5/10

1. CPU 스케줄링 개요

CPU 스케줄링은 준비 상태(Ready)에 있는 스레드들 중 하나를 선택하여 CPU를 할당하는 과정이다.

오늘날 CPU 스케줄링은 준비 상태의 스레드 중 하나를 선택하는 스레드 스케줄링이다.

스케줄링은 왜 필요한가?

  • 자원에 대한 경쟁

  • 자원: CPU, 디스크, 프린트, 파일, 데이터베이스 등

컴퓨터 시스템 내 다양한 스케줄링

  • 작업(job) 스케줄링

  • CPU 스케줄링

  • 디스크 스케줄링

  • 프린터 스케줄링


1.1 다중프로그래밍과 스케줄링

  1. 다중 프로그래밍의 목적:

    • 다중 프로그래밍은 여러 프로그램(프로세스)을 메모리에 동시에 올려놓고 실행하는 방식이다.

    • 이를 통해 CPU의 유휴 시간을 줄이고, CPU 활용률을 높이는 것이 주요 목적이다.

  2. 두 가지 스케줄링 기법:

    • 작업 스케줄링 (Job Scheduling): 작업들을 메모리에 올리고 CPU에서 실행할 준비가 된 프로그램을 선정하는 과정이다. 작업 스케줄링은 CPU가 실행할 작업을 선택한다.

    • CPU 스케줄링 (CPU Scheduling): 이미 메모리에 올라와 있는 프로세스들 중에서 어떤 프로세스가 CPU를 사용할지 결정하는 과정이다.

  3. 다중 프로그래밍 운영 체제의 구조:

    • 다중 프로그래밍에서는 여러 프로세스가 메모리에 상주하고 있으며, CPU는 이 프로세스들 사이에서 스케줄링을 통해 교대로 처리하게 된다.

    • 작업들은 입출력 대기 중이나 다른 자원에 의해 대기하는 동안 다른 작업들이 CPU를 사용할 수 있도록 스케줄링된다.


1.2 CPU burst와 I/O burst

  1. 프로그램의 실행 특성:

    • CPU burst(연산 작업): 프로세스가 CPU에서 집중적으로 계산을 수행하는 구간을 의미한다.

    • I/O burst(입출력 작업): 프로세스가 I/O 작업을 기다리거나 수행하는 구간을 의미한다.

    • CPU burst와 I/O burst가 교대로 나타나며, 이를 반복하면서 프로세스는 실행된다.

  2. 두 가지 프로세스의 실행 패턴:

    • (a) CPU 집중 프로세스: CPU를 많이 사용하는 작업으로, CPU burst가 길게 지속되고 I/O 작업은 적은 시간이 소요된다.

    • (b) I/O 집중 프로세스: I/O 작업이 많아 CPU burst는 짧고, I/O burst가 상대적으로 긴 시간이 소요된다.


1.3 CPU 스케줄링의 기본 목표

  • 기본 목표:

    • CPU 활용률 향상 -> 컴퓨터 시스템 처리율 향상

1.4 CPU 스케줄링의 기준(criteria)

  1. CPU 활용률(CPU utilization):

    • 전체 시간 중 CPU가 작업을 수행하는 시간의 비율로, 운영체제 관점에서 CPU가 얼마나 효율적으로 사용되는지 평가한다.
  2. 처리율(throughput):

    • 단위 시간당 처리되는 스레드의 개수로, 시스템이 얼마나 많은 작업을 빠르게 처리할 수 있는지를 평가한다.
  3. 공평성(fairness):

    • CPU가 여러 스레드에게 균등하게 할당되는지를 보며, 특정 스레드가 기아(starving) 상태에 빠지지 않도록 하는 것이 중요하다.
  4. 응답 시간(response time):

    • 대화형 사용자 시스템에서는 요청에 대한 응답 시간을 최소화하는 것이 목표이다.
  5. 대기 시간(waiting time):

    • 스레드가 실행되기 전 준비 큐에서 대기하는 시간으로, 이 시간을 줄이는 것이 중요하다.
  6. 소요 시간(turnaround time):

    • 스레드가 실행되어 결과를 얻기까지 걸리는 시간으로, 시스템의 성능을 평가할 수 있는 중요한 기준이다.
  7. 시스템 정책(policy enforcement):

    • 특정 시스템 목표 달성을 위한 정책을 스케줄링에 반영하는 기준이다. 예를 들어, 실시간 시스템에서는 기한 내에 작업이 완료되도록 보장하는 스케줄링 정책을 적용한다.
  8. 자원 활용률(resource efficiency):

    • 시스템 자원을 최대한 효율적으로 사용하는 것을 목표로 한다.

1.5 CPU 스케줄링과 타임 슬라이스

  1. 타임 슬라이스 개념:

    • 대부분의 운영체제에서 하나의 스레드가 너무 오랜 시간 동안 CPU를 독점하지 않도록 타임 슬라이스(time slice)를 사용한다.
  2. 타임 슬라이스와 스케줄링:

    • 타임 슬라이스란 스케줄된 스레드에게 한 번 할당되는 CPU 사용 시간이다.

    • 커널은 이 타임 슬라이스를 기반으로 스케줄링을 단행하며, 일정한 주기로 CPU에서 스레드를 교체한다.

    • 타임 슬라이스는 흔히 타임 퀀텀(time quantum)이나 타임 슬롯(time slot)이라고도 불린다.

  1. 타임 슬라이스 목적:

    • CPU 자원을 여러 스레드 간에 공정하게 분배하고, 하나의 스레드가 과도한 시간을 점유하지 않도록 방지하는 데 목적이 있다.

2. CPU 스케줄링 기본

2.1 CPU 스케줄링이 실행되는 4가지 상황

  1. 시스템 호출 끝에 I/O를 요청하여 블록될 때

    • 스레드가 I/O 작업을 요청하면서 블록 상태로 전환될 때 CPU 스케줄링이 발생한다.
    • 목적: CPU 활용률을 높이기 위함.
  2. 스레드가 자발적으로 CPU를 반납할 때

    • yield()와 같은 시스템 호출을 통해 스레드가 자발적으로 CPU를 양보할 때 스케줄링이 발생한다.
    • 목적: 자발적 양보를 통해 CPU 자원을 효율적으로 관리.
  3. 타임 슬라이스가 소진되어 타이머 인터럽트가 발생할 때

    • 스레드의 할당된 타임 슬라이스가 끝나면 타이머 인터럽트가 발생하고 스케줄링이 일어난다.
    • 목적: CPU 자원을 균등하게 분배하기 위함.
  4. 더 높은 우선순위 스레드가 요청한 작업 완료 후, 인터럽트 발생할 때

    • 우선순위가 높은 스레드의 작업이 완료되거나 새로운 스레드가 실행될 준비가 되었을 때 스케줄링이 발생한다.
    • 목적: 우선순위를 지키기 위한 조치.

2.2 CPU 스케줄링과 디스패치

  1. CPU 스케줄링 코드의 위치와 실행 시점

    • 위치: 스케줄링 코드는 커널 내에 위치한 함수로, 커널 스레드나 프로세스에서 실행된다.
    • 실행 시점: 스케줄링 코드는 시스템 호출이나 ISR(Interrupt Service Routine)이 끝나는 마지막 단계에서 실행된다.
  2. 디스패처(dispatcher) 코드 실행

    • 디스패처는 CPU 스케줄링 후 실행을 담당하는 스레드나 프로세스에게 실제로 CPU를 넘겨주는 작업을 담당하는 코드이다.
  3. 스케줄러와 디스패처의 실행 시간

    • 스케줄러와 디스패처 모두 실행 시간이 짧아야 하며, 시스템의 효율성을 높이기 위해 최소한의 오버헤드를 요구한다.

CPU 스케줄링과 디스패치(dispatch) 과정에서 스레드 A에서 스레드 B로 스위칭이 발생하는 과정

  1. 인터럽트 발생

    • 타이머나 I/O 장치로부터 인터럽트가 발생하거나, 스레드 A가 시스템 호출(system call)을 실행하면, 스레드 A는 인터럽트 서비스 루틴이나 시스템 호출 처리 루틴으로 진입하게 된다.
  2. 스레드 A가 양보

    • 스레드 A가 스스로 양보하거나(yield() 호출), I/O 작업이 완료되면 스케줄러가 새로운 스레드를 선택하는 과정을 시작한다.
  3. 스케줄러 코드 실행

    • 준비 리스트에 있는 다른 스레드 중에서 실행 가능한 스레드 B를 선택하여, 스레드 A 대신 CPU에 할당한다.
  4. 디스패처 코드 실행

    • 디스패처(dispatcher)는 CPU의 현재 상태(레지스터 값 등)를 TCB(Task Control Block) A에 저장한 후, TCB B에 저장된 스레드 B의 상태를 CPU로 복구하여 스레드 B를 실행시킨다.
  5. 스레드 B 실행

    • 스레드 B는 디스패치 과정을 통해 CPU를 할당받아 실행된다.

2.3 스케줄링 타입: 선점 스케줄링과 비선점 스케줄링

  • 비선점 스케줄링(non-preemptive scheduling):

    스레드가 자발적으로 CPU를 반환할 때까지 실행이 강제 종료되지 않는다. 즉, 스레드는 자신이 CPU에서 작업을 마칠 때까지 실행된다.

  • 선점 스케줄링(preemptive scheduling):

    실행 중인 스레드가 시스템에 의해 강제로 중단되고 다른 스레드가 CPU를 사용할 수 있도록 스케줄링된다. 타이머 인터럽트나 I/O 인터럽트 등의 이벤트가 발생하면 스레드가 중지되고 다른 스레드가 실행될 수 있다.

  • 오늘날의 운영체제:

    • 실시간 임베디드 시스템 운영체제는 비선점 스케줄링을 사용하는 경우가 있다. 이는 중요한 작업이 중단되지 않고 끝날 수 있도록 보장하기 위해서다.
    • 대부분의 현대 운영체제는 선점 스케줄링을 사용하여 CPU의 자원을 더 효율적으로 분배하고 시스템 반응성을 높인다.

(a) 비선점 스케줄링 사례

  • T1 스레드가 CPU를 점유한 상태에서 I/O 작업이 발생하면, T1은 I/O blocked 상태가 되어 CPU에서 물러난다.

  • 그 후, T1이 I/O 완료 시점에 다시 ready 상태가 되면 CPU를 점유해 작업을 마친다.

  • T2 스레드는 T1이 CPU에서 물러난 뒤 비로소 실행된다.

  • 스레드 간의 자발적 양보가 없으며, 스레드가 자발적으로 CPU를 반납하지 않으면 다른 스레드는 실행되지 않는다.

(b) 선점 스케줄링 사례

  • 각 스레드는 타임슬라이스에 따라 주기적으로 CPU를 할당받고, 할당 시간이 끝나면 다른 스레드가 CPU를 점유한다.

  • T1 스레드I/O 작업으로 blocked 상태가 되면 다른 스레드가 CPU를 사용한다.

  • yield() 호출과 같은 시스템 호출을 통해 자발적으로 CPU를 반환할 수 있다.

  • 타임슬라이스 덕분에 T1, T2, T3 스레드 모두 번갈아 가며 CPU를 사용하게 되어 처리 속도와 자원 분배가 더 효율적이다.

2.4 기아와 에이징

1. 기아 (Starvation)

  • 정의: 스레드가 스케줄링에서 선택되지 못하고 오래 준비 큐에 머무르는 상태를 말한다.

  • 사례:

    • 우선순위가 높은 스레드가 계속 시스템에 들어오면서, 우선순위가 낮은 스레드는 계속해서 실행되지 못하는 상황.
    • 짧은 작업의 스레드가 계속 도착해 먼저 실행되면서, 긴 작업의 스레드가 실행되지 못하는 상황.

2. 에이징 (Aging)

  • 정의: 기아 문제를 해결하기 위한 기법이다. 스레드가 준비 큐에 오래 머물수록 스케줄링 순위를 점차 높이는 방법을 말한다.

  • 목적: 기아 문제를 방지하여 모든 스레드가 일정 시간이 지나면 CPU를 사용할 수 있도록 보장한다.

3. 다양한 CPU 스케줄링 알고리즘

  1. FCFS (First Come First Served)

    • 비선점 스케줄링 방식
    • 먼저 도착한 스레드가 먼저 실행된다.
  2. SJF (Shortest Job First)

    • 비선점 스케줄링 방식
    • 실행 시간이 가장 짧은 작업이 먼저 실행된다.
  3. SRTF (Shortest Remaining Time First)

    • 선점 스케줄링 방식
    • 남은 시간이 가장 짧은 스레드가 우선적으로 실행된다.
  4. Round-Robin

    • 선점 스케줄링 방식
    • 각 스레드는 고정된 타임 슬라이스 내에서 실행되며, 그 시간이 지나면 다음 스레드로 전환된다.
  5. Priority Scheduling

    • 선점/비선점 스케줄링 모두 가능
    • 우선순위가 높은 스레드가 우선적으로 실행된다.
  6. Multilevel Queue Scheduling

    • 선점/비선점 스케줄링 모두 가능
    • 스레드가 다중 레벨 큐로 관리되며, 각 레벨에 대해 스케줄링 정책이 다를 수 있다. 스레드는 큐 사이에서 이동하지 못한다.
    • 예시: 백그라운드 프로세스와 포어그라운드 프로세스를 분리하여 관리
  7. Multilevel Feedback Queue Scheduling

    • 선점/비선점 스케줄링 모두 가능
    • 스레드는 다양한 레벨의 큐 사이에서 이동할 수 있으며, 긴 시간 동안 큐에 머무를 경우 더 높은 우선순위를 부여받아 상위 큐로 이동된다.

3.1 FCFS(First Come First Served) 스케줄링

  1. 알고리즘: 큐에 먼저 도착한 스레드를 먼저 스케줄링한다.

  2. 스케줄링 파라미터: 스레드 별 큐 도착 시간이 기준이 된다.

  3. 스케줄링 타입: 비선점 스케줄링 방식으로, 한 번 CPU를 차지한 스레드는 작업이 완료될 때까지 계속 CPU를 사용한다.

  4. 스레드 우선순위: ❌

  5. 기아(starvation): 발생 ❌


3.2 SJF (Shortest Job First)

  1. 알고리즘: 가장 짧은 실행 시간을 가진 스레드를 먼저 스케줄링한다.

  2. 스케줄링 파라미터: 스레드 별 예상 실행 시간

    • 스레드의 실행 시간을 미리 아는 것은 불가능하기 때문에 비현실적이다.
  3. 스케줄링 타입: 비선점 스케줄링 방식

  4. 스레드 우선순위: ❌

  5. 기아(starvation): 발생 가능

    • 짧은 스레드가 계속 도착하여 긴 스레드가 대기하는 현상이 발생할 수 있다.
  6. 성능 이슈: 평균 대기 시간을 최소화하는 장점이 있다.

  7. 문제점: 실행 시간 예측이 불가능하므로 현실적으로 거의 사용되지 않는다.


3.3 SRTF (Shortest Remaining Time First)

  1. 알고리즘: SJF의 선점 스케줄링 버전으로, 실행 시간이 더 짧은 스레드가 도착하면 현재 실행 중인 스레드를 중단하고 짧은 스레드를 실행한다.

  2. 스케줄링 파라미터: 스레드 별 예상 실행 시간과 남은 실행 시간

  3. 스케줄링 타입: 선점 스케줄링 방식으로, 더 짧은 실행 시간이 남은 스레드가 도착하면 현재 스레드를 중단시킨다.

  4. 스레드 우선순위: ❌

  5. 기아(starvation): 발생 가능

    • 짧은 스레드가 계속 도착하면 긴 스레드는 계속 대기할 수 있다.
  6. 성능 이슈: 평균 대기 시간을 최소화하는 장점이 있다.

  7. 문제점: 실행 시간 예측이 불가능하므로 현실에서는 거의 사용되지 않는다.


3.4 RR (Round-Robin)

  1. 알고리즘: 모든 스레드에 동일한 시간 할당량(time slice)을 부여하여 순차적으로 CPU를 할당하는 방식이다.

  2. 스케줄링 파라미터: 타임 슬라이스

  3. 스케줄링 타입: 선점 스케줄링 방식으로, 각 스레드가 지정된 시간 동안만 CPU를 사용하고 그 이후에는 다른 스레드로 교체된다.

  4. 스레드 우선순위: ❌

  5. 기아(starvation): ❌

  6. 성능 이슈:

    • 공정성이 좋고 구현이 쉽다.
    • 오버헤드가 클 수 있다 (특히 타임 슬라이스가 작을 경우).
    • 타임 슬라이스가 크면 FCFS와 비슷하고, 작으면 짧은 스레드는 SJF처럼 더 빨리 완료될 수 있다.

비교 항목타임 슬라이스 = 1ms타임 슬라이스 = 2ms
평균 대기 시간3.25ms3ms
스케줄링 횟수10번6번
컨텍스트 스위칭 횟수9번5번
오버헤드큼 (컨텍스트 스위칭 많음)적음 (컨텍스트 스위칭 적음)
짧은 작업 처리 속도빠름다소 느림
긴 작업 처리 속도보통상대적으로 빠름
CPU 효율성낮음 (컨텍스트 스위칭 과다)높음 (스위칭 적음)

3.5 Priority

  1. 알고리즘: 모든 스레드에 고정 우선순위가 할당되며, 작업이 종료될 때까지 우선순위가 변경되지 않는다. 우선순위 순서로 큐에 삽입된다.

  2. 스케줄링 파라미터: 스레드별 고정 우선순위

  3. 스케줄링 타입: 선점 스케줄링/비선점 스케줄링 모두 가능

  4. 스레드 우선순위: ⭕

  5. 기아(starvation): 발생 가능. 에이징(aging) 기법으로 해결할 수 있다.

  6. 성능 이슈: 높은 우선순위의 스레드일수록 대기 시간이나 응답 시간이 짧아진다.

  7. 특징: 스레드별로 고정된 우선순위를 가지는 시스템에서 사용된다.


3.6 MLQ (Multi-level Queue Scheduling)

  1. 알고리즘: 각 큐는 나름대로의 기준을 바탕으로 스케줄링한다. 여러 개의 큐가 서로 다른 우선순위를 가지며, 각 큐는 독립적으로 스케줄링된다.

  2. 스케줄링 파라미터: 스레드별 고정 우선순위

  3. 스케줄링 타입: 비선점/선점 스케줄링 모두 가능

  4. 스레드 우선순위: ⭕

  5. 기아(starvation): ⭕

  6. 성능 이슈 및 활용 사례:

    • 스레드의 고정된 우선순위를 가진 시스템에서 활용된다.
    • 예: 백그라운드 스레드와 포그라운드 스레드를 구분하여 각각 다른 레벨의 큐에서 스케줄링.
    • 시스템 스레드, 대화식 스레드, 배치 스레드를 각각 다른 레벨로 나눠 시스템 스레드를 우선적으로 스케줄링.
    • 대학에서 교수, 교직원, 대학원생, 학부생을 각각 레벨별로 나누어 스케줄링.


3.7 MLFQ (Multi-level Feedback Queue) 스케줄링

  1. 설계 의도: 기아 문제를 없애기 위해 여러 레벨의 큐 사이에서 스레드가 이동할 수 있도록 설계되었다. 짧은 스레드와 I/O 작업이 많은 스레드, 대화식 스레드의 우선 처리로 스레드 평균 대기시간을 줄인다.

  2. n개의 레벨 큐: 큐마다 서로 다른 스케줄링 알고리즘을 적용하며, 낮은 레벨의 큐일수록 긴 타임 슬라이스를 사용한다.

  3. 알고리즘:

    • 도착 시 최상위 레벨 큐에 삽입된다.
    • 스레드가 CPU-burst 시간을 초과하면 아래 레벨 큐로 이동한다.
    • 스레드가 자발적으로 중단되면 현재 큐 끝에 삽입되고, I/O 작업이 끝난 후 동일한 레벨 큐의 끝에 삽입된다.
    • 큐에 오래 대기한 스레드는 기아 방지를 위해 하나 위 레벨의 큐로 이동한다.
  4. 스케줄링 파라미터: 각 큐의 타임 슬라이스

  5. 스케줄링 타입: 선점 스케줄링

  6. 스레드 우선순위: ❌

  7. 기아(starvation): 발생하지 않음. 에이징(aging) 기법으로 해결.

  8. 성능 이슈: 짧거나 I/O 작업이 많은 스레드는 높은 레벨의 큐에서 우선 실행된다. CPU 활용률이 높음.

  • (a) 스레드 도착: 스레드가 시스템에 도착하면 가장 높은 우선순위를 가진 레벨 4 큐에 삽입된다. 타임 슬라이스는 4ms로 설정된다.

  • (b) 레벨 4 큐에 삽입: 스레드는 레벨 4 큐에 배치되어 CPU 할당을 대기한다.

  • (c) 스레드 실행: 스레드는 CPU를 차지하고 레벨 4 큐에서 4ms 동안 실행된다. 이 때, 스레드가 계속 실행될 필요가 있다면 타임 슬라이스가 종료되면서 레벨이 변경된다.

  • (d) 레벨 3 큐로 이동: 4ms의 타임 슬라이스가 끝난 후 스레드는 레벨 3 큐로 이동된다. 레벨 3의 타임 슬라이스는 6ms로 설정된다.

  • (e) 스레드 실행: 스레드는 레벨 3 큐에서 다시 CPU를 할당받고 6ms 동안 실행된다.

  • (f) I/O 완료 후 큐에 다시 삽입: 스레드가 I/O 작업을 완료한 후 다시 레벨 3 큐에 삽입된다. 이 때 CPU 버스트가 다시 발생하면 우선 레벨 3 큐의 끝에 삽입된다.

  • (g) 스레드 실행 (레벨 3): 스레드는 레벨 3에서 6ms 동안 실행된다.

  • (h) 레벨 2 큐로 이동: 6ms의 타임 슬라이스가 끝나면 스레드는 레벨 2 큐로 이동된다. 레벨 2의 타임 슬라이스는 8ms이다.

  • (i) 스레드 실행: 스레드는 레벨 2 큐에서 다시 실행된다.

4. 멀티 코어 CPU에서의 스케줄링

4.1 멀티 코어 CPU와 병렬 처리

  • 코어:
    레지스터들과 연산 장치(ALU), 제어장치와 버스 인터페이스를 가지고 기계명령을 처리할 수 있는 프로세서이다.

  1. 멀티 코어 구성:

    • 인텔 Core-i7 CPU는 4개의 코어를 가지고 있으며, 각 코어는 다음과 같은 캐시 계층을 포함하고 있다:
      • I-캐시: 명령어 캐시.
      • D-캐시: 데이터 캐시.
      • L2 캐시: 각 코어별로 256KB로 할당된 중간 캐시.
      • L3 캐시: 모든 코어가 공유하는 8MB 크기의 캐시.
  2. 멀티스레딩 처리:

    • 하단의 TCB(Task Control Block) 리스트에서 각 스레드가 처리될 프로세스와 연결된다.
    • 커널 스케줄러는 이 TCB 리스트를 관리하여, 각 프로세스를 적절한 코어에 배정하고 실행을 담당한다.
  3. 프로세스와 코어의 매핑:

    • 각각의 프로세스는 여러 스레드를 가질 수 있으며, 각 스레드는 커널 스케줄러에 의해 특정 코어에 할당된다.
    • 예를 들어, 프로세스 1코어 0에, 프로세스 2코어 1코어 2에, 프로세스 3코어 3에 할당되어 처리된다.

4.2 멀티 코어 시스템에서 CPU 스케줄링과 작업 분배

  • 컨텍스트 스위칭 후 오버헤드 문제:

    • 컨텍스트 스위칭 후, 실행 중에 새로운 스레드의 코드와 데이터가 캐시에 채워지는 데 긴 경과 시간이 소요된다.
    • 즉, 캐시 미스로 인해 성능 저하가 발생할 수 있다.
  • 컨텍스트 스위칭 후 오버헤드 문제 해결 :

    • CPU 친화성(CPU affinity)을 적용하여, 스레드를 동일한 코어에서만 실행하도록 한다. 이는 캐시 친화성(cache affinity)코어 친화성(core affinity)을 고려한 방식으로, 스레드가 자주 실행되는 코어에서 반복 실행됨으로써 캐시 미스가 줄어든다.
    • CPU 핀닝(pinning): 스레드를 특정 코어에 고정하여 실행 성능을 높이는 기법이다.

  • 코어별 부하 불균형 문제:

    • 작업이 특정 코어에 집중되면, 다른 코어는 유휴 상태로 남아 부하가 불균형하게 분배된다.
  • 코어별 부하 불균형 문제 해결:

    • 부하 균등화 기법을 사용한다.
    • 푸시 마이그레이션(push migration): 작업이 적은 코어에서 다른 코어로 스레드를 이동시키는 기법이다.
    • 풀 마이그레이션(pull migration): 작업이 많은 코어에서 스레드를 다른 코어로 가져오는 기법이다.

  1. 코어별 스레드 큐:
    • 각 코어는 자신의 스레드 큐를 관리한다.
    • 스레드가 실행 중에 중단되면, 해당 코어의 스레드 큐로 돌아가 다음 스레드가 실행되도록 한다.
  2. 스레드 이동:
    • 실행이 중단된 스레드는 같은 코어의 스레드 큐로 다시 돌아가 대기하게 된다.
    • 이는 캐시 친화성(cache affinity)과 코어 친화성(core affinity)을 유지하는 데 중요한 역할을 한다.

0개의 댓글