개발자가 적어본 마이콤/마이크로프로세서 이야기

들어가는 말

 

마이콤(microcontroller)을 처음 접하는 분들에게 도움이 되었으면 하고  마이콤에 대해 토픽별로 적어 보았습니다. 현장에서 마이콤을 사용해 보셔서 이미 마이콤에 대해 잘 알고 계시는 분들에게는 그리 도움이 안될 것 같습니다. 그리고 이야기를 추가해 나가다 보니 마이크로프로세서 영역까지 확장하게 되었습니다.

 

목차

 

( 괄호안의 "uC"는 microcontroller, "uP"는 microprocessor, "Adv"는 advanced topic의 줄임말입니다. )

Q.01 [uC] 마이콤과 마이크로 프로세서는 어떤 차이점이 있나요?   

Q.02 [uC] 마이콤 주변회로

Q.03 [uC] 인터럽트(interrupt)와 폴링(polling)에 관하여

Q.04 [uC] 타이머(timer)에 관하여

Q.05 [uC] UART에 관하여

Q.06 [uC] USB에 관하여

Q.07 [uC] 8051 VHDL code에 관하여

Q.08 [uC] 임베디드 시스템(Embedded System)에 관하여

Q.09 [uC] 리얼타임 시스템(Real time System)에 관하여

Q.10 [uC] 리셋 벡터 (Reset Vector)에 관하여

Q.11 [uP] 레지스터 파일 (Register File)에 관하여

Q.12 [uP] DMA(Direct Memory Access)에 관하여

Q.13 [uP] 파이프라인(Pipeline)과 캐쉬 메모리에 관하여

Q.14 [uP] 슈퍼스칼러(superscalar) 프로세서 관하여

Q.15 [Adv] One Billion Transitor Chip

Q.16 [uP] Big Endian and Little Endian

Q.17 [Adv] Computation in time and computation in space

Q.18 [uP] 트랩(trap)과 인터럽트(interrupt)

Q.19 [Adv] VLIW(Very Long Instruction Word) 프로세서

Q.20 [Adv] 벡터 프로세서 (Vector Processor)에 관하여

Q.21 [uP] 싸이클 스틸링(Cycle Stealing)에 관하여  

Q.22 [Adv] Supercomputer  

Q.23 [uP] Synchronous logic 과 Asynchronous ARM

Q.24 [uP] Harvard architecture 와 Princeton architecture

Q.25 [uP] Soft Microprocessor (new)

 

Q.01 [uC] 마이콤과 마이크로 프로세서는 어떤 차이점이 있나요?

  

마이콤은 마이크로콘트롤러(microcontroller)를 줄여서 부르는 말입니다. 마이콤은 소형의 범용 컴퓨터(general purpose computer)라고 할 수 있습니다. 물론 책상위의 PC 보다는 성능과 기능이 월등히 떨어집니다. 마이크로프로세서와 마이콤과의 가장 큰 차이점은 마이크로프로세는 주변 장치(메모리, I/O 등등)와 함께 하나의 시스템(컴퓨터)을 구성하도록끔 설계되었으나, 마이콤은 앞서 언급한 것처럼 그 자체가 (또는 간단한 주변장치만으로) 하나의 컴퓨터로서 동작할 수 있도록 설계되었습니다. 그렇다고 해서 마이콤에게 책상위 PC의 성능/기능을 기대해서는 안됩니다. 마이콤에 직접 마우스나 LCD 모니터를 연결할 수 있는가 하면 그렇지는 않습니다. 마이콤 안에는 프로그램가능한 ROM(요즘은 대부분 플레쉬 메모리)이 있어서, 마이콤 칩과 간단한 주변회로만으로 특정 기능을 발휘할 수 있습니다. 마이콤은 우리 주변에서 흔하게 찾아 볼 수 있는데, 냉장고, 세탁기, TV, VCR, 마이크로웨이브 오븐 등등에 하나씩 들어 있습니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

Q.02 [uC] 마이콤 주변회로

  

8비트 마이콤은 연산을 처리하는 ALU와 메모리 인터페이스부 그리고 주변회로로 이루어져 있습니다. 주변회로에는 인터럽트, 타이머, UART등이 있습니다. 이 것들에 대해서는 아래에서 좀 더 자세히 설명할 것입니다.  32비트 마이콤의 주변기기도 8bit와 크게 다르지 않습니다.  위에서 언급한 것 이외에  마이콤이 사용되는 특정 용도에 맞게끔, 주변기기가 들어 가 있습니다. 삼성에서 만드는 ARM7 또는 ARM9계열의 마이콤들을 보시면, 특정 용도에 맞게끔 주변기기가 들어가 있음을 확인해 보실수 있습니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

Q.03 [uC] 인터럽트(interrupt)와 폴링(polling)에 관하여

  

