본문 바로가기
공부하기/잡학다식

마이크로 프로세서의 구조와 설계

by 리치캣 2021. 8. 27.
728x90
반응형

*본 광고는 쿠팡의 판매수수료와 연계되어 있습니다.

마이크로 프로세서의 구조와 설계

 

밀레니엄 시대를 살아가는 사람이라면, 마이크로 프로세서 가 무엇인지 모르는 이는 아마도 없을 것이다. 마이크로 프로세서는 도구의 인간이라는 인간의 가장 기본적인 특질에 가장 어울리는 도구이다.

그 동안의 도구들은 인간의 육체노동을 줄이기 위한 것이었으나, 마이크로 프로세서는 인간에게 있어서 가장 중요한 것인 지적작업을 도와주는 도구이기 때문이다. 하루를 생활하면서, 이제 일반인들도 대단히 많은 시간을 마이크로 프로세서와 함께 하게 되었다. 컴퓨터뿐만 아니라, 마이크로 컨트롤로가 자동차, 휴대폰, 가전기기에서도 동작하고 있는 상황에서 사람이 하루 중 마이크로 프로세서와 2m이상 떨어지게 되는 시간이 거의 없다는 말이 있을 정도이다.

따라서, 마이크로 프로세서의 기본적인 구조는 이제, 비전공자들도 상식적인 수준에서 알아야 할 필요가 있다. 그러나, 컴퓨터마저 두려워하는 사람들이 아직도 비일비재한 상황에서, 마이크로 프로세서의 구조란 비전공자들에게 감히 다가갈 수 없는 대단히 어려운 주제로 느껴질 것이다.

하지만, 컴퓨터의 두뇌라 불리는 마이크로 프로세서는 알고 보면, '두뇌'라는 단어가 어울리지 않을 정도로, 기본적인 몇 가지 기능만을 수행하고 있을 뿐이다. 그러나 이 몇 가지 기능이 엄청난 속도로 반복하여 수행됨으로써 컴퓨터 사용자들에게는 대단히 인공지능으로 보여지는 것이다.

그럼 이 몇 가지 기능(이를 앞으로 명령어라고 한다)이 무엇이며, 이는 어떤 구조를 통해서 구현되는지(Architecture)를 살펴봄으로써 별 것 아닌 마이크로 프로세서를 이해하는데 도움이 되고자 한다.

다음의 글은 두 부류의 독자를 대상으로 하고 있다. 첫째는 전자업계 종사자들로서 마이크로 프로세서와 직. 간접적으로 연관되는 일을 하는 사람들에게 빠르게 참고 할 수 있는 기술 정보가 될 것이며, 둘째는 마이크로 프로세서에 관심이 있는 일반인들로서 마이크로 프로세서의 내부 구조에 쉽게 접근하도록 하고, 더 나아가 설계의 핵심적 사항도 소개하고자 한다.

마이크로 프로세서의 설계에는 크게 두 가지가 필요하다, 첫째는 마이크로 프로세서의 구조를 이해하는 것이고, 둘째는 이를 실제 Chip으로 제작하기 위한 VLSI회로 설계 능력을 갖추는 것이다. 이번 특집에서는 이 중에서 전자에 초점을 맞추어 설명하고자 한다.

VLSI회로 설계 기술은 이 분야 전공자들은 기초지식으로 알고 있을 것이며, 마이크로 프로세서를 설계할 일이 절대로 없을 비전공자들로서는 구조를 이해 하 는 것만으로 충분한 지식이 될 것이기 때문이다.

따라서 불가피하게 VLSI설계 기술에 대한 내용이 나올 경우 비전공자들은 이를 무시해도 상관은 없다.

마이크로 프로세서란?

 

마이크로 프로세서는 메모리로부터 데이터를 읽어서, 이를 처리한 후, 다시 메모리에 데이터를 저장한다. , 데이터는 메모리에 존재하며, 데이터를 저장한다. , 데이터는 메모리에 존재하며, 데이터의 변환은 마이크로 프로세서를 통해서 이루어지는 것이다. 마이크로 프로세서가 방대한 양의 프로그램을 처리하기 위해서는 메모리가 상당히 커야 한다. 그러나, 이 정도로 큰 메모리를 갖추려면, 엄청난 비용이 들기 때문에, 우라는 장치를 두어서, 작은 양의 메모리를 마치 큰 양인 것처럼 쓰도록 하고 있다.

