[yummyHitOS] 27 day (2017.08.19)

7 분 소요

앗 오랜만에 찾아뵈옵사옵나이다 으헝헝 대학원 준비한다고 안보이던 야미가 갑자기 돌아왔어여!! 오랜만에 글 쓰는 김에 인싸용어를 주섬주섬,,



요즘에 유튜브에서 인싸용어 정리해주시는 분들이 계신데, 그걸로 공부하고있서오.. 어렵더라구용 인싸용어란 참 ㅜㅜ

저는 3월부터 대학원 공부를 때려치고! 취직을 하였서오! 토익을 해야하는데 아직 급하지가 않은지 토익공부하기가 넘넘 시르다! 하여 이번에는 본가 근처의(도보 15분가량) 회사로 왔서오 헤헤

이번에도 이전과 같이 보안솔루션 개발이예욥 아 뭔가 인싸용어를 계속 나열하면 파오후 쿰척쿰척 오덕후가 될 것 같아 인싸용어는 자제해야겠어오,,


참 그래서 이번에 맡은 솔루션은 WAF !! 아주 흠터레스팅한 솔루션을 맡았는데, 개발자가 저 혼자.. 1인 개발팀에서 하는게 오바쎄바참치넙치네욤 ㅜㅜ 얼른 팀장님이 뽑히기를!!

그간 이런일 저런일이 많았지만... 음 아무래도 크게 요약하자면 웹방화벽 솔루션 개발팀에 책임연구원으로 취직하였고, 아이맥을 샀다는 것!! 27인치인데 베젤까지 합치면 거의 32인치인 것 같아오 넘나리 큰것... 넷플릭스로 영화보기 참 조은 모니터를 산 느낌이랄까욤? 우헤헤뿌헤헤


자! 이번에는 챕터 2개를 한 번에 휘리릭 나아가볼까 해욥!! 29장과 30장의 Multicore Processor 와 Local APIC 인데, PIC 는 11일차에서 다뤘었어요! 인터럽트 처리할 때 IRQ 번호를 통해 어디서 어떤 인터럽트가 들어온 것인지 처리하는 것이었죠!

그리고 멀티코어 프로세서는 이름만 봐도 "아~ 이거슨 여러개의 코어로 처리하기 위한, 요즘 나오는 hexa core hexa thread 같은 그것이로구나!" 라고 생각하셨으리라 믿어 의심치 않숩미다리 헤헤


Multi-Core Processor

Multi-Core Processor(멀티코어 프로세서)의 위키적 의미는 단일이 아닌 여러개로 나뉘어진 코어(CPU 집적 회로)를 1개의 칩으로 통합시킨 것을 의미해요. 한 개의 칩 안에 dual-core 라면 2개의 코어가 들어있는 것이고, hexa-core 라면 6개의 코어가 들어있는 그런것이죠!

그림을 보며 이해해봅씨다!



이정도는 이름만 봐도 아신다구여?! 헤헤 역시 다들 똑똑이이심미다!! 멀티프로세싱이 나오면 빠질 수 없는 하이퍼쓰레딩이죠!


Hyper-Threading

Hyper-Threading 은 1개 코어가 2개 코어인 것 처럼 돌아가도록 보여주는 기술인데요, 2개 코어인 것 처럼 돌아가는 것을 SMT(Simultaneous Multi-Threading, 동시 멀티쓰레딩)이라고 한답미다!! SMT 는 superscalar(슈퍼스칼라) CPU 의 하드웨어 멀티쓰레딩을 개선한 기술인데, 꼭 2개 코어인 것 처럼이 아니라 Multi, 말그대로 여러 개처럼 보이도록 해주는 기술이지욤!! superscalar 는 CPU 내에서 여러 개의 pipeline 을 통해 명령어를 동시에 실행시키는 기술이에욥!! 처리속도를 빠르게 하기 위한 기술!!


앗 하이퍼쓰레딩 하나에 3개의 기술이 튀어나왔네욤 헤헤 양파같은 녀석... 이 멀티코어 프로세서를 이용한 예제 그림을 보면 "아~ 이렇게 각 코어마다 기능을 달리 할 수 있다는 거시로구나~" 하실 거애오!!