예를 들어 설명해 보겠습니다. 만약 친구가 보낸 편지를 기다리고 있다고 하였을 때, 상대방이 그것을 나에게 보통우편으로 보냈다면, 나는 그 편지가 왔는지를 확인해 보기 위해서, 지속적으로 우편함을 체크해 보아야 합니다. 이 것을 폴링(polling) 방식이라 합니다. 반면 등기로 보낸 경우는 우편배달부가 현관의 초인종을 눌려 나에게 편지가 직접 전달해 줍니다. 이것이 인터럽트 방식에 해당합니다. 등기 우편의 좋은점은 무엇일까요? 편지가 도착하면, 우편배달부가 나에게 직접 전달해주므로, 나는 내일에 전념할 수 있습니다. 반면 보통우편의 경우는 편지가 왔는지 하던 일을 멈추고 우편함을 수시로 체크 해봐야 합니다.

이 비유는 마이콤의 경우에도 그대로 적용됩니다. 마이콤의 핀 중 몇 개는 인터럽트 핀으로 할당되어 있습니다. 여기에 신호(low 또는 high가 될 수 도 있고 low에서 high로 변하는 transition이 될 수도 있습니다.)가 가해지면, 프로그램이 미리 지정된 번지로 점프하게 됩니다. (이렇게 미리 지정된 번지를 인터럽트 벡타라고 합니다. 여담입니다만 왜 스칼라가 아니고 벡타라 부르는지, 분명 벡타보다는 스칼라라고 부르는 것이 더 타당할텐데라고 생각되실수 있습니다. vector를 사전에서 찾아 보면, n.[항공] 방향, 진로(방위) vt. (비행기, 미사일 따위를 )전파로 유도하다 등의 뜻이 더 있습니다. ) 이 곳에 인터럽트가 발생하면 어떤 일을 할 것인가를 프로그램으로 기술해 줍니다.

참고로 외부에서 마이콤의 인터럽트 핀으로 들어오는 인터럽트를 외부 인터럽트라고 부릅니다. 외부 인터럽트가 있다면, 내부 인터럽트도 있는데, 마이콤 내부에 있는 타이머에 의한 인터럽트가 내부인터럽트의 한 예에 해당합니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 02/22/2005, r/t/e/l/d)

Q.04 [uC] 타이머(timer)에 관하여

  

 혹시 집이나 직장에서 타이머를 사용하시는 분이 계시나요? 타이머는 우리가 흔히 알고 있는 스톱워치(100미터 달리기를 할 때 시간을 측정하는)와 비슷한 기능을 가지고 있으나 차이가 있읍니다. 스톱워치는 시간이 얼마나 걸렸는지를 측정하지만, 타이머는 지금부터 지정한 것만큼의 시간이 경과하면 소리를 내어 알려주게끔 되어있습니다. 예를 들어 이런 경우를 생각해 볼 수 있습니다. 마이콤이 1/100초에 한번씩 키패드(Key pad)를 스캔해야 한다고 합시다. 마이콤은 키가 언제 눌려질지 알 수 없으므로 항상 키패드를 일정 시간 간격으로 스캔해야 합니다. 그리고, 입력된 키값에 따라 정해진 작업을 해야 합니다. 이 경우 마이콤이 1/100초 간격으로 키패드를 스캔하기 위해 다음과 같은 코드를 사용한다면 어떻게 될까요?

 

                                while(1){

                                     for(i=0; i< 1000; i++) ;      // 1/100초간 기다린다.

                                     KeyScan();                    // keypad scan한다.

                                     if(something_pressed)  // 눌려진 키가 있으면

                                               do_something();  // 해당되는 일을 한다.

                             }

여기서 for 루프안의 1000은 1/100초의 시간 간격을 맞추기 위한 반복횟수라고 합시다.(마이콤 동작 주파수와 명령어당 몇사이클이 필요한가에 따라 이 값은 달라집니다.) 이 경우 마이콤은 1/100초가 경과하기를 손가락을 세면서 기다리는 형태입니다. 그리고 입력된 키값을 가지고 정해진 일을 하는 동안에는 1/100초가 지났는지를 체크하지 못하는 문제점이 있습니다.

사람의 경우를 예를 들어서 설명해 보겠습니다. 책상에 앉아서 영어공부를 하고 있는데, 커피가 마시고 싶어서, 주전자에 물을 넣어 가스레인지에 얹어놓고, 다시 책상에 앉았습니다. 경험상 물은 약 3분이 지나면 끊는다는 것을 알고 있습니다. 이 3분간 시계를 보면서 3분이 지나기를 기다린다면, 위의 코드와 같은 형태가 됩니다.  만약 타이머가 있다면, 3분후 알람이 울리게 세팅을 한 뒤 계속 영어 공부를 할 수 있을 것입니다. 만약 커피물을 끊이는 것이 아니라 사골국을 끓인다면  타이머 없이는 장장 몇시간 동안을 아무일 도 하지 못하며 시계를 보면서 기다려야 할 것입니다.

사실 이 예에서는 타이머의 개념(idea) 뿐 아니라 인터럽트의 개념(idea)도 들어갑니다. 커피물이 정확히 언제 끓을 지를 모를 때, 수시로 물이 끓는지를 확인해 보는 것이 폴링(polling) 방식이고, 물이 끓으면, 나에 알려주는 방법(여기서는 물 끓는 소리에의해)이 인터럽트에 해당합니다.