, MMU로 인해 마이크로 프로세서는 실제의 메모리양보다 훨씬 큰 메모리 공간이 있는 듯이 착각하게 되는 것이다. 그러나, 이렇게 작은 메모리에서 데이터를 가져오는 데에도, 많은 지연시간이 걸리기 때문에, 마이크로 프로세서는 사용될 것으로 예상되는 데이터를 '캐쉬'라는 마이크로 프로세서 내의 메모리에 미리 가져다 놓고 사용한다. 캐쉬는 작고 빠르므로, 마이크로 프로세서가 바로 데이터를 가져올 수가 있다.

메모리는 크게 두 개의 영역으로 나뉘어진다. 하나는 명령어들을 순서대로 저장하고 있는 프로그램 메모리이며, 둘째는 실제로 연산에 사용될 인자들이 저장되어 있는 데이터 메모리이다.

마이크로 프로세서는 우선 프로그램 메모리부터 명령어를 읽는다. 이 단계를 Fetch단계하고 한다. 다음 읽은 명령어를 해석하여, 실행하는데 쓰이게 될 제어신호들을 생성한다. 이 단계를 Decode 단계하고 한다. 다음에는 각 실행유닛들이 제어신호를 바탕으로 동작하면서, 연산이 이루어진다. 이 단계를 Execution단계라고 한다. 다음은 실행된 결과를 메모리에 저장하는 Memory 단계가 있다. 마지막 단계는 실행결과를 레지스터 파일에 저장하여 계속적인 계산이 이루어지도록 하는 Write 단계이다.

이 다섯 단계를 구분하여 순서대로 이루어지도록 하는 것은 클럭 신호와 순차회로이다. 이 다섯 단계를 기본구조로 이번 장에서 설명하기로 한다.

각 단계는 공장에서의 조립라인과 같이 모든 단계가 쉬지 않고 동작하게 된다. 예를 들면 decode 단계는 계산결과를 execution 단계에 넘겨주면서, 자신은 fetch 단계로부터 새로운 명령어를 받아 이를 해석하게 된다. 이처럼 명령어의 수행시간이 아닌 한 단계의 수행시간마다 새로운 명령어가 fetch되도록 하는 기법을 pipelining이라고 하며, 현재의 모든 마이크로 프로세서는 pipelining을 사용하고 있다.

또한 최신의 마이크로 프로세서는 거의 대부분 슈퍼스칼라 방식으로 설계되어 있다. 슈퍼 스칼라 방식이란 동시에 두 개 이상의 명령어를 처리하는 것을 말한다. 즉 동시에 두 개 이상의 명령어를 Fetch하며, 이후 4단계도 동시에 진행된다. 따라서, 같은 실행유닛을 사용하는 명령어들은 동시에 실행될 수가 없다. 또한 실행 유닛을 사용하는 명령어들은 동시에 실행될 수가 없다. 또한 동시에 실행할 명령어들 사이에는 사로 인과관계가 없어야 한다.

이와 같은 사항들은 마이크로 프로세서가 할 일이 아니며 컴파일러가 고급언어로부터 어셈블리 언어를 작성할 때 지켜야 할 사항이다. 따라서, 요즈음에는 슈퍼스칼라 방식이 보편화됨에 따라 컴파일러의 중요성이 강조되고 있다.

마이크로 프로세서의 명령어에는 크게 3가지 부류가 있다. 첫째는 덧셈. 뺄셈. 곱셈. 나눗셈 등의 산술연산이며, 산술연산은 각각 정수와 실수 두 가지가 있다. 산술연산 중에는 삼각함수나 로그함수를 수행하는 명령어도 있다. 둘째는 메모리부터 데이터를 가져오고(Load), 또 저장(Store)하는 데이터 이동 명령어이다. 셋째는 현재의 명령어 위치에서 프로그램의 다른 명령어 위치로 이동하는 분기 명령어가 있다.

마이크로 프로세서는 필요한 데이터들을 메모리로부터 레지스터 파일이라는 곳으로 가져다 놓고 레지스터 파일에서 주로 데이터를 읽게 된다. 이렇게 하는 이유는 데이터를 메모리에서 가져오기 위해서는 load 명령어가 필요하지만, 레지스터 파일은 크기가 매우 작아 바로 꺼내어 쓸 수 있기 때문이다.

명령어 해석기

 

명령어 Fetch 단계에서 읽혀져, Decode 단계에서 명령어 해석기에 의해 형성된다. 앞으로 이 명령어 해석기가 어떤 역할을 하는지 살펴보도록 하자.

하드웨어 설계자는 마이크로 프로세서가 특정 기능을 수행하는데 필요한 모든 정보를 부호화하여 정해진 bit수의 명령어를 구성하는데, 이 정해진 bit수를 명령어 크기라고 한다. 마이크로 프로세서의 성능을 가장 직접적으로 나타내는 것이 바로 명령어 크기이다. 현재, PC에서는 32bit가 최고성능이며 서버용 마이크로 프로세서는 64bit이다.

