본문 바로가기
시피유(CPU)가 하는 일이 뭐죠

시피유(CPU)가 하는 일이 뭐죠

뭘 알아야 이해를 하지!
전자 수첩, 휴대폰, 엠피쓰리 등 전자기기에 전원을 켜면 제일 먼저 시피유(CPU)가 일을 해요. 시피유 내부에는 가장 중요한 역할을 하는 코어(Core)가 있는데, 만약 암(ARM) 코어가 들어가 있다면 일반적으로 그 시피유는 다른 말로 암프로세서 라고 부르기도 하죠. 암 코어는 메모리-에스디램 또는 노어플래시-에 있는 코드를 읽어오고①, 읽어온 코드는 기계어로 번역을 한 후②, 실행을③ 하게 되는데, 바로 엘시디, 사운드, 진동, 키패드, 기타 등등을 동작 시킨답니다.

임베디드 시스템은 시피유, 엘시디, 사운드, 진동, 키패드 등과 같이 다양한 하드웨어로 구성되어 있는데, 시피유가 모든 구성요소를 제어한다고 보시면 되요. 시피유를 제외한 구성요소들을 일반적으로 패리퍼럴(Periphral)이라고 불러요. 하지만 시피유와 패리퍼럴만 있다고 해서 동작 될까요? 아뇨. 무언가 빠졌어요. ㅎㅎ
시피유와 패리퍼럴들을 연결시켜 주는 각종 패리퍼럴 컨트롤러가 있어야 해요. 개발자는 해당 패리퍼럴 컨트롤러 설정해야 비로소 동작 된답니다. (시피유와 각종 패리퍼럴 컨트롤러가 모여서 하나의 MCU를 만들어 내고, MCU 제조 회사들은 새로운 이름을 붙인답니다.)

시피유가 시리얼(또는 유아트:UART, 컴포트:COM port) 컨트롤러에 신호를 보내면 시리얼 포트가 동작하게 되는데, 시피유 입장에서는 시리얼 포트쪽으로 신호를 보낼 때도 있지만 반대로 시피유가 시리얼 포트로부터 신호를 받을 때도 있답니다. 그래서 시피유는 시리얼포트로 신호를 보낼 때는 아웃풋이라고 하고, 시리얼포트에서 시피유로 신호를 받을 때는 인풋이라고 해요.
예를 들면, 휴대폰으로 친구에게 전화를 걸어야 한다면 키패드에 전화번호 버튼을 눌려야 하겠죠? 전화번호가 적혀 있는 키패트 버튼을 누르면 시피유 입장에서는 인풋신호가 되고요 친구가 저에게 전화를 한다면, 저의 휴대폰 엘시디 화면에 친구가 전화했다는 표시를 보여 줄 때 시피유 입장에서는 아웃풋 신호라고 보시면 되요.
그런데 여기서 시피유는 어느 키패드가 눌러졌는지를 어떻게 알까요? 그건 말이죠. 시피유와 키패드 사이에 특별한 라인 하나가 연결되어 있어서 그렇답니다. 바로 인터럽트라는 녀석이죠.
시피유와 키패드 사이에 인터럽트라는 라인이 연결되어 있어요. 그래서 키패드를 누를 때 마다 시피유는 키패드 인터럽트 신호가 계속 발생하게 되고 개발자는 그 신호를 어떻게 처리 할지를 프로그램으로 만든답니다.
일반적인 임베디드 시스템 대부분은 인터럽트 방식으로 동작하게 프로그램 한답니다. 인트럽트 라인은 키패드에만 있는 것이 아니라 엘시디, 카메라, 각종 센서들 모두가 시피유의 인터럽트 컨트롤러에 연결되어 있어요. 그래서 사용자가 키패드를 누르거나 카메라 센서가 동작하거나 전화가 오거나 기타 등등의 일들이 일어 날 때마다 인터럽트 신호가 시피유에게 인풋신호를 넣어 주어 동작하게 한답니다.

MCU를 만드는 회사는 어떤 패리퍼럴 컨트롤러를 넣어서 만들지 결정한답니다. 그럼 엘시디, 카메라, 각종 센서들을 전문적으로 만드는 회사도 있겠죠. 가령 에스디(SD) 메모리를 만드는 A, B, C 회사가 있다면 MCU를 만드는 회사는 3사에서 만든 에스디 메모리가 모두 호환될 수 있도록 만들어 줘야 MCU를 많이 팔 수가 있겠죠. 그럼 MCU는 어느 회사의 에스디 메모리인지 어떻게 알 수 있을까요? 개발자들은 눈으로 어느 회사의 에디스인지 확인 할 수 있지만 MCU는 눈도 없는데?? ㅋㅋ
하드웨어 개발자는 시피유와 각종 패리퍼럴 장치들을 연결시켜 조립해 준다면, 펌웨어 개발자는 해당 패리퍼럴 컨트롤러 레지스터에 어떤 제조회사의 것인지 알려 주도록 프로그램 한답니다. 이런 과정을 컨트롤러 레지스터 설정이라고 하고요 포팅 단계에서 가장 기본적으로 해야 될 일 이랍니다. 만약 해당되는 컨트롤러 레지스터 설정이 잘 못되면 그 패리퍼럴은 정상 동작하지 않거나 전혀 동작하지 않게 된답니다.