딱! 보면 아시겠져!?


GPU 는 Graphic Processing Unit 으로 그래픽적이 비중을 많이 차지하고 영상 처리를 할 때 화면에 출력되는 것이 비중이 높으므로 메모리 처리를 빠르게 화면으로 출력하기 위한 CPU 라고 생각하시면 되어욤!! 그렇다고 CPU 와는 다른 것이 CPU 는 다이에 붙는데, GPU 는 다이에 포함될 때도, 그래픽 카드에 부착될 때도 있어서 다르지용!!


DSP 는 DSP 를 위한 프로세서인데욤!! 호에에 같은 용어!! 헤헤 농담해보고싶었숩미다리 processing 과 processor 에욤!! 실시간 운영체제인 RTOS 를 위해 사용되는 코어가 DSP 와 Fast 코어구용! DSP 칩셋의 경우 리버싱에 아주 유명한 툴인 IDA 의 디컴파일 플러그인으로 쓸 수 있는 instruction 이 들어있다고 해욤!


나중에 저도 꼭 한 번 만들어보고싶었는데 헤헤 디컴파일 재밌을것같지 않나욥!!


약 20년 전에는 Clock을 높여 수행 속도를 빠르게 하는 방법으로 대체하였던 것이 이제는 코어를 늘리는 방식으로 빠밤! 컴퓨터 사실 때 4.4GHz 같은 것이 클록주파수에욤!! 무조건 클록주파수와 컴퓨터 속도가 비례하는 것은 아니구요!! "클록이 높으면서 + 프론트 사이드 버스 속도도 높고 + RAM Clock + L1~3 Cache 양" 이 모든 것이 컴퓨터 속도에 관여를 하지용!


clock frequency

Clock Frequency(클록 주파수)는 대학 논리회로 수업때 배웠던 것이었는데, 0과 1만을 발생시키는 클록이 AND, OR, NAND, NOR, XOR 등의 GATE로 이루어진 플립플롭을 통해 나오는 output 으로 이루어 진것이 반도체 기술이자 현대의 기계들이에욧!! CPU 자체 처리 속도는 클록 주파수와 비례하지만, 이에 따른 주기억장치(RAM)와 보조기억장치(Disk Drive) 등이 클록에 대응해야 하니, 삼위일체가 되기 위해선 시간이 쵸큼 걸리겠죠!? 재미있는 사실은 요즘 컴퓨터 살 때 보면 GHz 를 기본 전제로 하지만, 불과 20년 전에 펜티엄 ll 시절만 해도 300~400MHz 가 짱짱이던 시절이 있었다는 것!!


자 그럼 이제 책을 봅씨다!! 챕터 29장에서는 코어를 기준으로 돌아가기 때문에, 하드웨어쪽이 강해서 이론공부는 그렇게 많지 않아욤!! 이라고 말하고 책을 한 장 넘기니 호에에!?


BSP

BIOS 영역에서 부트로더로 넘어오기 전 POST(Power On Self Test) 과정에서 하드웨어 점검이 이미 이루어져, 부트로더 진입 전에 정보를 가져올 수 있습미다!! 그리고 그 과정을 실행하는 코어의 이름은 바로 BSP(Bootstrap Processor) 라고 합미다!!


여러분이라면 Bootstrap 이란 용어를 많이 들어 보시지 않으셨을까 함미다만,, 웹 Front-end 개발의 scss 와는 전혀 다른것이에욥!!


그리고 BSP 가 부팅과정을 마치고 부트로더로 진입 할 때 작용하는 코어는 AP(Application Processor) 라고 하구욤!! 이번엔 네트워크에서 사용되는 용어인 AP 가 등장하네욤?! 호호 네트워크의 AP 는 Access Point 로써, 일반적으로 공유기라고 알고있는 것인데, 실질적으로 access point 는 크기가 크고 중앙집중식 원격관리용도의 기기여서 NAT ip 망이 아닌 ISP 자체의 IP 를 분배하는 기능을 가지고 있습미다. 그리고 크기가 큰 만큼 자그마한 공유기와 다르게 부하분산 처리속도 및 안테나 무선 전송속도가 빨랐었었지욤!! 요즘에야 공유기도 아주 자알 나오구 안테나 8개 이상 달린것이 나와 속도도 Ehternet 케이블 만큼 빨라졌으니 요즘의 공유기는 AP 보다 더 뛰어난것 같네용 기능도 여러가지이구,, 헤헤 머지않아 AP 는 공유기의 일부이다- 라고 되어버릴 것도 같지만 이거슨 뇌피셜이니 바이니-☆