설계자는 명령어의 크기를 효과적으로 분할하여 필요한 정보를 기입하게 되는데, 이때의 분할된 패턴을 명령어 format이라고 한다. 명령어는 그 목적에 따라서 다양한 format을 보이지만, 그림1은 가장 많이 쓰이는 명령어 format중의 하나를 보여 주고 있다.

그림 1에서 opcode는 이 명령어가 어떤 기능을 하는지가 부호화된 부분이고, src1scr2는 실행유닛의 입력으로 돌아가게 될 데이터의 위치를 나타내며, Dest는 수행결과를 저장할 위치를 나다 낸다. 명령어를 알아내며, 이에 따라 실행 유닛들은 무엇을 써야 할지, 해당 실행 유닛을 어떻게 동작시켜야 할지를 결정하게 될 제어신호를 발생시킨다. src1src2는 레지스터 파일로 보낸다. 레지스터 파일은 src1src2에 위치하는 데이터를 실행 유닛으로 보내 준다.

Opcode Src 1 Src 2 Dest.

 

<그림 1> 가장 일반적인 명령어의 포맷앞서 설명했듯이, 마이크로 프로세서는 piplining에 의해 명령어를 겹쳐서 처리하게 된다. 그림 2는 명령어가 겹쳐서 처리되는 모습을 보여 주고 있다. 그림 2에서 명령어 1E(xecution) 단계를 수행할 때, 명령어 2D(ecode) 단계를, 명령어 3(Fetch) 단계를 동시에 수행하고 있는 것이다.

그러나 그림 2와 같이 이상적으로 pipelining이 동작할 수 없는 경우가 있다. 이 같은 경우를 hazard라고 한다. 명령어 해석기의 주요한 기능 중의 하나는 hazard를 해결함으로써, pipelining의 진행을 원 활이 하는 것이다.

이제 대표적인 2가지 hazard와 명령어 해석기가 이를 어떻게 해결하는지를 살펴 보고로 하자.

hazard에 크게 3가지 부류가 있다. 가장 많은 경우는 Data hazard로서, 그림 2의 화살표가 바로 Data hazard의 대표적인 예이다. 명령어 1E단계가 끝나면 수행결과를 내지만. 이 결과는 W(rite)단계까지 끝나야 레지스터 파일에 저장되어, 명령어 2나 명령어 3이 이 계산결과를 쓸 수 있게 된다.

명령어 해석기는 화살표처럼 계산된 값을 필요한 지점으로 (W)rite 단계 이전에 보내 줌(bypass)으로써 이 Data hazard를 해결한다. bypass에 의한 해결이 불가능한 Data hazard의 경우에는, 아직 도착하지 못한 데이터를 위해 다음 단계들을 기다리게 함으로써(stall) 해결한다.

두 번째 부류는 control hazard로써 분기 명령어가 실행될 때 발생한다. Fetch된 명령어가 분기 명령어라는 것은 D(ecode) 단계에서 인식되며, 분기할 지의 여부와 분기할 위치도 D(ecode)단계에서 알게 된다. 이렇게 분기할 위치를 알았으면 화살표처럼 분기할 위치의 명령어를 F(etch)함으로써 분기가 이루어진다(그림 3)

명령어1 F D E M W
명령어2
F D E M W
명령어3 BYPASS F D E M W
명령어4
F D E M W

<그림2>Pipelining에 의한 명령어의 처리와 Data hazard의 해결

 

이 경우 명령어 해석기는 그림 3에서처럼 수행할 필요가 없는 명령어 1No operation으로 만듦으로써 hazard를 해결한다.

이처럼 명령어 해석기는 컨트롤 신호를 생성하고, pipeline에서 생길 수 있는 hazard를 해결함으로써 전체적으로 마이크로 프로세서의 움직임을 조정하는 역할을 한다.

분기 명령어의 처리방법

 

마이크로 프로세서가 처리하는 프로그램은 그 크기가 대단히 크며, 따라서 고도로 구조화되어 있다. 즉 프로그램은 여러 가지 하위의 기능들로 구성되는 식이다.