그럼 앞서 이야기한 시피유에는 뭐가 들어가 있을까요?
시피유에는 코어(Core), 코프로세서(Coprocessor), 엠엠유(MMU), 캐시(Cache) 등으로 구성되어 있어요.
코어 종류를 따져 보자면 암(ARM), 밉스(MIPS), 파워피시(PowerPC), 씨166(C166), 아크(ARC) 등등이 있지요. 코어마다 레지스터 개수도 다르며 하나의 레지스터가 처리할 수 있는 비트수도 다르답니다. 암코어 시리즈는 암1~11, 코어텍스에이(CorTEX_A), 코어텍스알(CorTEX_R), 코어텍스엠(CorTEX_M) 있으며, 밉스에는 밉스32와 밉스64가 있어요.
각 코어마다 처리 속도가 다른데 가령 암의 경우에는 암9: 200MHZ, 암11: 400MHZ, 코어텍스에이A: 600MHZ 기본 동작 되는데 코어텍스에이에잇(CorTEXA8) 같은 경우에는 최대 1GB이상 동작한답니다. 이러한 코어들은 거의 대부분 앞서 이야기한 것과 같이 메모리에 있는 코드를 읽어오고, 읽어온 코드는 기계어로 번역을 한 후, 실행을 한다고 했어요. 어떤 코어든 기본적으로 해야 되는 단계랍니다. 코어에 대해서는 설명할 내용이 많기 때문에 앞으로 계속 살펴보아요. 최근에 나온 제품 중에 하드웨어 사양을 살펴보다 보면 시피유 이름들이 보이곤 하는데요, 어떤 코어가 들어 있는지 확인해 보셔도 재미 있을 것 같네요.
엠엠유(MMU)는 여러 가지 일을 하는데 그 중에서 가장 중요한 일은 가상주소와 특정 주소 접근 권한을 만들어 주는 역할을 한답니다. 가상주소는 코어가 32비트라면 최대 4GB까지 표현할 수 있는 주소를 만들어 주죠. 왜 4GB이냐면요... 32비트를 이진수로 표현하면 다음과 같아요.

특정 주소 접근 권한은 개발자가 원하는 데로 특정영역은 읽기 전용, 읽고 쓰기용처럼 구성할 수가 있답니다. 엠엠유와 기타 내용들은 계속해서 살펴보기로 하죠.

Linked at 친절한 임베디드 시스템 개발자.. at 2010/03/02 21:58

... bsp; 109 나의 인(人)라인은? 2장 임베디드 시스템 Hardware 구성 요소 200 시피유(CPU)가 하는 일이 뭐죠 201 캐시메모리(Cache Memory)가 뭐죠? & ... more

Commented by JUDE at 2010/03/06 23:03
복잡한 것 같은... 하지만 상세한 설명 감사합니다.
핸드폰 개발자를 꿈꾸며 열심히 읽고 있습니다.
궁금한 사항이 있으면 질문하겠습니다.
고맙습니다.
Commented by soto at 2010/03/07 07:52
네. 자주 놀러오시고 언제든지 질문 주세엽..^^;
Commented by 혀니 at 2010/03/06 23:21
역시 시피유는 속도가 문제인 것 같아요.
프로그램이 무거워도 속도가 받쳐주면 괜찮지만
반대가 되면 문제죠.
뭐든 빠른게 대접받는 더러운 세상 ㅋㅋㅋ
Commented by soto at 2010/03/07 07:54
빠르고 1등인게 최고죠. ^^;
Commented by 락이즈 at 2010/03/07 23:11
좋은 글 감사합니다...제가 이 블로그를 발견하게 된것에 대해서 항상 감사하게 생각하고 있습니다. ^^

궁금한게...신입 면접 볼때 기본적인걸 물어본다면 이 정도 수준 일까요?
Commented by soto at 2010/03/08 10:22
좋은 글 감사합니다. ^^
꼭 그렇다고 얘기하긴 확실히 알아 둘 필요가 있죠.
Commented by wndi at 2010/03/08 12:56
시피유를 잘 다룰 수 있어야 할 것 같네요.
열공 밖에 수가 없겠죠?
수고하세요.
Commented by soto at 2010/03/10 22:39
네...
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.
친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





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