앗 이게 아니었네욤 또 삼천포로 빠져버린거시어따- Application Processor 는 BSP 가 깨우면 수행하도록 되어있서욥!!


현재 우리의 운영체제는 PIC 로 되어있지만, 이건 싱글코어의 아주 예전.. 음 임베디드쪽은 잘 모루겠내오 이쪽이라면 아직 싱글코어에 PIC 기반인 것이 있을것같기두!? 그래서 우리는 멀티코어로 전환하며 함께 APIC(Advanced Programmable Interrupt Controller)를 구현하려 하는거구욧!!


참 여담이지만 야미는 이번회사에 취직하기 전에 책과 함께하는 OS 개발을 시작한지 18개월만에 끝냈답미다!! 흑 회사다니면서, 사람들 만나면서 개발까지 하기란 참 어려웠던 것이었던 거심미다 ㅜㅜ 거의 끝을 앞두고 오랫동안 못한게 참 아쉽내오.. 시간만 있었으면 아마 5~6개월 내로 끝내지 않았을까 싶어오 ㅎㅎㅎ 완성된 소스코드는 yummyHit's Github 에 있으니 참고해주시면 될 것 같아오!! 아직 책을 진행 중이신 분들께선 아자아자 빠이팅!!



짜란~ 이게 완성된 거시에오!! 데스크탑으로 포팅까지는 완료했는데, 흑 PS/2 가 아닌 USB 포트 방식의 마우스라서 그런지 마우스 인식이 되지 않더라구욤 ㅜㅜ 그래서 당연하게도 키보드는 테스트조차 하지 못하였고... 커널 모듈을 이제 올려야하눈데 후어어 할거 넘나리 많은거시외다!!


호잇 다시 본론으로 넘어가서 코어와 APIC 의 관계도를 한 번 볼까욤!? 역시 글보다 그림, 그림보다 직접 경험하는게 가장 머리든 가슴이든 와닿는데에 빡!! 와닿으니깐뇨!!



좌측 상단의 BSP core -- Local APIC 부터 멀티 코어를 의미하는 AP core -- Local APIC 가 보이시나욤!? 인터럽트는 코어와 직접적으로 1:1 수행이기 때문에 코어에 딱 붙어있도록 그림을 나타낸 것 같아욤!!

또한 BSP core 로부터 나온 것은 I/O APIC, Legacy PIC, ACPI 로 이어져 kernel 모드로, AP core 로부터 나온 것은 16bit real mode to protected mode, and jump to 32bit 를 수행하게 되는군뇨!!


아 역시 설명은 그림과 함께 하는 것이 가장 편함미다 헤헤 그림이 없다면 그리면서 하는 것이 편하구욥!!


그리고 다시 책을 보니 갓승훈선생님께서 너무 설명을 자세히 해주셔가지구 ... 요약해드릴게욤!! 중요한 정보이니 책을 믿고 넘어가기엔 아쉬운 부분이어서욤!!


APIC

APIC는 팬티엄 lV 프로세서부터 사용되었고, 당시의 APIC 를 프로세서 내부나 코어 내부로 옮긴 것을 Local APIC 라고 합미다. 이 Local APIC 는 LINT0, LINT1(Local Interrupt) 핀과 ICC(Interrupt Controller Communications) Bus 를 통해 PIC 와 I/O APIC 가 주는 인터럽트를 처리합니당!!


용어가 쵸큼 어렵지만, 위 그림을 보시면 이해되시지 않나욤!?


또한 Local APIC 는 프로세서나 코어 간 인터럽트를 생성-전달하는 IPI(Inter-processor Interrupt) 메시지 처리 기능도 있어욥!