따라서 전체적으로 프로그램이 수행되기 위해서는 마이크로 프로세서는 이곳 저 곳으로 분기하면서 하위기능(루틴)들을 수행하여야 한다. 실제로 분기명령어는 마이크로 프로세서가 수행하는 명령어 중 약 20%를 차지할 정도로 자주 사용된다. 마이크로 프로세서의 개요에서 잠깐 언급했듯이 분기 명령어 시 hazard가 발생하여, control hazard 때문에 하나의 명령어가 취소되는 것을 보았다. 또한 슈퍼 스칼라 방식의 마이크로 프로세서라면 하나의 명령어가 아니라 두 개 이상의 명령어가 취소될 것이다. 이는 분기 명령어의 사용빈도수로 볼 때, 대단히 큰 낭비이기 때문에, 이 난지를 줄이기 위해서 Delayed Branch 방법과 BTB(Branch Target Buffer)에 의한 방법이 연구되었다.

Delayed Branch에서는 취소될 명령어의 위치에 분기 명령어의 영향을 받지 않는 명령어를 삽입시킨다. , 그림 2에서 명령어 1의 위치에 삽입시킨다. 이 삽입된 명령어는 분기 시에도 그대로 수행되므로, 낭비가 발생하지 않는다.

이 독립적인 명령어의 삽입은 소프트웨어적인 문제이므로, 컴파일러가 담당한다.

Branch Target Buffer(BTB)에 의한 방법은 보다 더 근본적인 해결책으로서 고안되었다. 원래 분기할 위치(Target address)는 현재의 위치를 기준으로, 명령어에서 제공하는 값을 더해서 얻어지므로 덧셈과정이 필요하다. 이 덧셈과정은 Decode단계에서 별도의 덧셈기에 의해 이루어진다. 따라서 정확한 Target AddressDecode단계가 끝나야만 알 수가 있으며, 이것이 바로 control hazard로 인한 낭비의 원인인 것이다.

 

분기명령어 F D E M W
명령어1
F 취소
분기할 지점 타겟 어드레스 F D E M W

<그림3>Control hazard와 해결

BTB에 의한 방법에서는 각 분기 명령어마다 그 Target Address의 예상치를 저장해 놓는 Branch Target Buffer를 둔다. 따라서 분기 명령어가 Fetch 되면 바로 BTB에 있는 예상 목적지로 분기하게 된다. 만일 분기 명령어가 BTB 목록에 들어있지 않은 것이었다면, 일반적인 방법에 의해 처리된다. 한편 BTB가 예상한 Target Address가 틀렸다면, 일반적 경우처럼 Decode 단계에서 올바른 주소를 알아내야 한다.

따라서 이 동안에 하나의 명령어가 취소되는데다가, BTB의 내용을 갱신하는 동안에 또 하나의 명령어가 취소되어 버리기 때문에 두 배의 낭비가 발생하게 된다. 그러나 BTB의 적중률은 대부분의 통계에서 90%이상을 기록하고 있으므로, 그 효용은 충분하다고 볼 수 있다.

ALU(Arithmetic Logic Unit)

 

Decode 단계에서 해석된 명령어는 실제로 Execution 단계에서 연산이 이루어진다. Decode 단계까지는 Execution 단계를 위한 준비 단계로 보면 될 것이다. 앞서 마이크로 프로세서가 수행하는 명령어를 산술연산. 데이터이동. 분기의 3가지로 분류한 바 있다. 이외에 디지털 로직의 기본 연산인 AND.OR.NOT.Exclusive-OR 등의 명령어는 구현이 매우 간단하기 때문에, 전체 면적에서 차지하는 비중은 매우 작다. 또한, 레지스터 안에서 데이터의 각 bit가 몇 bit씩 왼쪽 또는 오른쪽으로 이동하는 쉬프트 명령어가 있다. 이 밖에 명령어들은 사용빈도가 매우 낮으므로, 본지에서는 다루지 않도록 하겠다.

ALU(Arithmetic Logic Until)란 명령어 중에서 두드러지게 큰 면적이 소요되는 것들을(예를 들면, 곱셈기나 나눗셈기) 제외한 나머지 거의 모든 명령어들을 수행할 수 있도록 한 유닛이다. , 덧셈과 뺄셈. 로직연산. 쉬프트 연산, 기타 이것들에 부수적인 명령어들도 모두 수행할 수 있도록 되어 있다. 2의 보수 방법을 사용하면 덧셈기가 뺄셈도 수행할 수가 있다. , ALU 내에 뺄셈기는 따로 만들 필요가 없다.

그림 4ALU의 기능과 레지스터 파일과의 관계를 보여 주고 있다. 레지스터 파일은 Decode 단계에서 명령어 해석기가 참조하는 레지스터 값을 출력하여 ALU(또는 다른 실행유닛)로 보내 준다.

