본문 바로가기
확장 to the CPU - How CPU Works

CPU라는 거, 이 녀석은 논리회로의 집합체 입니다. 논리회로 하나만 구성하면 한가지 일만 하면 되지만, 요 CPU라는 여러 가지 일을 해낼 수 있는 논리회로의 집대성체 - 인간으로 치면 두뇌에 해당한다고 할까요? 대신 학습능력은 "꽝" 이죠 - 로서 CPU에게 뭔가 정해진 일을 시키면, 그에 대한 일을 할 수 있도록 하는 역할을 합니다. 컴퓨터 프로그램의 명령어를 처리하기 위한 논리회로의 집합을 담고 있는 핵심 부품이라고 할 수 있겠네요.

CPU에게 어떻게 일을 시키느냐 하면, CPU에 나와 있는 pin들에 약속된 신호를 주게 되면, 그에 대한 일을 CPU는 착실히 수행하게 됩니다. 결코 반항을 하거나, 비뚤어지지 져서 삐딱하게 굴지 않습니다.

그 일은 만일 8bit CPU에서 0~7번 pin에 약속 되어진 신호를 주게 되면 CPU는 그에 해당하는 일을 하게 되는 단순한 원리 입니다. 예를 들어 sum = a+b를 계산하고 싶으면 - 내부적으로는 Register R1에 a가, Register R2에 b가 들어 있고 그 결과를 Register R0에 저장하는 매커니즘으로 동작한다는 가정이라면.. - , 0~7번 pin에 위의 일을 하기 위해 약속 된 11001011이라고 전기적인 신호만 준다면 CPU는 내부의 Register R1과 R2에 들어 있던 값을 더해서 R0에 저장하는 일을 할 것입니다. CPU라는 건 상당히 단순한 논리회로의 집합체 인 것입니다. 단순한 일들이 모여 산을 이룬다고나 할 까요.
이런 말을 어렵게 하면, 이렇게도 표현합니다.

컴퓨터의 기계어 명령을 실행하기 위해서 수행되는 더욱 낮은 수준의 명령어. 이에 대해 원래 기계어 명령을 매크로 명령어 (macro instruction)라고 한다. 마이크로 명령어는 중앙 처리 장치(CPU) 내의 각종 게이트를 구동하는 비트 신호로 이루어지며 CPU 내의 제어 기억 장치에 저장되어 있다. 하나의 기계어 명령을 수행하기 위해서는 여러 개의 마이크로 명령이 수행되어야 하는데 CPU 내의 제어부가 마이크로 명령을 꺼내어 각 게이트에 신호를 준다.- http://kin.naver.com/openkr/entry.php?docid=23629 "정보 통신 용어 사전"

이것도 맞고, 저것도 맞네요. 아하하. 이런 CPU도 내부는 또 다른 여러 가지의 장치들로 이루어져 있습니다. 예를 들어 제어장치 CU, 연산장치 ALU가 있으며 CPU내부의 저장 공간인 Register 집합체가 들어 있지요.

일단 CPU는 CU에서 명령어를 해석하여 다른 Unit에 동작을 지시하는 일을 하며 - 엄밀히 말하면 CU와 Decoder로 나눌 수 있는데, Decoder는 명령어를 읽어서 해석하는 일을 하며, 이에 대하여 CU는 각종 제어 신호를 발생하게 됩니다. 예를 들어 ALU에게 더하기를 하라는 신호를 발생시킨다던가, 또는 메모리에게 특정 주소를 Read할 수 있도록 신호를 발생시킨다든가 하는 여러 가지 Control signal들 입니다. ALU는 산술연산을 하게 됩니다. 또한 이런 산술연산이나, 제어에 관련한 결과 등을 임시 저장하는 Register file을 가지고 있습니다. 결국, 앞서 말했던 전기적인 신호 (명령)에 대해서 반응 하는 논리회로의 집합은 CU이고, 계산을 하는 논리회로의 집합은 ALU입니다. CU가 일차적으로 반응을 하면서 CPU내 외부의 모든 control을 하게 되는데, 그 control이라는 것도 다른 unit에서 볼 때는 약속된 전기적 신호를 말하는 것입니다. 이런 전기적 신호가 난무하는 세상이 CPU 내부의 세상이라고 생각하니, 울컥 하는 느낌입니다만, 어째 잘 정비된 도시의 도로 같기도 할 것 같은 느낌입니다.

