일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 인공지능
- 패턴 인식
- 신경망
- 빅데이터
- 삼성소프트웨어멤버십
- 하이퍼바이저
- SSM
- 동아리
- 증강현실
- 패턴인식
- BAM
- 가상화
- NarwalFreo
- Neural Network
- 구글 앱 엔진
- 삼성전자 소프트웨어멤버십 SSM
- 파이썬
- 삼성
- Python
- 멤버십
- Google App Engine
- hopfield network
- Bidirectional Associative Memory
- 갤럭시탭S8울트라
- 물걸레로봇청소기추천
- 나르왈프레오
- 물걸레자동세척로봇청소기
- 신경회로망
- Friendship
- 고려대학교
- Today
- Total
정보공간_1
[3기 강남 정준호] SMP Struct와 Multi-core System 본문
[3기 강남 정준호] SMP Struct와 Multi-core System
알 수 없는 사용자 2013. 2. 6. 01:33주제: SMP Struct와 Multi-core System
안녕하세요. 강남멤버십 19-2 정준호 입니다.
저는 전체 포스팅을 통하여 하나의 OS가 만들어 지기까지의 과정을 설명 드리고자 합니다. 주로 Task가 실행되는 과정과 어떻게 실행이 되는지에 대한 내용을 설명 드리고자 합니다.
* SMP와 MP Boot
* Scheduler
* Work Queue 동작 과정
* 키보드와 마우스 디바이스 드라이버
* Console& Shell
* Testing
우선, 첫 포스팅에서 제가 소개해드릴 내용은 SMP(Symmetric Multi-Processing)구조와 Multi-Core와 Multi-Core Booting 과정
을 소개 해드리고자 합니다.
SMP(Symmetric Multi-Processing)와 Multi-Core
SMP는 대칭형 Multi-Processing 방식의 병렬 처리 전 Processor가 공통의 Memory를 이용하는 구조 입니다. 대부분의 컴퓨터나 임베디드 시스템에서 멀티코어 CPU에 적용 되어 있는 아키텍쳐 입니다.
위키:
http://ko.wikipedia.org/wiki/%EB%8C%80%EC%B9%AD%ED%98%95_%EB%8B%A4%EC%A4%91_%EC%B2%98%EB%A6%AC
즉, 여러 개의 CPU가 하나의 BUS를 사용하여 Memory와 I/O장치에 접근하는 구조입니다. 이구조의 단점은 CPU가 n개가 추가 된다면 n배의 성능이 나와야 하지만 12개의 공통된 BUS를 사용하기 때문에 BUS에 많은 Load가 걸리게 됩니다. 이러한 이유 때문에 CPU의 수를 무한정 늘리지 못하고 4개 Core에 8개 쓰래드를 나누어 최근에 많은 CPU들이 출시가 되고 있씁니다.
또한 SIngle-Core에서 Multi-Core로 변하면서 많은 이득이 발생합니다.
- Small
- Power
- Performance
다음과 같은 3가지의 이득이 발생합니다. 이세가지는 모든 IT 기술들이 추구하는 바입니다. 더 작게 만들고 더 낮은 전력으로 더 높은 성능을 이끌어내고자 합니다.
이와 같은 이점이 있어 멀티코어가 개발 되었꼬 현재까지 오게 되었씁니다.
Multi-Core Booting Sequence (본 설명은 x86을 기반으로 기술하였습니다.)
BSP(Boot Strap Processor): BSP란 PC의 전원이 인가되면 제일 처음 동작하는 Processor
AP(Application Processor): BSP를 제외한 다른 Processor를 칭함
BSP는 Bootloader를 수행하고 Kernel을 실행합니다. 그 때 다른 AP들은 Halt상태로 초기화만 이루어진 상태입니다. 그래서 Kernel은 다른 AP들을 깨워서 Kernel 영역에 진입을 시켜줘야 합니다.
BSP는 현재 MP 환경이 어떻게 구성되어 있는지를 알아야 하는데 이 정보는 MP Configuration Table에 정보가 있습니다. 이 정보를 찾기 위해서는 MP Floating Pointer Structure를 찾아야 합니다.
- MP_FPS는 시작에 “_MP_”라는 SIGNATURE로 시작하기 때문에 이를 Physical Memory에서 찾습니다. 이 MP_FPS는 다음 3곳중 하나에 존재합니다.
1. EBDA(Extended BIOS Area)의 첫 번째 Kbyte
2. Base Memory(639-640K)의 마지막 kByte
3.BIOS ROM Address Space (F0000h – FFFFFh)
FPS 시작 위치를 찾게 되면 해당 주소를 return한다. MP_FPS에서 필요한 정보는 다음과 같습니다.
- Signature는 FPS를 제데로 찾았는지 알아보는데 사용 합니다. MP Config Pointer를 통해 MP_Configuration을 따르게 됩니다, MP Feature 1을 통해 MP_Configuration Table이 유효한지 알 수 있습니다. 이 값이 0이면 유효하고 그렇지 않으면 Default_Configuration 을 따르게 됩니다.
MP_Feature 2를 통해 현재 Interrupt Mode가 어떤 것인지 알 수 있습니다. ICMRP Bit라고 하며, 이 값이 0이면 Virtual Wire Mode 입니다.
Interrupt Mode에는 PIC mode, Virtual Wire Mode, Symmetric I/O Mode가 있다.
PIC Mode는 UP 때의 Interrupt Mode로, PIC module을 통해 Interrupt Communication을 수행한다. 그러나 우리는 IPI (Interprocessor Interrupt)를 수행해야 하며, 이는 local APIC라고 하는 프로세서마다 하나씩 가지고 있는 module을 통해 Communication을 해야 한다.
후에, Symmetric I/O Mode로 전환해야 프로세서간의 IPI Communication이 이뤄지지만, 현재 AP 를 깨우는 데에는 Virtual Wire Mode로도 가능하다. 보통 최근 Processor의 경우 local APIC가 있어 자동으로 BIOS가 이를 찾아 Virtual Wire Mode로 해두는 것 같다. 출력화면에서 보듯, Signature가 제대로 출력되었고 MP Configuration Table이 있는 주소를 알 수 있으며, Feature 값 들이 모두 0으로, MP Configuration Table 값이 유효하고, Virtual Wire Mode임을 알 수 있다. 다음으로, MP Configuration Table을 구하여 Parse한다. 현재 우리에게 필요한 정보는 다음 같다.
Entry Count : MP Configuration Table 바로 뒤에 Processor, Bus, I/O APIC 등의 Entry 정보가 나온다. 이 Entry 들의 개수의 값을 알게 됨으로 어디까지 Parse해야 하는지 알 수 있다.
Address of Local APIC : Local APIC를 통해 Interrupt를 수행하기 때문에 이를 위한 local APIC 주소를 구해야한다. 출력화면에서 보다시피, Signature는 PCMP를 제대로 출력하고 있고, local APIC 주소는 0xfee00000 이다.
다음으로 수행할 작업은 Target Processor의 APIC ID를 구하는 것이다. APIC ID는 BIOS에서 각자 고유 ID를 부여하며, 이는 IPI의 Destination address로 사용된다. 각 프로세서의 local APIC ID는 Processor Entry에 있으며, Processor Entry는 MP Configuration Table 바로 뒤에 나오는 Entry들 중 길이 20byte의 첫 번째 byte의 값(Entry Type Field)이 0값을 가지는 Entry이다.
MP Configuration Table에서 구한 Entry의 개수 값과, MP Configuration Table 시작 주소를 넘겨 받아 Processor Entry를 찾고 local APIC ID를 구하여 localAPICid[] 에 할당하는 작업을 수행한다. Entry 개수만큼 루프를 돌며 Entry Type = 0 인 Processor Entry를 구하고 Parse하여 local APIC ID를 구한다. 그 결과, 출력화면에서 보다시피 현재 총 4개의 Processor가 존재하며, APIC ID는 0, 1, 2, 3이 있다. Flags 값은 BSP와 AP를 나타내며, 3값을 가지는 0번 프로세서가 BSP임을 나타낸다. 이제 본격적으로 AP를 깨우기 위해 BootAP()함수를 호출한다.
AP를 깨우면 깨워진 AP가 실행할 초기화 코드를 Trampoline Code라고 한다. AP를 깨우기 전에, 이 Code를 작성하고, 0x000VV000 주소에 로드 해두어야 한다.
현재 AP에 Trampoline code에 의해, AP는 깨워 지면 AP는 Kernel 영역에 진입하여 Working을 할 수 있는 상태가 된다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[3기 전주 전환규] Design Compiler를 이용한 Synthesis (1) | 2013.03.02 |
---|---|
[3기 강남 정준호] MP-Core Scheduling (0) | 2013.02.06 |
[3기 강북 김승현] Android Heap Memory 관리 (0) | 2013.02.06 |
[3기 강남 이소영] 스토리텔링 (Story telling) (0) | 2013.02.05 |
[3기 강남 백정의] 웹에 올리는 SWF파일과 Actionscript와 Javascript의 연동 (0) | 2013.02.05 |