타이머가 없으면, 프로세서는 시간이 얼마나 흘렀는지를 알기 위해 자기가 몇 개의 명령어를 수행했는지를 카운트해야하는데, 이 일이 프로세서에게는 상당히 비효율적입니다.(이 일을 한다고 더 중요한 일을 전혀 못합니다.) 이것을 없애기 위해 외부에서 시간을 알려주는 타이머가 필요한 것입니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

 Q.05 [uC] UART에 관하여

  

 UART(Universal Asynchronous Receiver / Transmitter)는 PC의 시리얼 포트(보통  COM1, COM2 등으로 알려진)와 통신하기 위한 주변장치입니다. PC와 마이콤간의 데이터 교환을 위해 사용됩니다. 실제로 PC와 인터페이스를 위해서는 MAX232라는 칩이 필요한데 이 칩의 주된 용도는 전압 레벨을 변환해 주는 것입니다. RS-232C 시리얼 포트에서는 '1' 은 -3 ~ -25볼트, '0' 는 +3 ~ +25볼트로 변환되어 전송됩니다. 위에서 말한 MAX232가 하는 역할이 전압 레벨을 변환해 주는 것입니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 01/08/2008, r/t/e/l/d )

 Q.06 [uC] USB에 관하여

 

USB(Universal Serial BUS)는 최근(2004년) 가장 성공적인 PC와 주변 기기의 인터페이스로 자리잡았습니다. USB는 4개의 선을 사용하는데 그 중 2개가 전원선이고, 나머지 두 개가 데이터를 위한 신호선입니다. 신호선은 차동(differential)방식이라하여, 서로 극성이 다른 신호를 보내게 됩니다. USB 이름이 말해주듯이 데이터를 시리얼 형태로 보냅니다. 즉 RS-232 케이블과 같이 데이터를 한 비트씩 보냅니다. 전송속도는 USB1.1 이 12 Mbps이고, USB2.0 이 480 Mbps입니다. RS-232과는 비교할 수 없을 정도로 빠른 속도입니다. MP3 플레이어 거의 대부분이 PC와의 인터페이스를 위해 USB를 사용하고 있는데, 그 주된 이유가 데이터 전송 속도 때문입니다. 만약 RS-232를 사용하였다면 음악 한 곡을 다운받는데 상당한 인내심이 필요할 것입니다. 8 bit 마이콤 중에서 USB를 내장한 것을 찾아보기 드뭅니다.(없다는 것은 아닙니다, 2004년 기준)  32 bit 계열에서는 그리 어렵지 않게 USB를 내장한 마이콤을 찾아 볼 수 있습니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 06/02/2006, r/t/e/l/d )

Q.07 [uC] 8051 VHDL code에 관하여

 

여기의 내용은 마이콤을 처음 접해보는 분들을 위한 것은 아닙니다. VHDL(VHSIC Hardware Description Language (VHSIC은 Very High Speed Integrated Circuit))은 하드웨어를 기술하기 위한 언어입니다. 알테라나 자이링스 툴을 사용해 보신 분들은 아마 VHDL을 접해 보셨을 것으로 생각됩니다. 이전의 로직 디자인이 Gate나 라이브러리를 이용한 것이었다면, 요즘은 언어(language)로 설계를 하는 것이 일반적인 추세입니다. 8051의 VHDL 소스가 존재하는가 하는 생각을 해 보신 분들이 계실텐데, 존재합니다. (그것도 여러개가) 그리고 적절한 신세시스(systhesis)툴을 이용하여, VHDL로 기술된 것을 게이트레벨로 옮길 수 있고, FPGA로 구울 수 있습니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.08 [uC] 임베디드 시스템(Embedded System)에 관하여 

 

알고나면 쉬우나, 알기까지는 어려운 용어가 임베디드 시스템(embedded system)입니다. 임베드(embed)의 사전적 의미는 "끼어넣다"라는 입니다. 여기에 수동의 형태인 과거분사형을 사용해, 임베디드, 즉 "끼어넣어진" 의 뜻이 됩니다. 무엇을 어디에 넣었다는 얘긴가 하면, 시스템에 컴퓨터(또는 마이콤)을 넣었다는 의미입니다. 겉으로 봐서는 그 안에 컴퓨터가 들어가있는지 모르는데, 실제로 뚜껑을 열어 내부를 확인해 보면, 컴퓨터가 있는 시스템이 임베디드 시스템입니다. 겉으로 봐서는 그 안에 컴퓨터가 들어가있는지 모르는 가장 큰 이유 중의 하나는 아마도 키보드와 마우스가 없기 때문일 것입니다. 키보드 대신 터치스크린이나, 키패드를 , 모니터 대신 작은 LCD를 사용하는 경우가 많습니다. 은행의 현금자동인출기, 병원의 무인 처방전 발급기 등이 임베디드 시스템에 해당되고, PDA, MP3 플레이어, 마이크로웨이브 오븐, 세탁기 등도 임베디드 시스템의 범주에 넣을 수 있습니다. 실제로 어느 병원에서 무인처방전 발급기를 수리하기 위해 케이스를 열어둔 무인처방전 발급기 내부를 들여볼 기회가 있었는데, 무인처방전 발급기는 LCD 모니터를 갖는 PC에 무인처방기 케이스를 씌운 형태였습니다.