마이크로 프로세서의 성능은 클릭의 주기가 얼마나 짧느냐에 의해 가장 많이 좌우된다. 클릭의 주기가 짧을수록 성능이 높아지게 된다. 클릭의 주기는 각 실행유닛 중에서 수행시간이 가장 긴 것으로 결정되기 때문에, 마이크로 프로세서 설계시 가장 유의해야 할 점은 특정한 유닛의 수행시간의 너무 길어지지 않도록 다른 유닛들과 균형을 맞추는 것이다.

ALU는 다양한 기능을 하지만, 가장 많은 시간이 걸리는 회로는 덧셈기이다. 또한 덧셈기는 다른 곱셈기나 나눗셈기에도 내부 블록으로 사용되기 때문에, 빠른 덧셈기의 설계는 매우 중요하며, 이에 관해 대단히 많은 연구가 있어 왔다. 이러한 연구에 있어서 핵심은 덧셈 시 하위 비트의 덧셈 결과 중 상위 비트로 넘어가는 부분 즉, 캐리를 최대한 빨리 알아내는 것이다.

32bit 덧셈의 경우 최하위 비트에서부터 최상위 비트까지 캐리가 전달되어야 덧셈이 완료되기 때문에 상위 비트에서 좀더 빨리 캐리를 알아낸다면, 그만큼 덧셈시간을 단축할 수가 있게 된다. 가장 대표적인 방법으로는 CLA(Carry Look-ahead Adder)CSA(Carry Select Adder)가 있다. CIA는 특별한 로직을 써서, 캐리 생성부분만을 고속화하는 방법이다. CSA는 그림 5을 통해서 자세히 살펴보자.

그림 5에서 데이터는 세 부분으로 나뉘어져 계산된다. 계산은 세 부분에서 동시에 시작한다. adder2adder에서는 아직 하위 부분으로부터 넘어오는 캐리를 알 수 없기 때문에 캐리가 1인 경우와 0인 경우를 모두 계산하여 놓는다. 이제 세 부분의 계산이 끝나면, adder1에서 넘어온 캐리는 adder2의 두 가지 결과 중 하나를 선택한다. 이 때 adder2의 캐리도 선택되며, adder2의 캐리는 다시 adder3의 결과를 선택한다. 이처럼 상위 부분에서 하위 부분의 캐리를 보고 계산을 시작하는 것이 아니라, 미리 계산해 놓은 두 결과 중에서 하나를 선택하기만 함으로써 수행 시간을 단축하는 것이다.

정리하자면, ALU는 마이크로 프로세서의 명령어 중 비교적 간단히 구현할 수 있는 것이라면 모두 수행할 수 있도록 설계한 유닛으로서, ALU가 수행하는 연산의 종류가 상당히 많으며, 이는 모두 기본적이고, 그만큼 사용 빈도수가 높은 명령어들이다. 따라서, ALU의 성능은 마이크로 프로세서의 성능에 직접적으로 나타나며, ALU는 마이크로 프로세서 내에서도 심장부라고 할 수 있다.

Cache 메모리

 

일반적으로 메모리라 함 음 마이크로 프로세서 외부에 있는 메인 메모리를 말한다. 메인 메모리는 그 용량이 상당히 크기 때문에, 마이크로 프로세서와 직접 통신하기에는 다소 느리다. 따라서, 마이크로 프로세서 그 내부에 캐쉬라는 작고 빠른 메모리를 두어, 사용될 것으로 예상되는 데이터를 미리 이 곳에 가져다 놓고 사용하도록 되어 있다. 따라서, 캐쉬에 쓰이세 될 데이터를 빠트리지 않고 미리 가져다 놓는 것이 중요하다.

그러면 어떤 데이터가 앞으로 쓰이게 될 것인가?

이 물음에 대한 답은 한마디로 프로그램의 기본성격인 근접성이 제시하고 있다. 근접성이란 최근에 수행되었던 주소의 명령어는 다시 수행되고 있는 명령어로부터 가까운 위치의 주소에 있는 명령어가 앞으로 수행될 확률이 높다는 것이다.

캐쉬에는 두 가지 근접성에 의해서 정해진 양단위로 데이터가 채워지게 되며, 이 단위를 라인이라고 한다. 캐쉬는 현재 들어와 있는 아린의 목록인 Tag RAM을 두어서, 마이크로 프로세서가 원하는 데이터가 있는지 없는지를 빠르게 알 수 있도록 한다. 만일 데이터가 없다면, 메인 메모리에서 다시 해당 라인이 캐쉬로 와야 하기 때문에, 마이크로 프로세서는 상당히 많은 시간을 기다려야 한다. 그러나 캐쉬의 크기가 어느 정도까지 커지면, 캐쉬에 필요한 데이터가 빠져 있을 확률은 극히 낮아지게 된다.

