[OS] Multi-core Processor Scheduling, Real Time Scheduling

parkheeddong·2023년 4월 15일
0

Operating System

목록 보기
19/63
post-thumbnail

1. Multi-Core Processor Scheduling

Ex) SMP와 같은 구조, 멀티 코어 프로세서의 경우 어떤 스케줄링을 사용해야 할까?!

1) 멀티코어 프로세서

하나의 Physical Chip 안에, 여러개의 프로세서 코어가 있어서 병렬 처리가 가능한 형태
각 코어는 자기만의 register set을 가지고 있으며, 독립적인 CPU와 마찬가지다.
운영체제 입장에서 각각의 코어는 별도의 독립적인 CPU로 보인다.

2) 멀티코어 프로세서의 스케줄링 기법의 두 단계

(1) 스레드/프로세스/테스크를 어떠한 코어에 배정할지 먼저 결정한다. => 이 때 "Load Balancing" 고려해야 한다.

  • 코어가 4개라면, c1 c2 c3 c4마다 각각의 Queue를 가진다. (= Ready Queue = 리눅스에서는 Run Queue라고 칭함)
  • c1으로 보낼지, c2로 보낼지, c3으로 보낼지, c4로 보낼지 결정한다.
  • 특정 스레드는 한 코어에 permanent하게 배정된다.(processor affinity)

(2) 각 코어마다 자신의 Ready Queue에서 어떤 프로세스를 선정할지 결정한다.

3) Processor Affinity

한 프로세서에 있는 프로세스를 다른 프로세서로 migration 되지 않도록 한다.

(1) Soft affinity

프로세스를 같은 프로세서에게 keep 하기 위해 최대한 애쓰지만, 그것이 항상 보장되지는 않는다.

(2) Hard affinity

프로세스는 무조건 영원히 한 프로세스에만 배정되며, 절대 migration 될 수 없다.
리눅스는 hard affinity를 하도록 하는 system call을 할 수도 있다.

4) Load Balancing

System에 있는 모든 processor에 workload를 골고루 분배하고, 한 CPU에 몰리지 않도록 한다.

(1) Push Migration : 많은 쪽에서 적은 쪽으로 밀어내기

각 CPU에서 어느 정도의 load를 갖고 있는지(얼만 많은 task가 있는지) 체크한다. 그리고 불균형이 있으면, 로드가 많은 쪽에서 로드가 없는 쪽으로 옮겨준다.

(2) Pull Migration : 적은 쪽에서 많은 쪽의 것을 가져오기

Idle Processor가 되면, 바쁜 processor로부터 waiting 하고 있는 프로세스들을 가져온다.

(3) 일반적으로, push와 pull migration을 함께 사용한다.

리눅스의 스케줄러의 경우 200ms 마다 push migration을 하고, 각각의 cpu는 자신의 run queue가 비어 있으면 pull migration을 하여 load balancing을 한다.

2. Real Time Processor Scheduling

  • Real Time 시스템은 실시간 시스템으로서, task 마다 deadline이 있는 시스템이다.
  • Schedulability : "task들의 deadline을 전부 맞추어서 스케줄해줄 수 있는 방법이 있는가"

0) Priority- based Scheduling & Preemptive Scheduling이다.

  • deadline이 빠를 수록 우선순위가 높다.
  • deadline이 빠른 프로세스가 cpu를 실행중인데, 그것보다 더 빠른 deadline을 가진 프로세스가 들어오면 preemption을 해야 한다.

1) Rate Monotonic Scheduling (RM)

  • real time system은 주로 '주기'를 가진 task들이 많은데, 실행 주기가 짧은 task부터 채택하는 스케줄링 방식
  • Static Priority : 주기가 짧은 것부터 채택하므로, 고정됨

2) Earliest Deadline First scheduling (EDF)

  • deadline이 빠른 프로세스를 먼저 스케줄
  • Dynamic Priority : 새로운 task가 들어오면서 우선순위가 바뀔 수 있음

0개의 댓글