최근에는 데스크탑(desktop) PC와 대조를 이루는 포스트 PC(post PC)를 임베디드 시스템이란 말과 같은 의미로 쓰는 경우도 있습니다.

  (처음 글 올린 날 : 4월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.09 [uC] 리얼타임 시스템(Real time System)에 관하여 

 

 

 

 

리얼타임 시스템 역시 엄밀하게 정의하고자 한다면 상당히 까다로울 수 있습니다. 만약 학교에서 리얼타임시스템을 전공하시는 분이 이 글을 본다면, 여기의 설명이 정확하지 않다라고 지적할 수도 있겠습니다만은 여기서는 일반인이 알기 쉽게 설명하고자 합니다. 지금 사용하고 계신 PC의 키보드를 누르면, 거기에 해당하는 글자가 사람이 느끼기에 즉시 화면에 나타납니다. 이런식으로 입력이 가해지면, 정해진 시간내에 반응을 나타내는 시스템을 리얼타임 시스템이라고 합니다. 리얼타임 시스템을 하드 리얼타임( hard real time) 과 소프트 리얼 타임(soft real time) 시스템으로 구분할 수 있는데, 소프트 리얼타임 시스템은 반응 속도가 정해진 기준치를 넘어서도 그냥 불편함이 증가하는 정도의 시스템이고(느려 터진 PC가 여기에 해당합니다.), 하드 리얼타임 시스템은 반응속도가 주어진 기준치를 넘어서면, 심각하거나 치명적인 일이 일어나는 시스템을 말합니다. 하드 리얼타임 시스템의 예로서 많이 인용되는 것이 제트 엔진의 제어 시스템으로, 주어진 시간내에 시스템이 응답하지 않으면, 심각한 사고를 불러올 수 있다고 합니다.

(처음 글 올린 날 : 4월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.10 [uC] 리셋 벡터 (Reset Vector)에 관하여 

 

리셋 벡타는 마이콤에 리셋이 인가 되었을 때 마이콤이 처음으로 실행하는 어드레스를 말합니다. 마이콤에 전원이 인가되었을 때 마이콤이 어떻게 동작하는지가 궁금한 분들에게 리셋벡터를 공부하는 것이 도움이 될 것입니다. 앞서도 설명한 적이 있는데, 리셋 벡터의 '벡터'라는 단어가 리셋 벡터를 이해하기 힘들게 만드는 것 같습니다. 물리 시간에 배운 바로는 벡타는 크기와 방향을 가지는데, 리셋 벡터는 크기와 방향이 어떻게 될까라고 생각하시는 분이 계실지도 모르겠습니다. 다른 한편으로는 "리셋 벡타"가 아니라 "리셋 스칼라"라고 부르는 것이 더 정확한 표현이 아닌가 라고 생각하시는 용기 있는 분들도 계실지 모릅니다. vector를 사전에서 찾아 보면, n.[항공] 방향, 진로(방위) vt. (비행기, 미사일 따위를 )전파로 유도하다 등의 뜻이 더 있습니다. 리셋 벡타의 벡타는 물리 시간에 배운 크기와 방향을 같는 의미의 벡타가 아니라는 얘기입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 01/08/2008, r/t/e/l/d )

Q.11 [uP] 레지스터 파일 (Register File)에 관하여 

 

레지스터(Register)가 무엇인지 알고 파일(File)이 무엇인지도 알겠는데, 두 단어를 결합하니까 정확히 무엇을 말하는지 모르겠다고 생각하시는 분이 계실 것으로 생각됩니다.

그냥 레지스터가 여러 개 모여있는 것을 레지스타 파일이라고 부른다고 생각하시면 됩니다. 비영어권 사람이 겪는 어려움의 한가지 예입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.12 [uP] DMA (Direct Memory Access)에 관하여 

 

프로그램을 해보신 분은 쉽게 이해할 수 있으나, 교과서만 가지고 배우신 분은 이해하기 어렵다고 느낄 수 있는 것이 DMA입니다. 주변기기에서 메모리로 데이터를 옮길 때는 CPU가 주변기기에서 데이터를 CPU로 가져온 다음에 메모리에 써야 합니다. 즉 주변기기에서 데이터를 읽어온 뒤 메모리로 보내는 작업을 하나하나 CPU가 해야 합니다.  즉 이렇게 데이터를 옮기는 동안에는 CPU가 다른 작업을 할 수 없습니다. DMA는 별도의 하드웨어에 이 작업을 맡기는 것입니다. 그러면, CPU는 그 시간 동안에 다른 작업을 할 수 있습니다. 회사의 경우를 예를 들자면, 상사가 부하직원에게 단순한 작업을 지시하는 것과 같습니다.  

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.13 [uP] 파이프라인과 캐쉬메모리에 관하여

 

90년대 중반 이후에 컴퓨터 아키텍쳐를 배우신 분들은 파이프라인과 캐쉬메모리에 대해 잘 아실 것입니다. 사실 글쓴이는 80년대 중반에 컴퓨터 아키텍쳐을 배웠으며, 그 당시에는 이러한 용어를 배운 기억이 없습니다. 혹시나 하여 교재(text book)의 색인을 찾아 봐도 파이프라인과 캐쉬메모리는 색인에 나오지 않습니다. 파이프라인과 캐쉬 메모리는 1990년대와 그 이 후에 출간된 컴퓨터 아키텍쳐 교과서의 많은 부분을 차지하는 내용으로, 여기서는 파이프라인과 캐쉬 메모리를 모르시는 분들을 위해 간단히 설명하고자 합니다.  파이프 라인은 공장의 조립라인과 같은 개념입니다. 예를 들어 자동차 조립 라인을 보면, 조립라인의 시작 부분에서 자동차 조립이 시작되어 조립라인의 끝에서 완성된 자동차가 나옵니다. 일단 조립라인이 자동차로 채워지면 짧은 시간내에 자동차가 한 대씩 조립되어 나오게 됩니다. (물론 조립 라인에 많은 작업자들이 있어서, 각 단계의 작업을 하기 때문에 한 사람이 자동차를 처음부터 끝까지 조립하는 것 보다 시간이 적게 걸리는 것이지요.) 마이크로 프로세서의 파이프 라인도 마찬가지입니다. 명령어 들이 파이프라인 안으로 들어가면서 각 파이프라인 스테이지(stage)에서 부분적으로 실행되게 됩니다. 파이프라인을 사용하는 주된 이유는 마이크로 프로세서의 처리 속도(클럭)을 높일 수 있다는 것입니다. 일단 파이프라인이 채워지게 되면, 파이프라인을 사용하지 않을 경우보다 빠르게 명령어 들이 처리됩니다.

캐쉬 메모리는 마이크로 프로세서와 메인 메모리 간의 속도차이를 극복하기 위해 사용하는 메모리입니다. PC에 사용되는 프로세서가 3GHz가 넘는 반면, 메모리 속도는 그 보다 훨씬 못합니다. 즉 프로세서는 빠른데 메모리가 느려, 프로세서가 제 성능을 발휘하지 못하는 일이 실제로 일어나는데, 여기에 대한 해결책이 용량은 작지면 속도가 빠른 메모리를 프로세서와  메인 메모리 사이에 두는 것입니다. 캐쉬 메모리의 용량은 크면 클수록 좋겠지만, 용량이 클수록 비싸고 속도도 늦여지므로, 작은 용량의 것을 사용합니다. (메인 메모리 보다 용량이 작다는 의미입니다. ) 그런면, 어떤 원리로 캐쉬메모리가 메인 메모리의 느린 속도를 커버할 수 있는 것일까요? 여기에는 로칼리티(locality)라는 경험적 법칙이 이용됩니다. 로칼리티(locality)란 자주 사용하는 명령어들이 서로 가깝게 존재하더라하는 것입니다. 예를 들어 점프 명령이 없는 경우, 명령어는 순서적으로 실행합니다. 즉 다음에 실행할 명령어가 바로 다음 어드레스에 있습니다. 작은 루프의 경우에도 루프를 구성하는 명령어들이 인접한 어드레스에 모여 있습니다.  이러한 로칼리티(locality)를 근거로하여, 프로세서는 제일 먼저 필요한 데이터 또는 다음에 실행할 명령어가 캐쉬 메모리에 있는지를 체크합니다. 있으면, 캐쉬메모리의 것을 사용하고, 없으면 데이터를 메인메모리에서 캐쉬메모리로 가져오게 되는데, 이 때 당장 사용할 것만 딸랑 가져오는 것이 아니라, 긴 안목으로 지금 당장 사용할 것보다 많은 용량을 가져 옵니다. (이 용량을 캐쉬 라인 사이즈(line size)라고 부릅니다.)

캐쉬 메모리의 원리를 사람에 비유하여 이렇게 설명할 수도 있습니다. 어떤 사람이 책상에 앉아서 기술 잡지의 연재 기사를 읽는 작업을 하는데, 기술 잡지는 다른 방에 있는 책장에 있습니다. 만약 현재 읽고 있는 잡지가 2004년 1월호라고 하면, 이 것을 다 읽은 다음 책장에 가서 잡지를 더 가지고 와야 하는데, 이 때 다음 호(2004년 2월호)만 딸랑 가지고 오는 것이 아니라, 2004년 2월호에서 2004년 7월호까지 6개월 분의 잡지를 가져와 책상 위에 두고 잡지의 연재 기사를 읽어 나가는 방식이 캐쉬 메모리의 동작과 유사하다고 할 수 있습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 01/08/2008, r/t/e/l/d )