챕터 29장에서의 Local APIC 내용은 여기까지이지만, 챕터 30장에서 Local APIC 를 다루니 그것까지 함께 이야기해볼까용!?


사실 커널에서는 인터럽트가 아주아주 중요해요. 발생하는 모든 irregular signal 에 대하여 처리해주는 것이 인터럽트이니까요! 키보드 하나하나 입력되는 것부터, 디스크에 r/w 하는 것, 화면 출력에 변화가 생기는 것 등등 모든 것이 인터럽트가 되는 것임미다! 그렇기에 PIC 에서 APIC 로 업그레이드 하는 데에 이렇게 설명이 길지 않을까욤? 헤헤


그리고 Local APIC 는 외부 장치 또는 I/O APIC 로부터 받은 인터럽트를 CPU 로 전달해주고, 내부 타이머, 성능 모닝터링 카운터, 온도 센서 등의 프로세서 내부 인터럽트를 생성 또는 전달하는 역할도 해요! 넘나리 다재다능 멀티태스킹쟁이인것~

그럼 한 번 Local APIC 가 어떤 일들을 하는지 로드맵으로 볼까욥!?



Local APIC 의 기능을 Block 도식화 한 것이애오!! 우효~~ 기능이와 초매니다-!! 정말 멀티태스킹쟁이가 맞군뇨 헤헤


이러한 기능을 할 수 있도록 Local APIC 를 활성화시켜야 하는데, 활성화 시키기 위해선 IA32_APIC_BASE MSR 레지스터와 Spurious Interrupt Vector 레지스터에 접근해야 합미당!! IA32_APIC_BASE MSR 레지스터는 APIC 레지스터의 Base Address 와 APIC 활성화 여부, BSP 여부를 담고 있으며 의사 인터럽트 벡터 레지스터는 HW <-> SW 간의 시간 차로 발생하는 인터럽트이며 APIC 소프트웨어 활성화 여부를 담고 있어욤 ㅎㅎㅎ(의사 인터럽트는 실제 인터럽트가 아니니 EOI(End Of Interrupt) 처리를 해주면 안되어욤!!)


챕터 30장을 보시면 정말정말 자세하게 설명을 잘해주셔서.. (당연히 갓-승훈 저자님께서!!) 더 이상 포스팅을 하는 것은 책을 그대로 베껴오는 것만 같아오 ㅎㅎ 딱히 넘겨짚고 간 부분도 없이 정말 상세하게 써주셨더라구용!! 흐 이 책은 완독 10회는 해야 그 본질을 이해할 수 있을 것만 같숩미다 헤헤


다시 챕터 29장으로 돌아가볼까욧!! 끼요오옷!!! I/O APIC 는 PIC 를 대체하며 멀티프로세서 지원도 가능한 인터럽트 컨트롤러인데, ICC Bus 를 통해 원하는 Local APIC 로 전달할 수 있어요. 24개 인터럽트 라인을 동시에 처리할 수 있고 외부 장치 인터럽트 라인을 연결시키기도 하지욤!


그리고 PIC 모드, 가상 연결(Virtual Wire) 모드가 등장하며 그림과 함께 자세한 설명이 나와있네욤!! Multiprocessor 에 대해 자세히 정의한 Multiprocessor Specification 문서를 참조하면 BIOS 데이터 영역에 대해서 알 수 있다고 해욥!!


MPspec.pdf


짜잔~!! 이 문서가 '97년도에 작성되었는데 그 이후로 나온게 아주 짧은 구글링으로는 보이지 않는군뇹,, 나중에 더 찾아봐야겠수비다 희희,,


오랜만에 찾아온 야미는 여담을 아주 최소화 하고 내용전달을 아주 극대화해서 이야기해보았어요!! 사실 그 동안 또 모아둔 짤이 많이 있눈댐,,, 헤헤 요즘 회사일을 혼자하려니 고민도 많고 머리도 복잡하구.. 글을 써야지 써야지 해놓고선 두달이 후다닥 지나버렸내오...

앞으로 최대한 자주 글을 싸지르도록 해보겠숩미다 헤헤 그럼 다들 인싸용어로 마무으리 해보아욧 !!




Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.

카테고리:

업데이트:

댓글남기기