그림 6에서 마이크로 프로세서는 주소의 하위 bit들로 Tag RAM을 참조하며, 둘째 단계로 주소의 상위 bit들과 Tag RAM의 내용을 비교한다. 비교 결과 원하는 데이터가 있으면, 적중신호가 발생하고, 이 적중 신호가 캐쉬의 출력을 마이크로 프로세서로 보내게 된다.

최근처럼 지속적으로 비약적으로 마이크로 프로세서의 속도가 빨라지는 상황에서, 캐쉬 메모리는 마이크로 프로세서와 메인 메모리의 속도차이를 좁혀 주는 중재자라고 할 수 있을 것이다.

MMU

 

마이크로 프로세서가 인식하고 있는 메모리의 크기는 32bit를 주소로 사용할 경우 42Gigabyte정도의 메모리만을 장착하게 된다. 따라서, 마이크로 프로세서는 실제주소와는 다른 가상주소를 사용하게 되며, 이 가상주소는 MMU에 의해 실제 주소로 변환되어 사용된다. 따라서, 여러 개의 가상주소가 하나의 실제 주소를 나타내고 있을 수 있으며, 이런 문제를 Alias라고 한다.

그러면 어느 시점에서 가상주소에서 실제주소로의 변환이 이루어지는가?

여기에는 세 가지 가상주소에서 실제주소의 변환이 이루어지는가?

여기에는 세 가지 방식이 있다. 첫째는 마이크로 프로세서에서 나온 주소가 바로 변환되어 캐쉬로 들어가는 방식이다. 이 경우에는 항상 주소의 변환이 이루어지기 때문에 캐쉬 엑세스가 느려지는 단점이 있으나, 실제주소만으로 메모리에 엑세스하므로 Alias가 발생하지 않는 장점이 있다.

둘째는 캐쉬 메모리와 메인 메모리 사이에 MMU를 두는 방식으로서, 마이크로 프로세서가 캐쉬 메모리에 엑세스할 때에는 변환하지 않고 그대로 가상주소를 사용하므로, 캐쉬 엑세스가 빠르다. 그러나 캐쉬에 있는 2개의 이상의 가상번지가 메인 메모리의 하나의 실제주소로 변환될 수가 있으므로, Alias 가 발생할 우려가 있으며, 이를 해결하기 위한 하드웨어적, 소프트웨어적 부담이 있게 된다.

세 번째 방법은 이들 두 가지 방법이 갖고 있는 단점을 모두 보완한 것으로서 최신의 마이크로 프로세서라면 대부분 채택하고 있는 방식이다. 여기서는 그림7과 같이 MMU의 위치를 캐쉬와 같게 둔다. 즉 마이크로 프로세서는 가상주소를 가지고 캐쉬를 직접 엑세스하며, MMU에도 동시에 가상주소를 보낸다. 따라서 캐쉬 엑세스 타임은 첫 번째 방식과 같이 빠르다. 또한 그림처럼 변환된 실제주소와 캐쉬에 들어간 가상주소의 내용이 맞는지를 비교하여, 메인 메모리에 엑세스하기 때문에 Alias가 발생하지 않는다. 그러나 이 내용비교가 가능하려면, 캐쉬메모리 한 단위의 크기가 실제주소에서 발생할 수 있는 변화량을 넘지 않도록 해야 하므로, 작은 단위의 캐쉬를 여러 개 사용하여야 하는 불편함이 있다. 이 방식은 전문용어로 Virtually indexed physically tagged 방식이라고 부른다.

위에 데이터의 이동을 위한 다른 세부 기술들을 동원하여 작은 메인 메모리 양을 효율적으로 관리하는 기능을 한다. 컴퓨터 시스템은 캐쉬 메모리. 메인 메모리 대용량 저장장치 순서로 이루어지는 계층적 데이터 구조를 사용하고 있다. 이런 계층적 구조에서는 데이터가 제때에 위치해 있지 않으면, 많은 지연시간이 걸리게 되므로, MMU로 하여금 어떤 방법을 써서 데이터의 이동을 최적화시킬 것인가 하는 문제는 신중하게 결정해야 할 사항이다.

갈수록 프로그램의 크기와 멀티 태스킹이 증가하고 있으므로 MMU의 역할은 더 중요해지고 있는 상황이다.

FPU(부동 소수점 연산기)와 실수 연산 명령어들

 

실수 연산은 최근 마이크로 프로세서가 신호처럼 프로그램과 3D 응용 프로그램을 수행하는 경우가 늘어 구현은 IEEE에서 제정한 754 표준에 따라서 이루어진다. 실수 연산기는 그림8에서처럼 메모리와의 교류를 정수연산기와 공유하고 있으며, 곱셈의 경우도 정수와 실수 곱셈을 모두 하도록 설계되고 있다.