Q.14 [uP] 슈퍼스칼라 (Super Scalar)프로세서에 관하여 

 

벡타(vector) 프로세서의 반대말이 스칼라(scalar) 프로세서입니다. 스칼라 프로세서는 한번에 하나의 명령어만 실행합니다. 그러면 슈퍼스칼라 프로세서는 스칼라 프로세서와 벡타 프로세서의 중간 정도에 해당한다고 볼 수 있는데 한 번에 여러 개의 명령어를 실행할 수 있습니다. 현재 고급사양의 마이크로프로세서는 대부분 슈퍼스칼라 프로세서입니다. 명령어를 실행할 수 있는 유닛(unit)이 하나 밖에 없는데 어떻게 한번에 여러 개의 명령어를 처리할 수 있을까 하는 의문이 생길 텐데, 슈퍼스칼라 프로세서에는 실행 유닛이 여러 개가 있습니다. 또 다른 의문점은 프로그램은 순서적으로 실행해야 하는데, 동시에 실행하면, 결과가 엉망이 되지 않는가 인데, 앞 명령어와 동시에 실행해도 문제가 생기지 않는 명령어들만이 동시에 실행 가능합니다. 여러 가지 자세한 내용은 컴퓨터 아키텍쳐(예:Hennessy & Peterson) 책을 참조하세요.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.15 [Adv] One Billion Transitor Chip

 

