정보공간_1

[3기 강남 정준호] MP-Core Scheduling 본문

IT 놀이터/Elite Member Tech & Talk

[3기 강남 정준호] MP-Core Scheduling

알 수 없는 사용자 2013. 2. 6. 01:58

주제: MP-Core Scheduling

 안녕하세요 강남 멤버십 19-2 정 준호 입니다.

이전 포스팅에서 Multi-core의 부팅 과정을 설명 하였습니다그 다음 과정으로 스케쥴링 과정을 설명 하고자 합니다.

* SMP와 MP Boot

* Scheduler

* Work Queue 동작 과정

* 키보드와 마우스 디바이스 드라이버

* Console& Shell

* Testing

전 포스팅 과정에서 Core들은 이제 작업을 기다리고 있는 상태가 됩니다일을 준다면 바로 수행 할 수 있는 단계가 이죠이제 Core들에게 작업을 어떻게 주는지 설명 드리고자 합니다.

 

Scheduler


 가장 쉽고 적용하기 쉬운 R-R 스케쥴러를 사용하였습니다. 

RR 스케쥴러는 모든 TASK(또는 processes)를 동일한 시간만큼 작업을 반복 합니다예를 들어 4개의 Task가 있다고 가정한다면 각 Task CPU에서 사용 할 수 있는 시간은 모두 같습니다.

그래서 이 스케쥴러를 적용 하였고 위 그림을 보면 CPU Timer Interrupt를 발생하고 인터럽트가 발생하면 Interrupt Service Routine 에서 Scheduler를 호출 하게 됩니다다음은 스케쥴러가 Work Queue에서 작업을 하나 갖고와서 CPU에서 할당하게 됩니다이와 같은 작업을 각 core에서 동작하게 됩니다.

  


위 그림은 1개의 CPU, 스케쥴러 워크 큐 간에 시퀀스 다이어그램을 나타내고 있습니다. 

1.     SetTime: TimerInterrupt 시간 설정시간 주기 설정)

1-1.  Interrupt Occur: 타이머 인터럽트 발생

2.     OneTimeInter: Timer Mask 작업 수행

3.     OSInetExit_2(): Context Switch 진입 및 CPU 정보 Load

4.     OSIntCtxRR(): Context Switch 발생

4-1. Push: WorkQueue에서 현재 수행 중인 작업 저장

4-2. Pop: Work-Queue에서 다음 수행 할 작업 갖고 옴

5.     ReTimerIST: TimerInterrup UnMask


다음과 같은 과정으로 스케쥴러가 동작 합니다또한 이 과정이 각 Core

서 이루어 지기 때문에 4개의 Core가 하나의 Work-Queue에 접근 하고자 

합니다이때 Critical Section이 발생하는데 이를 위하여 Synchronize를 해

줘야 합니다이를 위하여 Spin-Lock 기법을 사용 하여 동기화 작업을 수

합니다.

 Wiki (Spin-Lock: http://ko.wikipedia.org/wiki/%EB%B0%94%EC%81%9C_%EB%8C%80%EA%B8%B0)

 

Work-Queue 

endPoint Queue에서 마지막으로 생성된 Task ID를 가리킨다.

ProcTaskNo[]는 각 프로세서가 현재 실행 중인 Task ID를 저장하는 

Array이다. Array Index는 각 프로세서의 Logical ID에 대응한다.


 

 Processor는 서로 충돌이 발생하지 않기 위해서로 다른 Stack Frame을 

가리키는 ESP Register값을 가져야 한다따라서작업할 Task가 하나도 없

는 최악의 경우를 대비하여 4개의 Idle Task stack이 필요하다.

만약작업할 Task가 없다면 이 Idle task stack ESP register값을 가짐으로

 Processor의 수행에 충돌이 발생하지 않게 된다.

본 블로그에서는 스케쥴러와 동기화 기법 그리고 Work-Queue 작업을 살펴 보았습니다.

다음 블로그에선 Context-Switch 과정이 어떻게 이루어 지는지 보다 상세히 설명 드리도록 하겠습니다.