곱셈이란 원래 덧셈을 계속 반복하는 것이므로, 마이크로 프로세서의 곱셈기도 기본적으로 이 원리를 이용하고 있다. 그러나 무작정 덧셈을 반복하는 것은 시간이 너무 많이 걸리기 때문에, 최대한 덧셈의 횟수를 줄이는 방법이 강구되어 왔다. 이러한 방법 중 가장 일반적으로 사용되고 있는 것이 Booth Algorithm이다.

이진수 곱셈에서, 우리는 피승수의 최하위 비트부터 최상위 비트까지 옮겨가며 덧셈을 하게 된다. 피승수의 비트가 1이면 승수를 더하며, 0이면 더하지 않는다. 이 때, 피승수의 비트가 올라감에 따라서 더해주는 승수의 위치도 한자리씩 위로 올려 준다. 이제 Booth Algorithm이 어떻게 덧셈의 횟수를 줄이는지를 살펴보기로 한다.

그림 91번의 경우에서는 피승수가 4개의 1로 이루어져 있으므로, 원래 대로라면 4번이 덧셈을 하여야 한다. 그러나 그림에서처럼 이를 1번의 덧셈과 1번의 뺄셈으로 완수할 수 있게 된다. 2번의 경우에서는 5번의 덧셈을 마찬가지 방법으로, 1번의 덧셈과 1번의 뺄셈으로 수행할 수 있음을 보여 주고 있다.

나눗셈의 경우는 곱셈과 반대로 계속적인 뺄셈을 통해서 이루어진다. 그러나 Booth Algorithm처럼 연산횟수를 줄일 수 있는 뾰죡한 방법이 없으므로, Table에 결과치를 미리 저장해 놓아 사용하는 다소 원시적인 방법을 쓰고 있다. Table에 의한 방법은 반도체 Chip의 면적을 많이 차지하나, 지연시간은 비교적 적게 걸리기 때문에, 직접기술이 발전함에 따라서, 나눗셈뿐 아니라 복잡한 알고리즘을 요하는 다른 연산에서도 널리 쓰이고 있다.

삼각함수나 지수로그함수와 같은 초월함수의 계산에 이 Table에 의한 방법이 보편적으로 쓰이고 있다. 애초에 초월함수의 계산은 Cordic Algorithm이라는 방법이 널리 쓰였었다. 이는 복 소 평면에서의 좌표의 수렴을 이용해 결과 값에 접근하는 방법으로서, 근래에는 데이터의 크기가 커짐에 따라 , Cordic Algorithm의 처리시간도 길어져 더 이상 고성능 마이크로 프로세서에서는 사용하기가 힘들어졌다. 따라서, 최근에는 초기에 대략의 값을 Table에 의한 방법으로 구하고, 이 대략적인 값을 구하고자 하는 초월함수에 근사한 다항식(대표적인 예로 Taylor 급수가 있다)에 대입하여, 최종의 값을 얻는 방법을 쓰고 있다.

근사다항식 계산은 항이 많이 질수록 값이 정확해지므로, 일정한 유형의 계산을 반복해 항의 개수를 늘려 나간다. 이때 초기 Table에 의해서 대략의 값을 정교하게 알아낼수록 후에 근사다항식 연산에서의 반복횟수를 줄일 수 있으므로, 초기값을 어느 정도 정확한 수준에서 구할지를 신중히 결정해야 한다.

실수연산과 초월함수 연산은 정수연산에 비해 사용빈도는 낫지만, 이들은 Graphic 분야나 Science분야, 3D분야 등과 같이 대체로 전문적 영역이면서 고성능을 요하는 프로그램에 많이 쓰이고 있다. 따라서, 최근에는 일반구매자도 마이크로 프로세서의 선 택시에 실수 연산기의 성능을 많이 고려하는 추세이다.

 

1.
2.
1111 = 10000 - 1 = 10001
111111 = 1000000 - 1 = 1000001

<그림9> Booth Algorithm의 예

최신 마이크로 프로세서 개발 현황과 전망

 

지금까지 현재 고성능 마이크로 프로세서의 설계시에 쓰이는 기본기술과 중요 결정사항에 대해 요약해 보았다.

본론의 내용은 대부분의 마이크로 프로세서 쓰이고 있는 보편적인 기술이며, 현재 출시되고 있는 마이크로 프로세서들이 내세우는 것은 여기에 가미된 독자적인 기술이다. 마이크로 프로세서 시장은 크게 PC용과 서버용(Workstation)으로 나눌 수 있다.