빌리온(billion)은 10의 9승입니다. 즉 10억에 해당합니다. 하나의 칩(die)에 담을 수 있는 트란지스터 갯수가 얼마나 될까요? 최근(2004년 하반기) 삼성전자가 1GB 플레쉬 메모리를 발표했으므로, 메모리 분야에서는 1 billion transistor를 넘어서는 칩이 이미  오래전부터 존재해 왔습니다.  그러나 로직 분야에서는 아직까지(2004년 9월) 1 billion 칩이 발표되지 않았습니다. 메모리는 기본에 되는 메모리 셀을 상하좌우로 배열함으로 더 큰 용량의 메모리를 쉽게 설계할 수 있으나, 로직의 경우에는 이렇게 반복되는 구조가 없어, 설계가 더 복잡하기 때문으로 생각됩니다.

1 billion transistor 칩은 얼마나 클까요?  80386DX CPU의 transistor 갯수가 275,000개 이고, 80486DX은  1,200,000 개 임을 감안하면, 1 billion(1,000,000,000) transistor 칩안에는 80386DX는 3,636개, 80486DX는 800개가 들어 갈 수 있읍니다.

펜티엄을 비롯한 고급기종의 마이크로프로세서에서는 transistor를 어떤 용도로 가장 많이 사용할까요? 아이러니하게도 캐쉬메모리를 구현하는데 가장 많은 transistor를 사용하고 있읍니다. 즉 계산을 하는데 사용하는 transistor 보다  느린 외부 메모리를 보완하기 위해 사용하는 transistor가 더 많습니다..

무어의 법칙을 등에 업고, 앞으로 세상에 나올 1 billion transistor을 사용한 마이크로프로세서는 어떤 구조일까요? 지금처럼 전체 transistor의 반 이상을 캐쉬메모리로 할당하는 구조일까요? 아니면, 여러개의 마이크로프로세서를 하나의 칩에 넣은 구조일까요? 아니면 또 다른 구조? 궁금해집니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.16 [uP] Big Endian and Little Endian

 

8 비트의 데이터를 바이트(byte)라고 하고, 여러 바이트의 그룹을 워드(word)라고 합니다. 여기서는 4 바이트를 하나의 워드라고 생각합니다. 메모리의 각각의 어드레스에 1바이트를 저장할 때, 워드를 저항하는 방법에는 2가지 방법을 생각해 볼 수 있습니다. 예를 들어 하나의 워드를 0번지에서부터 3번지까지에 저장한다고 하면, 워드의 최하위 바이트(Least significant byte)를 0번지에 넣을 수도 있고, 최상위 바이트(Most significant byte)를 0번지에 넣을 수도 있습니다.

워드의 최하위 바이트부터 메모리의 어드레스가 작은 쪽에 넣는 방식을 "리틀 엔디안" 이라고 하고, 그 반대의 방법을 "빅 엔디안" 이라고 합니다. 엔디안이라는 용어는 걸리버 여행기에서 계란의 뾰족한 쪽(little end)부터 먼저 깨야하는가 아니면 뭉뚝한 쪽(big end)에서부터 깨야하는가를 가지고 전쟁을 일으킨 정치가들의 이야기에서 나왔다고 합니다. 리틀 엔디안은 인텔 계열의 CPU에서 사용되며, 빅 엔디안은 SPARC나 IBM 메인프레임에서 사용된다고 합니다. ARM의 경우는 CPU에서 둘 중 하나를 선택하여 사용할 수 있도록 되어 있습니다.

빅 엔디안 / 리틀 엔디안 표기가 문제를 일으킬 수 있는 경우는,  서로 다른 엔디안을 사용하는 컴퓨터가 네트웍을 통해 자료를 교환할 때라고 합니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.17 [Adv] Computation in time and Computation in space

 

사실 위 제목은 글쓴이가 만든 말은 아닙니다. 어디서 봤는지 출처를 명확히 기억을 하지는 못하나, 그 내용은 이렇습니다.

         "지금까지의 CPU 구조는, 계산을 하기 위해 CPU에 있는 하나의 ALU를 수 많은 명령어들이 시간적으로 계속하여 반복 사용하는 구조로 되어 있는데(computation in time), 이것은 먼 옛날 하나의 칩상에 집적할 수 있는 트란지스터의 수가 제한적이 었을 때 나온 구조이나, 트란지스터가 남아도는 지금에도 같은 구조가 계속 사용되고 있다. 앞으로는 남아 도는 트란지스터를 이용하여 Computation in space라는 새로운 파라다임으로 나아가야 한다."

CPU가 앞으로 어떤 구조로 변할지는 지켜봐야 되겠지요. 과연 이러한 아이디어가 메인 스트림으로 자리잡을 수 있을지는 시간이 더 지나봐야 알 수 있을 것 같습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 01/08/2008, r/t/e/l/d )