예를 들어 이런 CPU에 Embedded system에 걸맞게 여러 가지 외부 기능이 더해진 AVR MCU는 다음과 같은 구조를 갖습니다. 잘 보면 CPU부분은 Program Counter (PC), 32개의 General Register들, 그리고, Memory로 부터 명령어 (약속된 일련의 전기신호)를 가져와서 일단 담아 놓는 Instruction Register (IR), ALU, 보너스로 내부 RAM정도를 CPU 부분에 가지고 있습니다. 지금 또 나왔는데, CPU라고 써 놓은 부분이 Core입니다. 나머지는 들러리, 즉 Peripheral block 들이라고 봐야겠지요. 뭐 어째 들러리라고 하니 푸대접하는 것 같아 좀 그렇습니다만 일단 이렇게라도 말해놓아야 Core가 주인공이 되는 거 아니겠어요?- 참고로, CPU -ARM Core와 1:1 matching해서 들여다 보면, CU가 안보이죠? 보통의 CPU block도에는 Data flow위주의 block도를 보여주니까, CU는 안 보이는 게 보통이죠. 자세히 보시면 Data에 관련되는 block만 보일 것이에요. -

CPU block 이외에 Flash, UART, I/O등여러가지기능들의논리회로들이버스를통해서연결되어한개의 chip내에 implementation되어있기도합니다. 이런식으로 CPU이외의여러가지기능까지덧붙여서한개의 chip으로만든것을 MCU (Micro Controller Unit) 이라고부르기도한답니다.  

Memory 로부터명령어 (약속된일련의전기신호)를가져오는일을 Pipe lining의 Fetch단계라고부르는데, 이런 Pipe lining이라는것도살펴봐야하겠지요. 이런시작부분에서부터골치아픈것을다루면지쳐서잠들어버릴지모르니, 그냥언급만하고넘어가고, 본격적으로다루는건다음으로은근슬쩍미루는 "재치"입니다.

소프트웨어의정의는 : 전기적신호 11001011등의전기적신호는외부메모리에서부터흘러들어오는신호이며, 이런신호가바로 Software 입니다. 11001011가바로기계어라불리우는약속된패턴이며, 이런패턴을만들어내기위해서는우리가직접이런패턴을만들어서메모리에넣어둘수있겠지만, C나 C++ 같은인간이이해하기쉬운언어로인간이 Software를만들면, Compiler를이용하여기계가이해할수있는기계어패턴을만들수있습니다. 기계어패턴을다른말로는 Native Code라고불러요. 바로그런인간언어를기계가이해할수있는약속된전기신호로바꿔주는과정이 compile입니다. 뒤에나오는컴파일에대한단상을보시면다시한번자세히제의견을피력했으니잘봐주시면감사

 

 
Linked at 친절한 임베디드 시스템 개발자.. at 2009/10/01 12:32

... ⓠ 확장 to the CPU - How CPU works</a><a href="http://recipes.egloos.com/4982160" designtimesp="8133"> </a><a href="http://recipes.egloos.com/4982160" designtimesp="8136"> ... more

Linked at 더러운 북극토끼님의 이글루입니.. at 2015/10/07 15:41

... ... more

Commented by koyoon at 2009/08/05 11:42
초 간단 CPU 설명이네요....다음 이야기가 기대 됩니다...^^
Commented by 히언 at 2009/08/06 00:16
냐하하~ 기대에 부응할께요.
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.
친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -