CPU 아키텍쳐(x86, ARM)비교 + MIPS

CHAN·2023년 6월 20일
1

CS

목록 보기
2/14
post-thumbnail

x86은 무엇인가?

Intel회사에서 개발한 컴퓨터의 중앙처리장치(CPU) 즉, 마이크로프로세서 계열인 x86프로세서는 Intel의 CPU와 호환이 되는 프로세서들이 사용하는 ISA(Instruction Set Architecture)를 부르는 말이며 다른 이름으로 80x86이라고 한다. x86은 주로 데스크탑, 노트북에서 사용하는 CPU아키텍쳐이다. intel은 새로운 제품을 만들 때 이전의 제품의 버전을 고려하며 제작을 하기 때문에 Intel에서의 전체 명령어의 집합을 뜻하는 말인 x86은 CPU가 출시된 이후부터 현재까지 출시되는 CPU, ISA들이 모두 담겨져 있는 말이다.

  • 인텔은 처음에 ‘x86-IA16’ ISA를 출시하였다(16비트 CPU에 탑재). 이후 기술이 발전하면서 32비트 CPU에 탑재된 ‘x86-IA32’ ISA를 개발하게 된다. 이것이 간단하게 x86이라고 불리는 ISA이다. 시간이 흐르고 기술은 계속 발전하여 인텔에서는 64비트 CPU에 탑재되는 ‘x86-IA64’라는 ISA를 개발하였다. 예상과 달리 이는 기존의 32비트를 지원하는 소프트웨어와 호환이 되지 않는 관계로 많은 인기를 누리지 못하였다. 이미 인텔은 여러 회사들과 CPU, ISA측면에서 경쟁상태였지만 ‘x86-IA64’를 계속 주장하는 바람에 인텔의 다른 경쟁회사인 AMD에서 x86-64라는 ISA를 개발하게 되고 인텔과는 반대로 큰 인기를 누리게 된다. 이후 인텔은 경쟁회사 AMD에게 라이센스를 받아 EM64T라는 AMD의 ‘x86-64’와 거의 같은 ISA를 개발하고 계속 고집을 해오던 x86-IA64를 포기하게 된다.

  • 인텔 8086, 인텔 80286, 인텔 80386, 인텔 80486을 거쳐 이후 경쟁사 AMD의 EM64T와 인텔의 지원으로 x86의 표준이 된다.

  • IA-16(16비트), IA-32(32비트), IA-64(64비트, 단종), intel64(x86-64 명령어 지원)는 모두 x86 프로세서 그룹이다.

  • x86은 IA-16, IA-32를 모두 포함하는 말로 사용이 되는데 이중 IA-32는 다른 경쟁 회사들이 시장에서 주도권을 잡지 못할 정도로 성공적인 인텔의 ISA이다. 현재는 많은 기업들이 IA-32를 지원하여 개발을 하고 있다.(AMD가 대표적)

  • 병렬 컴퓨팅의 종류중 하나인 ‘SIMD’는 하나의 명령으로 여러 가지 일을 할 수 있다. 이는 동영상과 같은 매우 용량이 큰 멀티미디어를 처리하기 위해 x86의 명령집합 방식으로 사용된다. 또한 86은 ‘CISC’를 바탕을 설계를 했지만 요즘은 내부적으로 RISC의 설계도 이루어 지는 하이브리드 방식으로 하이브리드 아키텍쳐이다.


ARM은 무엇인가?

ARM Holdings사의 ISA를 말한다. 데스크탑과 노트북의 ISA인 인텔과는 달리 ARM은 현재 우리가 사용하는 스마트폰의 CPU의 ISA를 주로 담당하고 있다. 따라서 스마트폰이 널리 보급되고 나서 급속한 주목을 받기 시작했다.

  • 1980년대 고성능 컴퓨터를 만들기 위해서 Acorn Computer에서는 해당 컴퓨터에 탑재되어질수 있는 CPU를 찾으려고 했지만 당시 시장에서는 볼 수가 없었다. 따라서 직접 RISC를 기반으로 하는 CPU아키텍쳐를 만들었고 이것이 ARM의 시발점이 된다. 이후 ARM은 마이크로컨트롤러 업계에서 자리를 잡게 되는데 이는 Thumb 명령어 세트와 다른 부가기능을 ARM에 도입하였기 때문이다. 원래 ARM은 32비트 길이인 명령어 세트였지만 RISC를 기반으로 하는 ARM 답게 이것이 길다고 생각을 하여 Thumb를 사용하여 16비트로 축약하였다. 이는 대표적으로 RISC를 특징을 잘 사용한 사례이다. 이후 디버깅등의 테스트, 연산 기능 등등을 ARM에 추가하였다.

  • ARM은 시간을 거듭하면서 (전력소모를 줄이는 기술 등의 아키텍쳐 성능 향상을 여러 회사(APPLE, 퀄컴)들이 합작함으로써 점점 기술이 발전하였다. 그러나 이때의 시장은 MIPS, 히타치 같은 기업들이 주도권을 잡고 있었다. 그저 ARM은 공유기, 네비게이션 등등으로 시장에 들어와서 안착하는 정도였다. 전성기는 스마트폰이 보급되고 나서 시장의 주도권을 잡기 시작한다. ARM은 애플리케이션 사용에 매우 유리한 Cortex 등등을 개발하여 탑재하였고 이는 시장에서 ‘스마트폰의 CPU는 ARM’이라는 말이 들릴 정도로 소비자들사이에서도 유명해졌다.

  • 이전의 시장 경쟁에서는 컴퓨터 부분에서 x86이 ARM에게 완승하여 x86이 주도권을 잡았지만 현재(2021년 기준)으로 APPLE사의 맥북에서 탑제되는 CPU를 x86에서 ARM기반으로 바꾼뒤부터 전문가들은 다시 x86, ARM의 경쟁이 예상될 것이라고 한다.

  • RISC기반의 ARM은 32비트 명령어세트에서 사용했던 여러 기능들은 ARM의 새롭게 도입하는 64비트 명령어 세트에서는 많이 사라졌다.

  • Cortex는 스마트폰이 발전하는데 매우 중요한 역할을 한다. 따라서 ARM은 이러한 Cortex를 현재까지도 계속 발전을 시키며 시장에서 우위를 차지하고 있다. 계속 개발이 이루어지고 국내에서는 아이폰, 옵티머스, 그리고 현재까지도 갤럭시S시리즈는 Cortex를 아키텍쳐로 사용한다.

  • ARM은 전력소모의 부분에서 매우 뛰어나다. 다른 아키텍쳐의 대기전력(아키텍쳐를 가동시키지 않고 콘센트만 꽂아도 소비되는 전력)이 ARM에서는 동작전력(아키텍쳐를 가동할 때 발새하는 전력)일 때도 있다.


x86의 구조와 특징

  • x86은 ‘ALU 산술 논리 장치’, ‘제어장치’, ‘레지스터’, ‘버스 인터페이스’, ‘메모리’ 등등의 구조를 가진다.

  • ALU 산술 논리 장치는 가산기, 보수기, 이동기 등의 연산을 할 수 있는 것과 그것을 저장하는 레지스터들이 있다.

  • 제어장치에는 명령어를 해석하고 각각의 명령이 해당하는 장치에 보내지도록 하는 디코더가 있다.

  • 레지스터는 IA-16에서는 16비트를 8비트씩 두 개로 나누어 사용하였지만 32비트(IA-32)부터는 32비트의 레지스터 하나로 사용한다. 레지스터는 ‘일반 레지스터’, ‘세그먼트 레지스터’, ‘포인트 레지스터’, ‘인덱스 레지스터’ 등등이 있으며 16비트인 세그먼트 레지스터를 제외하고 나머지 모두 32비트이다. 각각 레지스터들이 수행하는 것은 다음과 같다.

  • CISC설계를 기본으로한 아키텍쳐이며 하위 호환성이 매우 훌룽하다. x86은 저장방식이 msb가 제일 높은 주소가 되는 little endian방식으로 저장을 하며 현재는 내부적으로 RISC와 유사한 기능을 하도록 설계가 된다.

  • x86은 세그먼트 메모리 주소공간이 특징을 결정하는 호환모드 또는 리얼모드와, 이전의 버전(호환이 되지 않는 것)또한 수용하기 위한 보호모드를 제공한다.


ARM의 구조와 특징

  • ARM은 대표적인 ARM은 32비트의 RISC 아키텍쳐이다. 따라서 명령이 매우 간단하게 설계가 되어져 있다.

  • ARM은 2종류의 명령어 레지스터가 가지고 있는데 그리고 16비트의 Thumb명령, 32비트의 ARM명령이 있다. Thumb명령은 16비트이지만 ARM의 목적레지스터는 32비트 이기 때문에 크기는 32비트로 계속 유지된다.

  • ARM은 Load-Store구조이다. 즉, 데이터 처리를 레지스터를 기준으로 수행을 한다. 메모리에 연산을할것이 있다면 Load명령을 통하여 레지스터에게 전달을 하고 이후 레지스터에서 연산이 끝나면 Store명령을 통하여 다시 메모리로 결과를 가져와 저장하는 방식이다.

  • ARM이 데이터를 저장하는 방식인 ‘big endian 방식’, ‘little endian 방식’을 선택하여 사용할 수 있다. 즉 두 개 모두를 지원한다.

  • 32비트의 ‘ALU 산술 논리 장치’, ‘레지스터 뱅크’, ‘주소, 쓰기 레지스터’, ‘명령어 디코더’ 등으로 구성되어지며 폰노이만 구조를 따른다. 따라서 같은 폰노이만 구조를 따르는 MIPS처럼 명령어들은 모두 메모리에 저장되며, 그 명령어가 있는 주소값을 통하여 함수가 호출이 된다.

  • ARM은 고속 인터럽트 기능을 가지는 레지스터 뱅크 구조이다. 따라서 인터럽트를 처리하는 것이 빠르다.

  • ARM은 하나의 명령으로 여러 가지 일을 처리할 수 있다. 이는 가끔 RISC의 원칙에 위배되는 행동이지만 용량을 절감하기 위해 이렇게 사용한다. 즉, 고성능 저전력을 우선시 한다.

  • Cortex계열을 사용하기 때문에 ARM의 전력소모는 다른 아키텍쳐에 비해 매우 유리하다. ARM프로세서는 고정길이 16비트 thumb명령어를 사용하기 때문에 메모리용량에서 낭비되는 량이 적으며 최대 장점인 고성능 저전력으로 인한 휴대폰의 ISA시장을 장악, 아날로그 신호를 디지털 신호로 바꾸어 빠르게 처리하는 DSP 기능. 메모리의 특정한 부분의 접근을 제안하는 등의 보안기능이 있는 것이 특징이 된다.


MIPS, x86, ARM의 구조와 특징 비교

  • 먼저 저장방식에 대한 차이가 있다. msb가 제일 낮은주소가 되는 big endian방식, msb가 제일 높은주소가되는 little endian방식이 있는데 MIPS에서는 두 개의 저장방식을 모두 사용한다. 다만 주로 사용하는 것은 big endian 방식이다. x86은 ‘인텔 포맷’이라고 하는 little endian 방식을 사용하며 ARM은 MIPS처럼 두 개 모두를 사용한다.

  • 구조에서도 차이를 볼 수 있다. x86이 현재는 내부적으로 RISC기능을 수행한다고 하지만 제일 처음은 CISC의 구조를 바탕으로 설계가 되었다. 그러나 ARM과 MIPS는 RISC구조 이다. 따라서 ARM과 MIPS는 RISC의 장점인 명령이 간단하니 성능을 극대화 할 수 있으며, x86은 명령어마다 크기가 다르니 code사이즈를 최적화 할 수 있다.

  • MIPS는 또한 많은 명령어들을 간단하게 구분하기 위해서 명령어를 3가지 포멧으로 구분한다.

    R-format은 ALU Instructions에서 많이 사용(산술 논리 연산)
    => 3개의 레지스터를 사용(하나의 destination, 두개의 sources)
    I-format은 immediate field가 존재
    => 가장 많이 사용되는 것이 메모리 접근명령어 또는 immediate명령어
    J-format은 jump명령어등이 존재

  • x86, ARM. MIPS는 어셈블리어에서도 많은 차이가 있다. 대표적으로 operand를 처리하는 방식에서 차이가 많이 있다.

    ARM의 ‘MOV’와 같은 명령어가 MIPS에는 존재하지 않는다.
    ARM, MIPS는 산수연산이 3개의 operend로 구성이 되어지지만 x86은 1개 또는 2개로 구성이 되어진다.

  • MIPS는 ARM과 같이 한정적인 공간을 극복하기 위한 load-store연산을 수행한다. 이는 CISC기반인 x86과 저장방식이 다른 RISC의 특징이다.
    업로드중..

  • MIPS, ARM 모두 명령어의 크기는 32비트에 고정이 되어져 있지만 ARM은 16개의 레지스터를 가지며 MIPS는 32개의 레지스터를 가진다. 또한 MIPS는 레지스터에는 32개의 gpr이 지원이 되며 별도로 floating point registers또한 32개를 지원한다. 그러나 x86은 밑의 버전을 모두 호환하여 제작을 하였기 때문에 매우 복잡한 명령어 셋을 가지고 있다.

  • 또한 MIPS는 opcode가 6비트이지만 ARM은 연산자의 명령어에 따라 opcode의 비트수가 다르다.

  • MIPS에서는레지스터가 여러게 묶어있는(cpu안에 존재) 레지스터 파일을 사용하여 특정한 값들이 각각의 주소를 가리키는 레지스터에 저장이 되고 그 레지스터로 부터 값을읽어 들이는 동작을 한다.

  • MIPS에서는 용량을 효율적으로 사용하기 위해 base+offset의 형태로 값을 저장하는 것이다. 즉, base에서 주소를 덧붙이고(offset) 다른 메모리를 활용한다.

가장 큰 차이는 RISC, CISC라고 생각한다. RISC 특성상 레지스터의 수는 많고, 처리속도가 빠르며 명령어가 고정길이를 가지기 때문에 적다. 여기에 해당되는 것이 ARM, MIPS이며 반대의 특성을 가진 CISC는 x86의 특징이된다.


x86의 장단점

  • x86은 CICS의 특징중 하나인 명령어의 길이가 서로 다르기 때문에 다른 명령어의 길이를 줄임으로 코드를 간결하게 하여 디버깅의 속도를 높일 수 있다.
  • x86은 최대의 장점은 이전 버전과의 호환이 좋다는 것이다.
  • x86은 이전의 버전들과 호환을 하기 위해 그것들의 구조를 추가를 하며 개발을 했기 때문에 복잡한 명령어 체계를 가진다. 이러한 이유로 빠른 속도를 중요시하는 ISA에 악영향을 준다.
  • 현재는 AMD64에서 범용레지스터를 두어 부족한 레지스터의 수를 어느정도 극복하지만 이전에는 사용이 가능한 레지스터의 수가 적었기 때문에 레지스터, 메모리간의 연산을 지원해 메모리에 대한 접근 많아서 속도가 느렸다.

ARM의 장단점

  • 앞에 ARM의 특징에서도 말한 것처럼 다른 아키텍쳐의 대기전력이 ARM에서는 동작전력인 경우가 있다. 즉 ARM은 저전력이며 또한 모바일 시장이 활발하게 되며 성능이 올라가 고성능 저전력이라는 장점이 있다.
  • ARM은 메모리 저장방식을 2가지를 선택하여 사용하기 때문에 메모리 사용 유연성을 높인다.
  • RISC의 특징인 간단한 명령어를 통하여 구조가 간단하며 실행속도가 빠르다.
  • 16비트의 Thumb명령어를 사용하기 때문에 코드의 크기를 줄일수 있으며 좁은 비메모리 공간에서 호율적으로 사용할 수 있다.
  • 아날로그 신호를 디지털 신호로 바꾸어 빠르게 처리하는 DSP 기능. 메모리의 특정한 부분의 접근을 제안하는 등의 보안기능이 있다.
  • RISC 프로세서이기 때문에 명령어의 길이가 정해져 있어 많은 코드를 구현 해야 한다는 것과 PC에서 구현을 하기위해서는 ARM을 지원하는 프로그램이로 실행을 하기 때문에 속도가느리다는 단점이 있다. 즉, 호환성의 부분에서 불리하다.
    -또한 16비트인 Thumb명령어는 조건부 실행이 안되며 상수값의 표현 범위가 작다라는 단점이 있다.

MIPS, x86, ARM의 장단점 비교

  • RISC 프로세서인 MIPS, ARM 그리고 CISC프로세서인 x86의 장단점은 각각 RISC, CISC의 장단점과 비슷하다. MIPS(RISC)를 예로들면 단순하고, 명령어 고정된길이, 형식도 있고 OPCODE는 6비트로 고정 하고 작게 만들어서 빠르게 동작하는 것을 목표로 두고 있다. 반면에 CISC 프로세서는 명령어 길이가 다양하고 복잡하며 프로세서를 설계하는데도 많은 시간이 걸린다.

  • 또한 x86같은 경우는 컴퓨터등의 고성능 응용 프로그램용으로 설계되기 때문에 전력이 많이 소비된다. 그러나 ARM과 MIPS의 경우는 저전력환경에서 사용이 된다.

  • MIPS는 ARM의 어떤 명령어들은 새롭게 정의되어지지 않고 기존의 명령어들로 지원이 되어진다ex) 비교연산. 추가로 명령어를 만들지 않기 때문에 하드웨어 구현이 매우 간단해져 프로세스의 가격을 낮추고 clock frequency를 높일 수 있다는 장점이 있다.

  • MIPS는 하나의 명령어에 대한 속도만 알고 그것이 얼마나 일을 처리하는지를 알지 못하기 때문에 성능평가를 하는데 있어서 불리하다.


마무리

현재 가장 널리 사용되고 있는 대표적인 CPU 아키텍처를 알아보면서 내가 사용하는 CPU가 얼마나 정교하게 설계가 되었는지 확실하게 알 수 있었다. 공부를 하면서 CPU의 일반적인 역할에 대해 이해하고 넘어갈 수 있었지만, 여러 자료들을 보면서, 조금이라도 깊게 공부할 수 있었기때문에 좋은 경험으로 남을 수 있었다.

<참고문헌>
나무위키 https://namu.wiki/w/x86
나무위키 https://namu.wiki/w/ARM
티스토리 https://it-eldorado.tistory.com/35
위키피디아 https://ko.wikipedia.org/wiki/IA-32
profile
크게 보는 습관

2개의 댓글

comment-user-thumbnail
2023년 12월 14일

잘보고 갑니다

답글 달기
comment-user-thumbnail
2025년 2월 9일

IA64는 X86이 아닙니다

답글 달기