일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- NarwalFreo
- 나르왈프레오
- 증강현실
- 멤버십
- 고려대학교
- hopfield network
- 패턴인식
- 빅데이터
- 인공지능
- BAM
- Friendship
- 삼성전자 소프트웨어멤버십 SSM
- 삼성
- 하이퍼바이저
- 신경회로망
- 가상화
- 동아리
- 구글 앱 엔진
- SSM
- 파이썬
- 패턴 인식
- Python
- Neural Network
- Google App Engine
- 물걸레로봇청소기추천
- 신경망
- 삼성소프트웨어멤버십
- 물걸레자동세척로봇청소기
- 갤럭시탭S8울트라
- Bidirectional Associative Memory
- Today
- Total
정보공간_1
[3기 강남 정준호] MP-Core Scheduling 본문
주제: 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 과정이 어떻게 이루어 지는지 보다 상세히 설명 드리도록 하겠습니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[3기 강북 김승현] ffmpeg 를 이용한 간단한 동영상 플레이어 제작 #1 (0) | 2013.03.05 |
---|---|
[3기 전주 전환규] Design Compiler를 이용한 Synthesis (1) | 2013.03.02 |
[3기 강남 정준호] SMP Struct와 Multi-core System (0) | 2013.02.06 |
[3기 강북 김승현] Android Heap Memory 관리 (0) | 2013.02.06 |
[3기 강남 이소영] 스토리텔링 (Story telling) (0) | 2013.02.05 |