정보공간_1

[3기 강남 정준호] Work-Queue Working Flow 본문

IT 놀이터/Elite Member Tech & Talk

[3기 강남 정준호] Work-Queue Working Flow

알 수 없는 사용자 2013. 4. 5. 11:45

주제: Work Queue 동작 과정

 

안녕하세요 강남 멤버십 19-2 정 준호 입니다. 어느 덧 이제 봄이네요^^ 환절기 감기 조심하세요 :)

이전 포스팅에선 Scheduler의 동작 괴정에 대하여 기술하였습니다.

다음 과정으로 스케쥴러와 Work Queue의 동작 과정을 설명 하고자 합니다

* SMP 와 MP Boot

* Scheduler

* Work Queue 동작 과정

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

* Console & Shell

* Testing

 

전 포스팅에서는 스케쥴러가 Task를 어떻게 MP 환경에서 수행되는지에 대하여 기술 하였습니다.

이제 스케쥴러가 어떤 Task를 어떻게 가져 갈 것인지를 결정 하여야 합니다.

 

본 설명은 4-Core와 1개의 Single Queue로 동작하고 있으며 Single Queue에 동작에 대하여 설명 드리겠습니다.

 

* CPU <-> Sche. <-> Work_Queue 간의 시퀀스 다이어그램

 

전 포스팅의 내용을 보면 다음과 같은 과정을 거쳐서 CPU에 Task가 할당 되게 됩니다. (http://blog.secmem.org/231)

스케쥴러는 Queue에게서 Push와 Pop 과정을 거쳐 Context Switch를 하게 됩니다. 이 과정을 좀더 자세히 설명 드리도록 하겠습니다.

(Context Switch[문맥 교환] : http://en.wikipedia.org/wiki/Context_switch )

 

* Context Switch 과정을 나타낸 Flow Chart 

 

위의 차트를 사건의 흐름 기반으로 설명하고자 합니다.

1. OSTCBCur:                 인터럽트 발생 -> 스케쥴러 호출 -> Context_Swich 시작

2. EndPoint:                    Signle Work_queue중에서 가작 마지막 작업이 드러있는 다음 노드의 EndPoint

3. TBL[endpoint]:              현제 CPU에서 사용하는 TBL을 EndPoint_Node에 저장

4 OSTCBHighRdy:              Next_Point는 Work_queue의 가장 앞에 있는 Node를 나타내며

                                       이 Node를 갖고와서 가장 높은 우선순위를 부여한다.

5. ProcTestkTCB[cpu_2]:   가장 높은 우선순위인 Node의 TCB를 현재 CPU가 작업을 수행한다.

6. NextPoint:                     이전 NextPoint를 갖고 갔으므로 다음으로 Shift 시켜, 다음 CPU가 다음 작업을

                                      수행 할 수 있도록 한다.

7. 0                                 작업이 수행 되도록 하였으므로 이전에 사용한 NextPoint는 Null을 취한다.

 

위의 과정은 1개의 CPU가 동작하는 시퀀스이다. 이 과정이 각 CPU에서 발생하여 4개의 CPU가 1개의 Work_Queue를 공유 하도록 구성하였다.

 

* 2개의 CPU가 1개의 Work-Queue를 사용할 시 Flow Chart 

 

EndPoint와 NextPoint의 흐름이해를 돕기위해 다음과 같은 Chart를 그려본다.

 

1. CPU_1이 NextPoint의 a라는 Task작업을 수행한다.

1-1. NextPoint는 한칸 Shift를 한다

1-2. 사용한 NextPoint는 Null값을 취한다.

2. CPU_2는 NExtPoint의 b라는 Task 작업을 수행한다.

2-1. NextPoint는 한칸 Shift를 한다

2-2. 사용한 NextPoint는 Null값을 취한다.

3. CPU_1은 수행중인 Task a를 EndPoint에 반납을 함        

    ( CPU_1은 Context_Switch를 발생 )

3-1.CPU_1이 NextPoint의 c라는 Task작업을 수행한다.

3-1. NextPoint는 한칸 Shift를 한다

3-2. 사용한 NextPoint는 Null값을 취한다.

위와 같은 과정을 통하여 Multi-Core 환경에서 Context-Switch가 발생하게 됩니다.

 

다음 블로그에선 키보드와 마우스 디바이스 드라이버에 관하여 블로깅 하도록 하겠습니다.