Q.18 [uP] 트랩(trap)과 인터럽트(interrupt)

 

프로그램 실행 중  overflow나 underflow 같은 특이한 (어떤 조치를 취해야 할) 사항이 발생한 경우 프로그램은 지정한 특정번지로 점프하여 그곳의 명령을 실행하게 되는데,  이렇게 프로그램이 자동적으로 특정 번지로 점프하여 그곳의 명령을 실행하는 것을 트랩(trap)이라고 하며, 특정 번지의 있는 프로그램을 트랩 핸들러(trap handler)라고 합니다.  사실 overflow는 flag register의 특정 비트를 체크해 봄으로서, 각 명령어를 실행했을 때 overflow가 일어났는지 알 수 있읍니다. 그러나, 모든 산술 명령에 대해 플래그 레지스터를 체크해 보는 것은 비효율적입니다.

트랩과 인터럽트의 주된 차이점은 트랩은 어떤 프로그램을 실행시켰을때, 항상 고정된 위치에서 일어나나, (외부) 인터럽트는 언제 발생될지 모른다는 점입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.19 [Adv] VLIW(Very Long Instruction Word) 프로세서

 

트랜스메타(Transmeta)사의 크루소(Crusoe)칩이 VLIW(Very Long Instruction Word)구조를 갖는 것으로 알려져 있습니다. 128비트의 명령어 길이를 가지며, 여기에 32비트 명령어 4개(load/store 명령 하나, 분기 명령 하나, 연산 명령  2개)가 들어 갈 수 있읍니다. 이 명령어를 디코딩한 뒤 각각의 실행 유닛에서 실행하는 구조로 되어있읍니다.

한편 Mpact라는 Chromatic이라는 회사에서 만든 media processor 칩 역시 VLIW구조로 알려져 있읍니다. 이 칩은 발표될 당시(1990년대 말)에는 획기적인 칩이었으나, 상업적 성공을 거두지는 못했습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.20 [Adv] 벡터 프로세서 (Vector Processor)에 관하여

 

 벡터 프로세서는 과학 기술용 계산에서 많이 나타나는 벡터(Array)또는 매트릭스 형식의 데이타를 빠르게 연산할 수 있도록 고안된 구조를 갖고 있읍니다.  여러개의 데이타(예를 들면 32비트 데이터 64개)를 담아 둘 수 있는 벡터 레지스터에 계산하고자 하는 데이타를 담아 둔 후, 이 데이터를  파이프라인 구조를 갖는 연산기(ALU)를 통과시켜 결과를 얻습니다.

1974년에 발표된 Cray Research사의 Cray-1 슈퍼컴퓨터 및 그 후속 모델들이 벡타 프로세서라고 합니다. 그리고 2004년  11월에 발표된 top 500 슈퍼컴퓨터에서 3위에 랭크된 NEC사의 Earth Simulator가 벡터 프로세서로 알려져 있습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.21 [uP] 싸이클 스틸링(Cycle Stealing)에 관하여

 

싸이클 스틸링은 DMA와 관련되어 설명되는 용어입니다. 우선 버스에 연결된 여러개의 디바이스(CPU, 메모리, DMA 콘트롤라, I/O-1, I/O-2,등등)가 연결되어 있을때, 어느 한쪽(예를 들어 CPU)이 버스를 사용하면 다른 한쪽(예를 들어 DMA 콘트롤라)은 버스를 사용하지 못합니다.( 예를 들어 전화가 1대 밖에 없는 사무실에서 한 사람이 전화를 사용하면, 다른 사람이 전화를 사용하지 못하는 것과 같습니다. 즉 사용 가능한 리소스(resource)가 하나 밖에 없는 경우입니다.)

DMA는 I/O에서 메모리로 데이타를 옮기는 것이라고 설명하였읍니다. DMA가 실행된 후 I/O에서 메모리로 데이타를 쉬지 않고 옮긴다면, 이 경우에는 CPU가 버스를 쓰고 싶어도(메모리를 억세스 할 경우) 쓰지 못하는 경우가 발생합니다. DMA 콘트롤라가 좀 더 남을 배려하여 양보할 줄 안다면, CPU가 버스를 사용하지 않는 동안에만 DMA 를 실행하려 할 것입니다. 이것을 싸이클 스틸링 (cycle stealing) 이라고 합니다.  

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 06/01/2006, r/t/e/l/d )

Q.22 [Adv] Supercomputer

 

8 비트 마이컴에서 부터 이야기를 시작하여, 슈퍼컴퓨터까지 왔습니다. 한 시대에 있어 다른 컴퓨터 보다 월등한 성능을 가진 컴퓨터를 슈퍼컴퓨터라고 합니다.  책상 위(또는 바닥)에 놓인 PC도 30년 전(1974년)으로 가져 갈 수 만 있다면 슈퍼컴퓨터가 되었을 것입니다. (최초의 마이크로프로세서 4004가 나온것이 1971년입니다.)