PC용 시장은 인텔의 마이크로 프로세서가 사실상 유일무이한 제품이라고 할 수 있다. 경쟁업체들이 인텔 마이크로 프로세서와 호환성을 맞추기에 급급해 할 정도이기 때문이다. 그러나 이러한 PC시장에도 서서히 변화의 조짐은 보이고 있다. 업계 2인자인 AMD가 열악한 위치에서도 계속적으로 늦지 않게 호환 칩을 설계해온 노력 때문에 저가 시장에서의 인지도 상승한 것이다.

AMD는 최근 펜티엄 에 정면 대항하는 K7의 출시했으며, K7AMD가 최초로 인텔의 호환 칩이 아닌 독자적으로 개발한 마이크로 프로세서이다. 그 성능과 클럭 주파수 또한 인텔의 그것과 견줄 수 있을 것으로 예상된다. K7이 성공하지 못한다면, 인텔의 가격정책으로 인해 경영상태가 열악해진 AMD는 심각한 타격을 입을 것으로 예상되며, 이 경우 인텔의 독점적 위치는 더욱 굳건해 질 것으로 보인다.

서버용 시장에서는 Sun MicroSystems HP IBM Silicon Graphics를 위주로 기타 군소업체가 시장에 참여하고 있다. 서버용 시장에서는 한번 시스템을 구입한 구매자가 쉽게 컴퓨터업체를 바꾸기를 꺼려하기 때문에, 주요업체들은 확보한 고객의 유지를 바탕으로 시장점유율 향상을 꾀하고 있다.

PC보다 고성능이 더욱 절실한 서버용 시장에서는 이미 64bit CPU으로의 전환이 이루어진 상태이다.

그러나 최근 이 64bit 시장에, HP와 제휴한 인텔이 새로운 Architecture를 가지고 참여하기로 결정함으로써, 기존 서버용 업체들도 위기감 속에서 신처럼 개발에 박차를 가하고 있다. 인텔이 조만간 발표할 LA-64프로세서는 인텔의 CISC 기술과 HPRISC기술을 결합시킨 것으로서, 기존의 컴퓨터 Architecture에 비해 획기적으로 발전된 구조인 VLIW와 슈퍼페럴렐 기술을 내세우고 있다. 당초 LA-64가 빠른 속도로 시장을 장악할 것이라는 예상이 많았으나, 이 획기적 프로세서의 발표시기가 늦어지면서, 기존 서버업체들은 신제품 개발에 더욱 힘을 내고 있다. 인텔이 내년 중반 800MHz이하 정도에서 LA-64를 출시할 것으로 예상되는데 반해, 기존 업체들의 제품은 이 시기에 1GHz정도를 이룰 것으로 보이기 때문이다. 심지어 인텔과 한 배를 탄 HP도 독자적 프로세서 개발을 계속하고 있다.

HP는 캐쉬 메모리의 성능을 업계 최고로 높인 PA8600으로, IBM은 또 하나의 획기적 기술은 구리칩 공정을 이용한 파워 PC750으로 맞서고 있으며, 삼성과 컴팩의 알파 칩에서는 750~800MHz인 칩을 썬마이크로시스템스는 울트라스파크를 각각 향후 대안으로 내놓고 있다.

지난 몇 십 년 동안 각 분야에서, 컴퓨터의 활용은 놀라울 정도로 증가해왔다. 또한 최근 몇 년 동안은 인터넷과 그 응용으로 인해. 컴퓨터의 활용은 어느 때보다도 폭발적으로 증가하고 있다. 기업들도 효율적으로 회사 내부를 운영하고 관리하기 위해, 저마다 인트라넷 개념을 도입하고 있다. 앞으로도, 정보통신, 멀티미디어 등을 중심으로 하여, 소비자들이 더욱 고성능의 컴퓨터를 필요로 할 것임에 틀림이 없다.

이렇듯 확대일로에 있는 컴퓨터의 발전에서, 항상 변화의 최선두에 섰던 것 중 하나는 역시 컴퓨터 하드웨어의 핵심부품인 마이크로 프로세서였다. 향후 컴퓨터 분야에서의 지배력도, 지금의 이 64bit 마이크로 프로세서 경쟁의 승자가 차지하게 될 것으로 전망된다.

반응형

'공부하기 > 잡학다식' 카테고리의 다른 글

삼국지 11. 게임 매뉴얼  (0) 2021.08.27
[민법 기초 용어 정리]  (0) 2021.08.27
한국어는 어렵다 : 반어법  (1) 2021.08.17
표준 중수로 용어집 13  (0) 2021.08.15
표준 중수로 용어집 12  (0) 2021.08.15

댓글