최근 IBM의 BlueGene/L 이라는 슈퍼컴퓨터가 70 petaflops를 기록했다는 뉴스 기사가 있었습니다.(11/04/2004, eetimes) 아마 몇 십년 후에는 이 정도의 성능을 가진 PC를 책상위에 두고 사용하는 날이 오지 않을까 하는 생각을 해봅니다.

컴퓨터 매니아들은 슈퍼컴퓨터에 관한 얘기를 들을 때 CPU는 뭘 쓸까 하는 궁금해 하실 것으로 생각됩니다. 오늘(11/09/2004) 슈퍼컴퓨터에 관한 기사가 eetimes에 다시 나왔읍니다. 기사에 있는 링크를 방문하여, top 500 슈퍼컴퓨터에 관한 리포트를 보면, 500개 슈퍼컴 중 Pentium4 Xeon 를 사용한 것이 232개, Itanium2를 사용한 것이 84개, PowerPC를 사용한 것이 8개, AMD Athlon을 사용한 것이 하나입니다.  프로세서 타입으로는 벡타 프로세서가 21개, 스칼라 프로세서가 479개 이고,  나라별로는 우리나라가 top 500 슈퍼컴퓨터 중 11개를 보유하고 있읍니다. 보고서에는 더 자세한 분류가 나와 있으며, www.top500.org 에서 top 500 순위를 보실수 있습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.23 [Adv] Synchronous logic 과 Asynchronous ARM

 

Digital system을 구현하는 방법 중 현재(2005년) 주류(main stream)를 이루는 것이 synchronous logic 입니다. 즉 모든 시스템이 클럭을 중심으로 하여 동작되는 형태입니다. Asynchronous logic 은 주류에서 떨어져 있으며, 가급적이면 디지털 시스템을 설계 시 asynchronous한 방식을 사용하지 말 것을 당부한 글 들을 어렵지 않게 찾아 볼 수 있습니다.  

디지탈 시스템(칩)에서 전력을 가장 많이 소모하는 부분이 클럭 라인입니다. 다른 글에서 설명하였듯, CMOS 회로는 신호의 변화가 있을 경우에만 전력을 소모합니다. (leakage 전류에 의한 전력소비를 무시한 경우) 그런데, 클럭 라인은 매 주기 마다 하이에서 로우로 변화를 하니, 전력을 가장 많이 소모합니다. 마이크로 프로세서의 소비 전력의 상당 부분 (~50 % )을 클럭 라인에서 소모한다고 합니다.

Asynchronous logic 인 이러한 메인 클럭이 없습니다. asynchronous ARM(AMULET) 은 Steve Fuber의 ARM systesm-on-chip architecture라는 책의 제일 마지막 장에도 소개되어 있읍니다.

 

(처음 글 올린 날 : 06/02/2006, 마지막 수정 : 06/02/2006, r/t/e/l/d )

Q.24 [uP] Harvard architecture 와 Princeton architecture

 

8051 이나 AVR 마이콤 데이터 시트를 보면, 하버드 아키텍쳐라는 말이 나옵니다. 즉 두 마이콤 모두 프로그램 메모리와 데이터 메모리가 따로 따로 존재하며, 이들을 억세스하는 버스 역시 따로 따로 존재한다는 말입니다. 이 용어의 유래는 하버드 대학에서 개발한 Mark 1 컴퓨터에서 왔다고 합니다. 반면 프린스턴 아키텍쳐라는 용어도 가끔씩 등장하는데 이 것은 프로그램 메모리와 테이터 메모리가 하버드 아키텍쳐처럼 분리되지 아니한 컴퓨터를 말합니다. 이 것은 ISA 컴퓨터 라는 프린스턴 대학에서 개발한 컴퓨터에서 유래하였다고 합니다.

 

(처음 글 올린 날 : 06/11/2006, 마지막 수정 : 06/11/2006, r/t/e/l/d )

Q.25 [uP] Soft Microprocessor

 

FPGA 상에 구현된 마이크로프로세서(또는 마이크로 콘트롤러)를 소프트 마이크로프로세서( Soft Microprocessor)라고 합니다. FPGA는 configuration 과정을 통해 그 내용(기능)을 손쉽게 바꿀 수 있으므로, 왜 "소프트" 마이크로프로세서라 부르는지 짐작하실 수 있으실 것입니다. 자이링스, 알테라 모두 자사 FPGA에 구현된 소프트 마이크로프로세서와 개발 툴을 공급하고 있습니다. 글쓴이가 생각하는 소프트 마이크로프로세서의 장점은 단종 걱정이 없다는 것과 원하는 주변기기를 직접 만들어 넣을 수 있다는 것입니다. 단종에 대한 걱정은 개발자라면 한 번씩은 겪었을 만한 것으로, 개발이 끝나고 양산 준비를 하려고 하니, 사용했던 부품 중 하나가 단종이 되거나, 단종 예고가 되는 개발자에게는 드물지 않게 경험하는 현상입니다. 소프트 마이크로프로세서의 장점이 있으면, 단점도 있을텐데 단점은 FPGA가 가지고 있는 단점을 생각해 보시면 될 듯합니다.

 

(처음 글 올린 날 : 01/01/2007 , 마지막 수정 : 01/08/2007 , r/t/e/l/d )

(마지막으로 수정한 날자 : 01/08/2008)