맨위로가기

IA-32

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

IA-32는 인텔이 64비트 아키텍처인 IA-64를 발표하면서 기존 32비트 x86 아키텍처를 지칭하기 위해 사용된 명칭이다. 1985년 인텔 80386 프로세서 출시와 함께 처음 선보였으며, 펜티엄, P6 마이크로아키텍처, 넷버스트 마이크로아키텍처 기반 프로세서를 거쳐 x86-64(AMD64) 및 Intel 64와 같은 64비트 아키텍처로 전환되었다. IA-32는 32비트 레지스터, 정수 연산, 메모리 관리 등의 특징을 가지며, 실제 모드와 보호 모드를 지원한다. IA-32는 4GB의 가상 주소 공간을 제공하며, 물리 주소 확장(PAE)을 통해 최대 64GB의 물리 메모리를 사용할 수 있다. 64비트 아키텍처로의 전환은 메모리 주소 공간의 한계를 극복하고, 메모리 기술의 발전을 이끌었다.

더 읽어볼만한 페이지

  • 32비트 컴퓨터 - VAX
    VAX는 DEC에서 개발한 가상 메모리를 지원하는 32비트 CISC 컴퓨터 아키텍처 및 컴퓨터 시리즈로, PDP-11의 확장이며, 다양한 모델과 운영 체제를 지원하며 슈퍼미니컴퓨터 시장에서 인기를 얻었으나 RISC 아키텍처의 등장으로 대체되었다.
  • 32비트 컴퓨터 - 모토로라 68000 시리즈
    모토로라 68000 시리즈는 1979년 출시된 16/32비트 마이크로프로세서 제품군으로, 데스크톱 컴퓨터, 워크스테이션, 게임 콘솔 등 다양한 시스템에 사용되었으며, 직교적인 명령어 집합, 다양한 주소 지정 방식, 슈퍼바이저 모드 등의 특징을 갖추고 성능과 기능이 개선되었다.
  • X86 아키텍처 - 물리 주소 확장
    물리 주소 확장(PAE)은 x86 아키텍처에서 32비트 주소를 36비트 이상으로 확장하여 CPU가 4GB 초과 물리 메모리에 접근하도록 하는 기술로, 페이지 테이블 확장 및 추가 페이지 테이블을 통해 최대 64GB 메모리를 지원하며 AMD64 아키텍처에서 가상 주소 공간 확장에 사용되고 운영 체제, 칩셋, 마더보드의 지원이 필요하며 CPUID 플래그로 지원 여부를 확인한다.
  • X86 아키텍처 - X86 가상화
    X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다.
  • 컴퓨터에 관한 - 고속 패킷 접속
    고속 패킷 접속(HSPA)은 3세대 이동통신(3G)의 데이터 전송 속도를 높이는 기술 집합체로, 고속 하향/상향 패킷 접속(HSDPA/HSUPA)을 통해 속도를 개선하고 다중 안테나, 고차 변조, 다중 주파수 대역 활용 등의 기술로 진화했으나, LTE 및 5G 기술 발전으로 현재는 상용 서비스가 중단되었다.
  • 컴퓨터에 관한 - 데이터베이스
    데이터베이스는 여러 사용자가 공유하고 사용하는 정보의 집합으로, 데이터베이스 관리 시스템을 통해 접근하며, 검색 및 갱신 효율을 높이기 위해 고도로 구조화되어 있고, 관계형, NoSQL, NewSQL 등 다양한 모델로 발전해왔다.
IA-32

2. 명칭

'''IA-32'''라는 명칭 자체는 인텔이 새로운 64비트 아키텍처인 '''IA-64'''를 발표하면서, 그것과 대조적으로 기존의 32비트 아키텍처(즉, 386 이후 그 당시까지의 x86)를 가리키는 것으로 만들어진 일종의 역어이다.

인텔 8086명령어 집합 아키텍처는 확장을 거듭하며 후속 프로세서에 계승되어, (인텔 80186), 인텔 80286, 386, 486에 이르기까지, 그 명칭에서 통틀어 x86이라고 불린다. 그 x86 아키텍처 중에서, 아키텍처를 32비트로 확장한 386 이후, x64 이전의 아키텍처를 가리켜 (펜티엄, 셀러론, 인텔 코어, 인텔 아톰 등의 32비트 제품도 포함하여), 현재는 IA-32라고 한다.

80386과 동시에 IA-32라는 명칭이 생겨난 것은 아니다. 훨씬 후, 32비트 프로세서가 충분히 일반화되고 미래의 64비트화가 보이기 시작한 1990년대 후반, 인텔은 기존의 호환성을 중시한 나머지 지나치게 길어진 x86의 대체를 시도하여, 휴렛 팩커드(HP)와 공동으로 완전히 새로운 64비트 아키텍처인 IA-64를 정의하고, 그것을 구현한 프로세서 이트애니엄(Itanium)의 개발에 착수했다. IA-64와 이트애니엄에는 기존 제품과의 호환성이 없지만, 보급에 대한 기대감과 시장의 사실상 표준인 인텔이 개발하고 있는 64비트 아키텍처라는 인상을 주기 위한 목적이 있었던 것으로 생각된다. IA-64에 대해 기존의 32비트 x86 아키텍처를 IA-32라고 명명했다. 인텔은 x86과의 연속성을 끊은 IA-64에 점차 중점을 두고, 하이엔드 서버용 RISC 제조업체를 제치고, 로우엔드에서는 자사의 과거인 x86과 호환 CPU를 만드는 호환 CPU 제조업체를 따돌리려는 목적이었다.

인텔의 목표와는 별개로, IA-64는 IA-32와 호환되지 않기 때문에(IA-64#IA-32 지원에 의해 어느 정도 실행은 가능하지만, 성능이 좋지 않다), 시장에서는 기존 시스템을 그대로 유지하면서 확장할 수 있는 IA-32의 상위 호환 64비트 확장이 요구되었다. 인텔은 IA-64의 보급을 목표로 하고 있었기 때문에 자사의 64비트 확장을 공표하지 않았고, AMD가 먼저 x86의 64비트 확장인 x86-64, 후의 AMD64를 발표했다. 이것은 16비트인텔 8086과의 호환성을 유지한 채 32비트386으로 확장한 것처럼, IA-32와의 호환성을 유지한 채 64비트로 확장한 것이다.

그 후 인텔은 엔드유저용 시스템의 운영 체제에서 큰 점유율을 차지하는 마이크로소프트로부터 통일화 압력을 받아, AMD64와 호환하는 방침으로 전환하여, Intel 64를 발표하게 되었다. 인텔은 초기 Intel 64에 대해 IA-32e 등으로도 불렀다.

AMD64도 Intel 64도 IA-32의 64비트 확장이며, 여러 우여곡절이 있었지만, 결국 총칭으로는 x64라고 불린다.

IA-32 마이크로프로세서는 시조인 386DX부터 현재의 인텔 아톰의 일부까지 많이 존재한다(상위 호환인 x64를 IA-32에 포함시키기도 한다). x64가 아닌 IA-32를 현재 채택하는 이유로는, 성능보다 저전력 요구가 높은 모바일용이나, 가상화에서 가벼운 작업을 수행하는 것을 전제로 한 것이 있다.

3. 역사

인텔(Intel) 8086에서 시작된 명령어 집합 아키텍처는 80186, 80286, 386, 486 등으로 계속 확장되며 계승되었고, 이를 통틀어 x86 아키텍처라고 부른다. 이 x86 아키텍처 중에서 32비트로 확장된 386 프로세서 이후부터 x64 아키텍처가 등장하기 이전까지의 아키텍처를 IA-32라고 지칭한다. 여기에는 펜티엄, 셀러론, 코어, 아톰 등의 32비트 제품군이 포함된다.

IA-32라는 명칭은 80386 프로세서 출시와 동시에 생긴 것은 아니다. 32비트 프로세서가 보편화되고 64비트 아키텍처로의 전환이 논의되던 1990년대 후반, 인텔은 기존 x86 아키텍처의 한계를 극복하고자 HP와 공동으로 완전히 새로운 64비트 아키텍처인 IA-64를 개발했다. IA-64를 구현한 프로세서가 이트애니엄(Itanium)이다. 인텔은 이 새로운 IA-64 아키텍처와 구분하기 위해 기존의 32비트 x86 아키텍처를 IA-32라고 명명했다. 인텔은 IA-64를 통해 기존 x86과의 호환성 제약에서 벗어나고, 하이엔드 서버 시장에서 RISC 프로세서 제조업체를 넘어서며, 로우엔드 시장에서는 호환 CPU 제조업체를 따돌리려는 전략적 목표를 가지고 있었다.

그러나 인텔의 기대와 달리 IA-64는 IA-32와의 호환성 문제(제한적인 실행만 가능하고 성능 저하 발생)로 인해 시장에서 널리 받아들여지지 못했다. 시장에서는 기존 IA-32 시스템과의 호환성을 유지하면서 64비트로 확장할 수 있는 아키텍처를 요구했다. 인텔이 IA-64 보급에 집중하는 사이, 경쟁사인 AMD가 이러한 시장의 요구에 발맞춰 x86 아키텍처를 64비트로 확장한 x86-64(이후 AMD64로 명명)를 먼저 발표했다. 이는 16비트 8086 아키텍처가 32비트 386으로 확장된 것처럼, IA-32와의 호환성을 유지하며 64비트로 자연스럽게 확장하는 방식이었다.

AMD64가 시장에서 긍정적인 반응을 얻고, 특히 주요 운영 체제 개발사인 마이크로소프트(Microsoft)로부터 아키텍처 통일에 대한 압력을 받게 되자, 인텔도 결국 AMD64와 호환되는 자체 64비트 확장 기술인 Intel 64를 발표했다. 인텔은 초기에 Intel 64를 IA-32e 등으로 부르기도 했다. AMD64와 Intel 64는 모두 IA-32를 64비트로 확장한 기술이며, 현재는 이를 통칭하여 x64라고 부른다.

386DX에서 시작된 IA-32 마이크로프로세서는 이후 다양한 제품으로 출시되었으며, 현재도 일부 인텔 아톰(Intel Atom) 프로세서 등에서 찾아볼 수 있다. x64 아키텍처가 일반화된 현재에도 IA-32가 사용되는 경우는 주로 성능보다 저전력 소비가 중요한 모바일 기기나, 가상화 환경에서 비교적 가벼운 작업을 처리하기 위한 용도 등이다.

4. 아키텍처 특징

IA-32 아키텍처는 기존 16비트 아키텍처에서 발전하여 여러 가지 중요한 특징을 가진다. 가장 핵심적인 변화는 32비트 프로세서 레지스터, 32비트 정수 연산 능력의 도입이다. 80286과 비교했을 때 주요 개선점 및 특징은 다음과 같다.


  • 32비트 범용 레지스터 및 연산: EAX, EBX와 같은 범용 레지스터(GPR)가 16비트에서 32비트로 확장되었다. 이로 인해 모든 산술 및 논리 연산, 메모리와 레지스터 간 데이터 전송 등이 32비트 정수 단위로 직접 처리될 수 있게 되었다. 스택 작업(push, pop)도 기본적으로 4바이트 단위로 이루어진다. 자세한 레지스터 종류와 기능은 레지스터 섹션에서 다룬다.
  • 향상된 주소 지정 모드: 메모리 주소를 계산할 때, 임의의 범용 레지스터를 베이스 레지스터로, ESP를 제외한 임의의 범용 레지스터를 인덱스 레지스터로 사용할 수 있게 되었다. 또한 인덱스 레지스터 값에 1, 2, 4, 또는 8을 곱하여 최종 주소를 계산하는 스케일링(scaling) 기능이 추가되어 주소 계산의 유연성이 높아졌다.
  • 추가 세그먼트 레지스터: 기존 세그먼트 레지스터 외에 FS와 GS라는 두 개의 레지스터가 추가되어, 프로그램이 더 많은 메모리 세그먼트를 활용할 수 있게 되었다.
  • 확장된 주소 공간 및 페이징: 보호 모드에서는 세그먼트 내 오프셋이 32비트로 확장되었고, 세그먼트 주소를 32비트 선형 주소로 변환하는 기능이 도입되었다. 이 32비트 선형 주소는 가상 주소이며, 페이지 테이블을 통해 물리 주소로 변환되는 온디맨드 페이징 기법을 지원한다. 이를 통해 프로세스마다 최대 4GiB의 독립적인 가상 주소 공간을 제공하고 효율적인 가상 메모리 시스템을 구현할 수 있게 되었다. 메모리 관리 방식에 대한 자세한 내용은 메모리 관리 모델 섹션에서 설명한다.


이러한 특징들은 IA-32가 이전 세대 아키텍처에 비해 더 강력한 성능과 향상된 메모리 관리 능력을 갖추게 된 기반이 되었다.

4. 1. 메모리 관리 모델

IA-32가 지원하는 메모리 관리 모델은 두 가지로, 1MB의 메모리만을 접근할 수 있는 실제 모드(real mode)와 전체 메모리를 접근할 수 있는 보호 모드(protected mode)가 있다.

'''실제 모드'''(real mode)는 처음 부팅했을 때 기본으로 활성화되는 모드이다. 옛 도스의 경우 이 모드를 사용했지만, 마이크로소프트 윈도우리눅스를 비롯한 최근의 운영 체제들은 거의 대부분 보호 모드를 사용하기 때문에 부팅될 때 보호 모드로 전환하는 명령을 사용한다.

'''보호 모드'''(protected mode)는 1MB 이상의 메모리를 지원할 뿐만 아니라 다양한 장점을 가지고 있다. 보호 모드의 가장 큰 장점은 멀티태스킹을 지원하고 이를 위해 가상 메모리와 메모리 접근 권한을 지원한다는 것이며, 따라서 최근의 거의 모든 운영 체제는 보호 모드를 사용한다.

주소가 32비트이기 때문에 보호 모드에서 사용할 수 있는 메모리는 보통 4GB로 제한되어 있지만, 64비트 아키텍처로 전환하지 않고도 4GB 이상의 메모리를 접근할 수 있는 방법이 몇 가지 있다. 그중 하나로 가상 메모리의 페이지 테이블을 확장하여 64GB까지를 사용할 수 있는 물리 주소 확장(Physical Address Extension, PAE)이 있다.

보호 모드는 가상 8086 모드(virtual 8086 mode)라 하여, 옛 도스 프로그램과 운영 체제를 보호 모드의 운영 체제의 통제 아래서 실행할 수 있는 특수한 모드를 제공한다. 이 모드는 IA-16의 보호 모드에서는 지원하지 않던 것으로 IA-32에서 추가된 것이다.

동작 모드필요한 운영 체제실행되는 코드의 종류기본 주소 크기기본 피연산자 크기일반적인 GPR 너비
보호 모드32비트 운영 체제 또는 부트 로더32비트 보호 모드 코드32비트32비트32비트
16비트 보호 모드 운영 체제 또는 부트 로더, 또는 32비트 부트 로더16비트 보호 모드 코드16비트16비트16 또는 32비트
가상 8086 모드16비트 또는 32비트 보호 모드 운영 체제16비트 실 모드 코드16비트16비트16 또는 32비트
실제 모드16비트 실 모드 운영 체제 또는 부트 로더, 또는 32비트 부트 로더16비트 실 모드 코드16비트16비트16 또는 32비트
비실 모드16비트 실 모드 운영 체제 또는 부트 로더, 또는 32비트 부트 로더16비트 실 모드 코드32비트16비트16 또는 32비트


4. 2. 레지스터

인텔 80386에서 처음 도입된 IA-32 아키텍처는 기본적으로 8개의 32비트 범용 레지스터(GPR)와 8개의 부동소수점 실수 레지스터를 지원했다. 이후 등장한 프로세서들은 MMX (명령어 집합), 3DNow!, SSE, SSE2, SSE3과 같은 다양한 SIMD 명령어 집합을 위한 레지스터들을 추가로 지원하게 되었다.

이러한 일반적인 레지스터 외에도, 주로 운영 체제가 사용하는 시스템 레지스터들이 존재한다. 대표적으로 메모리 관리에 사용되는 6개의 세그먼트 레지스터가 있으며, 이 외에도 프로세서의 상태를 제어하거나 디버깅, 테스트 목적으로 사용되는 컨트롤 레지스터, 디버그 레지스터, 테스트 레지스터 등이 있다. 이 시스템 레지스터들의 구체적인 구성은 프로세서 모델에 따라 다를 수 있다.

IA-32는 하위 호환성을 위해 기존의 8비트 및 16비트 레지스터 접근 방식도 유지한다. 예를 들어, 32비트 EAX 레지스터의 하위 16비트는 AX라는 이름으로 접근할 수 있다. 또한, AX 레지스터는 다시 상위 8비트(AH)와 하위 8비트(AL)로 나누어 사용할 수 있다. 마찬가지로 EBX 레지스터도 BX(16비트), BH(상위 8비트), BL(하위 8비트)로 나누어 접근하는 것이 가능하다.

IA-32 아키텍처의 주요 특징 중 하나는 프로세서 레지스터의 확장과 기능 개선이다. 모든 범용 레지스터가 16비트에서 32비트로 확장되어, 32비트 정수 산술 및 논리 연산을 직접 수행할 수 있게 되었다. 메모리 주소 지정 방식도 더욱 유연해져서, 메모리 주소를 계산할 때 임의의 범용 레지스터를 베이스 레지스터로 사용할 수 있고, ESP를 제외한 임의의 범용 레지스터를 인덱스 레지스터로 사용할 수 있다. 이때 인덱스 레지스터 값에 1, 2, 4, 또는 8을 곱하여 주소 계산에 사용하는 스케일링 기능도 추가되었다. 또한, FS와 GS라는 두 개의 추가 세그먼트 레지스터가 도입되어 프로그램이 사용할 수 있는 메모리 세그먼트의 수가 늘어났다.

각 레지스터 종류(범용, 부동소수점, MMX, SSE 등)에 대한 자세한 설명은 해당 하위 섹션에서 다룬다.

4. 2. 1. 범용 레지스터

인텔 80386에서 처음 도입된 IA-32 아키텍처는 8개의 32비트 범용 레지스터를 가지고 있다. 엄밀히 말하면, 이 범용 레지스터들은 이름과 달리 일부 특수한 기능을 가지며, 특정 명령에서는 정해진 레지스터만 사용해야 하는 경우가 많다. 또한 데이터를 직접 다루는 레지스터와 메모리 주소를 다루는 레지스터가 분리되어 있는 특징이 있다. 많은 수의 x86 명령어는 레지스터에 메모리 내용을 미리 불러오지 않고도 직접 연산을 수행할 수 있다. 이러한 설계는 1970년대의 관습에서 비롯된 것으로, 후대의 AMD64와 같은 아키텍처에서는 모든 범용 레지스터가 더 일반적인 용도로 사용될 수 있도록 개선되었다.

IA-32의 범용 레지스터는 크게 데이터 레지스터와 주소 레지스터로 나눌 수 있다.
데이터 레지스터 (4개)주로 데이터 값을 저장하고 산술 및 논리 연산에 사용되지만, 일부 주소 지정에도 관여한다.

  • EAX: 누산기(Accumulator)에 해당하며 대부분의 연산들이 수행된다. 일반적으로 함수나 프로시저의 반환 값(return value)을 저장하는 데 사용된다.
  • ECX: 개수, 횟수 등을 저장하는 카운터(Counter)로 주로 사용된다. 반복(loop) 명령어 등에서 반복 횟수를 저장하는 것이 대표적이다.
  • EDX: 누산기(EAX)의 확장으로 사용되며, 누산기와 관련된 연산에서 활용된다. EDX와 EAX를 합쳐 64비트 연산을 수행하는 경우가 대표적이다.
  • EBX: 일반적인 데이터 저장 용도로 사용되는 베이스(Base) 레지스터이다. 원래 16비트 모드에서는 메모리 주소 지정을 위한 포인터로 사용되기도 했다.

주소 레지스터 (4개)주로 메모리 주소를 저장하여 데이터 접근을 돕는 역할을 한다.

  • ESP: 스택 포인터(Stack Pointer)로, 현재 사용 중인 스택 영역의 가장 마지막 데이터 위치(스택의 꼭대기) 주소를 담는다. 스택에 데이터를 넣거나(push) 뺄 때(pop) 자동으로 값이 변경된다.
  • EBP: 베이스 포인터(Base Pointer)로, 현재 실행 중인 함수나 프로시저의 스택 프레임 기준 주소를 담는다. 이를 통해 스택 내의 지역 변수나 함수 인자에 쉽게 접근할 수 있다. 일반적인 목적으로 사용되기도 한다.
  • ESI: 소스 인덱스(Source Index) 레지스터로, 주로 문자열 연산 등에서 원본 데이터가 저장된 메모리 주소를 담는 포인터로 사용된다.
  • EDI: 목적지 인덱스(Destination Index) 레지스터로, 문자열 연산 등에서 결과 데이터를 저장할 메모리 주소를 담는 포인터로 사용된다.

4. 2. 2. 주소 레지스터

IA-32 아키텍처는 메모리를 관리하기 위해 다양한 주소 지정 방식을 사용해왔다. 많은 운영 체제에서는 '''플랫 메모리 모델'''을 채택하여 모든 세그먼트가 동일한 선형 주소 공간을 참조하도록 했다. 이 모델에서 각 프로세스는 32비트의 가상 주소 공간을 가지며, 이는 최대 4GiB의 메모리 공간에 해당한다.[5] 이 방식에서는 세그먼트 구분이 사실상 무시되어 논리 주소 공간 전체가 하나의 큰 덩어리처럼 취급된다.

P6 이후 프로세서에서는 물리 주소 확장(PAE) 기술이 도입되어, 32비트 아키텍처의 한계를 넘어 최대 64GiB의 물리 메모리를 사용할 수 있게 되었다. 하지만 개별 프로세스가 사용할 수 있는 가상 메모리 공간은 여전히 4GiB로 제한되었다. 이러한 제한은 대규모 메모리를 필요로 하는 인메모리 데이터베이스 같은 소프트웨어의 성능을 제약했으며, 이는 64비트 아키텍처로의 전환을 촉진하는 주요 원인이 되었다.[5]

이후 등장한 x64 아키텍처는 가상 주소 공간을 이론상 최대 256TB까지 확장하여 이러한 문제를 해결했다. 윈도우, 리눅스, FreeBSD, NetBSD, OpenBSD, 솔라리스 등 주요 운영 체제들이 x64를 지원하면서 대용량 메모리 활용이 가능해졌고, 32비트 환경에서 문제가 되었던 커널 공간 배치 문제도 해결되어 운영 체제의 확장성이 크게 향상되었다.[5] IA-32 프로세서 자체는 물리적으로 40비트 주소를 지원하여 특정 환경(예: 4-Way 이상 Xeon MP)에서는 칩셋 제약 하에 최대 1TB의 물리 메모리를 지원할 수도 있었으나, 일반적인 PC용 CPU나 2-Way Xeon DP에서는 물리 주소 버스가 36비트로 제한되어 물리 주소 공간은 64GB로 제한되었다.[5]

4. 2. 3. 부동 소수점 레지스터

IA-32는 초기에 8087, 80287, 80387과 같은 별도의 부동소수점 처리 장치(FPU, Floating-Point Unit)를 통해 부동소수점 연산을 지원했다. 하지만 80486 프로세서부터 부동소수점 연산 기능이 CPU 내부에 통합되면서, ST(0)부터 ST(7)까지 총 8개의 부동소수점 레지스터가 일반적으로 사용 가능하게 되었다.

이 레지스터들은 각각 80비트의 크기를 가지며, IEEE 754 표준의 확장 배정밀도(extended precision) 형식을 사용하여 높은 정밀도의 실수를 표현할 수 있다. 부동소수점 레지스터는 일반 레지스터처럼 직접 주소를 지정하여 접근할 수 없고, 스택 구조를 통해 접근한다. 레지스터 번호는 고정된 것이 아니라 스택의 상태에 따라 상대적으로 결정된다. 즉, ST(0)은 항상 스택의 가장 위에 있는 값을 가리키고, ST(1)은 그 바로 아래에 있는 값을 가리키는 방식이다. 모든 부동소수점 연산은 스택에서 필요한 만큼 값을 꺼내(pop) 연산을 수행한 뒤, 결과를 다시 스택에 넣는(push) 방식으로 이루어진다.

IA-32의 멀티미디어 확장 명령어 집합인 MMX와 3DNow!는 이 부동소수점 레지스터를 다른 용도로 활용한다. MMX는 MM0부터 MM7까지 8개의 64비트 레지스터를 정의하는데, 이들은 실제로는 기존 부동소수점 레지스터(ST(0)~ST(7))의 하위 64비트를 공유한다. 다만 MMX 레지스터는 스택 구조를 사용하지 않고 직접 번호로 접근한다는 차이가 있다. MMX 명령어는 하나의 레지스터를 8비트, 16비트, 32비트, 64비트 정수 여러 개로 나누어 처리하는 압축 자료형(packed data type) 연산을 지원한다.

MMX 레지스터와 부동소수점 레지스터는 물리적으로 동일한 공간을 사용하기 때문에, MMX 명령어를 사용하는 동안에는 부동소수점 연산을 동시에 수행할 수 없다. MMX 모드로 전환되면 부동소수점 레지스터의 상위 16비트(태그 필드)는 모두 1로 채워지는데, 이는 부동소수점 형식에서 NaN(Not a Number) 또는 무한대 값으로 해석된다. 이를 통해 운영체제나 프로그램은 현재 레지스터가 부동소수점 데이터를 담고 있는지 MMX 데이터를 담고 있는지 구분할 수 있다.

3DNow! 확장은 MMX를 정수 연산에서 부동소수점 연산으로 확장한 개념이다. MMX와 마찬가지로 MM0부터 MM7까지의 레지스터를 사용하며, 각 64비트 레지스터를 두 개의 32비트 단정밀도(single-precision) 부동소수점 값으로 취급하여 SIMD 연산을 수행한다. MMX와 마찬가지로 3DNow! 명령어를 사용하는 동안에도 부동소수점 연산은 불가능하다.

부동소수점 레지스터를 MMX 및 3DNow!와 공유하는 방식은 새로운 레지스터를 추가하지 않고 기능을 확장할 수 있다는 장점이 있었다. 특히 운영체제가 문맥 교환 시 저장하고 복원해야 하는 레지스터 상태의 크기가 늘어나지 않는다는 이점이 있었다. 하지만 부동소수점 연산과 MMX/3DNow! 연산을 동시에 사용할 수 없다는 단점 때문에 이후 SSE에서는 별도의 XMM 레지스터를 도입하게 된다.

4. 2. 4. MMX 레지스터

IA-32 아키텍처의 확장 기능인 MMX와 3DNow!는 기존의 부동소수점 레지스터를 다른 용도로 활용한다. 이는 새로운 레지스터를 추가하지 않아 상태 저장 등에서 기존 방식을 유지할 수 있다는 장점이 있지만, 부동소수점 연산과 MMX/3DNow! 연산을 동시에 수행할 수 없는 단점도 가진다.

MMX 확장에서는 MM0부터 MM7까지 총 8개의 64비트 레지스터가 도입되었다. 이 MMX 레지스터들은 실제로는 기존에 존재하던 부동소수점 레지스터들의 하위 64비트를 그대로 사용하는 것이다. 다만, 부동소수점 레지스터가 스택 방식으로 접근하여 레지스터 번호가 상대적인 것과 달리, MMX 레지스터는 직접 접근하며 MM0~MM7이라는 고정된 번호를 가진다.

MMX 레지스터는 64비트 크기를 가지지만, 하나의 레지스터를 명령어에 따라 8비트, 16비트, 32비트, 64비트 단위로 나누어 사용하는 압축 자료형(SIMD) 연산을 지원한다. 이는 주로 정수형 데이터의 병렬 처리에 사용된다.

MMX 레지스터와 부동소수점 레지스터는 물리적으로 동일한 공간을 공유하기 때문에 함께 사용할 수 없다. MMX 연산을 위해 레지스터를 사용할 경우, 해당 레지스터의 상위 16비트(부동소수점 레지스터의 지수부 해당 영역)는 모두 1로 채워진다. 이 값은 부동소수점 형식에서는 NaN(Not a Number) 또는 무한대로 해석되므로, 현재 레지스터가 부동소수점 데이터를 담고 있는지 MMX 데이터를 담고 있는지 시스템이 구분할 수 있게 해준다.

4. 2. 5. SSE 레지스터

MMX (명령어 집합)와 3DNow!는 기존의 부동소수점 레지스터를 공유하여 사용했기 때문에 레지스터 크기에 제한이 있었다. 이러한 한계를 극복하기 위해 SSE 확장이 도입되면서 부동소수점 레지스터를 사용하는 대신, XMM0부터 XMM7까지 총 8개의 새로운 128비트 레지스터가 추가되었다. 이 레지스터들은 SIMD(Single Instruction, Multiple Data) 연산을 위해 설계되었다.

SSE는 이 128비트 XMM 레지스터를 활용하여 32비트 단정밀도 부동소수점 실수 4개를 한 번에 처리할 수 있다. 초기 SSE는 배정밀도(64비트) 부동소수점 실수를 다루지 못했지만, 이후 등장한 SSE2 확장에서는 배정밀도 부동소수점 실수 2개를 동시에 처리하는 명령들이 추가되어 기능이 향상되었다.

한편, AMD64 아키텍처에서는 SSE 레지스터가 XMM0부터 XMM15까지 총 16개로 더욱 확장되어 더 많은 데이터를 동시에 처리할 수 있게 되었다. 인텔은 SSE 확장을 도입하면서 새로운 레지스터들의 상태를 저장하고 관리하기 위한 명령들을 추가했으며, 기존 시스템과의 호환성을 유지하면서 SSE 기능을 지원하기 위해 보호 모드와 유사한 강화 모드(enhanced mode)를 도입했다.

4. 3. 명령어 집합

IA-32는 8086과의 호환성을 유지하면서 확장을 거듭해 온 명령어 집합 아키텍처이다. 이 때문에 명령어 포맷에 여러 가지 변형이 있는 가변 길이 명령어 집합(CISC)의 특징을 가진다. 자주 사용되는 명령어의 대부분이 1바이트로 표현될 수 있어, 일반적인 RISC의 4바이트 고정 길이 명령어에 비해 코드 밀도가 높다.

코드 밀도가 높다는 것은 한 번의 메모리 접근으로 더 많은 명령어를 가져올 수 있다는 장점이 있다. 예를 들어, 386에서는 최대 4개의 명령어, 펜티엄에서는 최대 8개의 명령어를 동시에 가져올 수 있었다. 이는 명령어 읽기에 필요한 메모리 대역폭을 줄여주며, 여러 개의 연산 파이프라인을 갖춘 슈퍼스칼라 구조에서 IPC(명령어당 클럭 수)를 향상시키는 데 기여한다.

또한, IA-32에는 하나의 명령어로 복잡한 동작을 수행하는 명령어들도 포함되어 있다. 인텔에서 제공하는 참조 매뉴얼에 기재된 의사 코드 중에는 if문이 3개나 등장할 정도로 매우 복잡한 명령어도 존재한다. 이러한 명령어들은 단일 명령어로 여러 처리를 일괄적으로 수행하기 때문에, 고속으로 동작하는 마이크로코드로 실행될 경우 특정 처리에 필요한 시간을 단축하는 효과가 있었다.

초기에는 이러한 복잡한 명령어 집합이나 복잡한 명령어를 와이어드 로직으로 실행하기 어렵다고 여겨졌지만, 인텔은 486에서 일부 복잡한 명령어를 제외하고 와이어드 로직으로 구현했다. 그러나 펜티엄의 P5 마이크로아키텍처에서 슈퍼스칼라를 채택하면서, 앞뒤 명령어의 의존 관계를 확인해야 하는 요구가 더해져 디코더의 복잡성이 더욱 증가했고, 마이크로코드를 완전히 제거하는 것은 어려웠다.

P6 마이크로아키텍처에서는 이러한 문제를 해결하기 위해 새로운 접근 방식을 도입했다. 복잡한 IA-32 명령어를 내부적으로 여러 개의 간단한 RISC와 유사한 명령어(마이크로 옵스, micro-ops)로 변환하여 내부 RISC 코어에서 실행하도록 한 것이다. 이 방식은 RISC의 단점인 낮은 코드 밀도와 복잡한 명령어 실행의 어려움을 극복하면서도, 기존 IA-32 소프트웨어 자원을 그대로 활용하면서 새로운 세대의 프로세서를 개발하는 것을 가능하게 했다. 이 아이디어는 인텔이 처음 고안한 것은 아니며, x86 호환 프로세서 중에서는 AMD에 인수된 NexGen의 Nx586이 먼저 시도했고, 인텔은 이 아이디어를 P6 마이크로아키텍처 개발에 활용했다.

이후 P6의 개념은 명령어 발행부와 명령어 실행부를 분리한 넷버스트 마이크로아키텍처로 더욱 발전했다. 그러나 넷버스트는 파이프라인을 세분화하여 동작 주파수를 높이는 방식으로 성능을 향상시키려 했기 때문에, 소비 전력이 크게 증가하는 단점이 있었다. 결국 소비 전력 문제로 인해, 동작 주파수를 높이는 대신 1클럭당 더 많은 처리를 하는 방향으로 전환하여 소비 전력을 억제한 코어 마이크로아키텍처로 이행하게 되었다.

IA-32 아키텍처에는 데이터 병렬 처리를 위한 SIMD 확장 명령어들도 꾸준히 도입되었다. P5 마이크로아키텍처에서는 MMX가, P6 마이크로아키텍처에서는 SSE(SSE1)가 도입되었으며, 넷버스트 마이크로아키텍처에서는 SSE2가 도입되어 동영상 스트리밍 처리 능력이 강화되었다.

5. 64비트 확장

IA-32는 멀티미디어 관련 명령들을 추가하며 발전해 왔지만, 32비트 환경만을 지원하는 한계를 가지고 있었다. 이러한 IA-32를 64비트 환경에서 사용할 수 있도록 확장하려는 시도로 여러 아키텍처가 등장했다.

인텔1990년대 후반, 기존 x86 아키텍처의 한계를 극복하고자 HP와 협력하여 완전히 새로운 64비트 아키텍처인 IA-64를 개발했다. IA-64는 이트애니엄 프로세서에 적용되었으나, 기존 IA-32와의 호환성이 부족하여 시장에서 널리 받아들여지지는 못했다. 인텔은 IA-64를 발표하면서 기존의 32비트 x86 아키텍처를 IA-32라고 명명했다.

한편, 시장에서는 기존 IA-32와의 호환성을 유지하면서 64비트로 확장할 수 있는 아키텍처에 대한 요구가 높았다. 이러한 배경 속에서 AMD가 먼저 IA-32와 호환되는 64비트 확장 아키텍처인 AMD64(초기 명칭 x86-64)를 발표했다. 이는 과거 16비트 8086 아키텍처가 32비트 80386으로 확장된 것처럼, 하위 호환성을 유지하는 방식으로 설계되었다.

AMD64가 시장의 호응을 얻자, 마이크로소프트를 비롯한 업계의 요구에 따라 인텔 역시 AMD64와 호환되는 64비트 확장 기술인 Intel 64(초기에는 IA-32e, EM64T 등으로 불림)를 발표하게 되었다. 마이크로소프트는 AMD64와 Intel 64 등 IA-32 기반의 64비트 확장을 포괄하는 중립적인 용어로 x64를 제안했으며, 이 용어가 현재 널리 사용되고 있다.

결과적으로 IA-32의 64비트 확장은 크게 비호환 아키텍처인 IA-64와 호환 아키텍처인 x64(AMD64, Intel 64)로 나뉘었으며, 현재 개인용 컴퓨터 및 서버 시장에서는 x64 아키텍처가 주류로 자리 잡았다.

5. 1. IA-64

인텔의 IA-64 아키텍처는 이름은 유사하지만 IA-32와 호환되지 않는 완전히 새로운 아키텍처로, 아이테니엄 계열 프로세서에서 사용되었다. IA-64는 비순차적 실행(out-of-order execution) 대신 VLIW(Very Long Instruction Word) 디자인을 채택하였다. 아이테니엄 프로세서는 하드웨어적으로 IA-32를 지원하기는 하지만, IA-64와 IA-32 간의 명령어가 호환되지 않기 때문에 IA-32 명령어를 실행할 때 상당히 느린 속도를 보였다.

2006년을 기준으로 VLIW 아키텍처는 컴파일러의 지원이 부족하여 소프트웨어 개발이 어렵다는 평가를 받았다. 예를 들어, GCC 컴파일러의 중간 언어인 RTL(Register Transfer Language)은 VLIW 환경에서 매우 느리게 작동하는 문제가 있었다.

5. 2. AMD64 (x86-64)

IA-32를 64비트 환경에서 사용할 수 있도록 확장한 아키텍처 중 하나로 AMD의 AMD64(또는 x86-64)가 있다. AMD64는 IA-32와 대부분 호환성을 유지하면서 64비트 기반으로 전환한 아키텍처이다. 이 과정에서 기존 IA-32가 지원하던 16비트 관련 기능 상당수를 제거했으며, 일반 레지스터를 특정 용도에 국한하지 않고 자유롭게 사용할 수 있도록 개선했다. 또한, 대부분의 세그먼트 레지스터를 없앴으나, 윈도와의 호환성을 위해 FS와 GS 레지스터는 남겨두었다. 일반 레지스터와 SSE 레지스터의 수도 각각 8개에서 16개로 두 배 늘렸다.

5. 3. Intel 64 (EM64T)

기존 IA-32는 멀티미디어 관련 명령어를 추가하며 발전했지만, 32비트 환경만을 지원하는 한계가 있었다. 이를 64비트 환경에서 사용할 수 있도록 확장하려는 시도로 인텔의 IA-64와 AMD의 AMD64 등이 등장했다. 마이크로소프트는 이러한 IA-32의 64비트 확장을 통칭하는 업체 중립적인 이름으로 x64를 제안하여 사용하고 있다.

2004년 2월, 인텔은 EM64T라는 이름의 새로운 명령 집합을 발표했다. EM64T는 AMD의 AMD64를 인텔이 구현한 것으로, AMD64와 대부분 호환되지만 일부 기능은 지원하지 않는 차이가 있다. 인텔은 2004년 하반기부터 제온 프로세서에 EM64T를 적용하기 시작했으며, 일반 소비자용 데스크톱 시장에서는 2005년 초부터 펜티엄 4 프로세서에 이 기술을 도입했다.

6. 마이크로아키텍처 목록


  • 80386
  • 486
  • P5: 펜티엄 등.
  • P6: P6 마이크로아키텍처. 펜티엄 프로, 펜티엄 II, 펜티엄 III 및 이에서 파생된 셀러론, 제온 등이 포함된다.
  • NetBurst: 넷버스트 마이크로아키텍처. 펜티엄 4, 펜티엄 D 등이 있으며, 이 마이크로아키텍처 기반 프로세서부터 Intel 64가 확장되었다.

7. 메모리 탑재의 한계와 극복

IA-32 아키텍처는 32비트 주소 체계를 기반으로 하여, 많은 운영체제가 채택한 '''플랫 메모리 모델''' 하에서는 프로세스당 최대 4GiB의 가상 메모리 공간만을 제공하는 근본적인 한계를 가지고 있었다. 물리 주소 확장(PAE) 기술이 도입되어 시스템이 인식하고 사용할 수 있는 물리 메모리의 총량은 최대 64GiB까지 늘어났지만, 개별 프로세스가 직접 접근할 수 있는 가상 메모리 공간은 여전히 4GiB로 제한되었다. 이러한 제약은 특히 인메모리 데이터베이스와 같이 대규모 메모리를 필요로 하는 애플리케이션 환경에서 심각한 문제점으로 부각되었고, 64비트 컴퓨팅 환경으로의 전환 필요성을 높이는 주요 원인이 되었다.

물리적인 메모리 용량을 늘리는 과정에서도 기술적인 어려움이 따랐다. 당시 주로 사용되던 DDR SDRAM 기술은 전기적인 신호 문제로 인해 하나의 메모리 채널에 연결할 수 있는 DIMM 모듈 수가 제한적이었다. 또한, 메모리 모듈과 칩셋을 연결하는 데 많은 수의 핀이 필요했기 때문에 마더보드 설계가 복잡해지고 제조 비용이 증가하는 문제도 있었다.

이러한 물리적, 기술적 한계를 극복하기 위한 시도로 FBDIMM(Fully Buffered DIMM) 기술이 제안되기도 했다. FBDIMM은 핀 수를 줄여 다채널 구성과 채널당 DIMM 수를 늘리는 것을 목표로 했지만, 컨트롤러의 발열, 소비 전력 증가, 그리고 메모리 접근 지연 시간(레이턴시) 증가와 같은 새로운 문제점으로 인해 널리 채택되지 못했다.

결국 IA-32 시대의 메모리 탑재 한계는 x64 아키텍처로의 전환을 통해 가상 주소 공간의 제약을 근본적으로 해결하고, 이후 네할렘 마이크로아키텍처부터 메모리 컨트롤러를 CPU 내부에 통합하는 설계 변경을 통해 메모리 접근 효율성을 높이는 방향으로 해결되었다. 이는 더 많은 메모리를 효율적으로 사용할 수 있는 길을 열었으며, 이후 지속적인 메모리 기술 발전의 토대를 마련했다.

7. 1. IA-32의 한계

IA-32는 메모리 관리 모델로 실제 모드(real mode)와 보호 모드(protected mode) 두 가지를 지원한다. 실제 모드에서는 1MB의 메모리만 접근할 수 있지만, 보호 모드에서는 전체 메모리에 접근이 가능하다. 많은 x86용 운영 체제에서 사용된 '''플랫 메모리 모델'''에서는 모든 세그먼트 선택자가 동일한 선형 주소 공간을 참조하여, 프로세스당 32비트의 가상 주소 공간, 즉 최대 4GiB의 메모리 공간만 사용할 수 있었다. 이 모델에서는 세그먼트에 의한 구분이 사실상 무시되었다.

P6 마이크로아키텍처 이후의 프로세서에서는 물리 주소 확장(PAE) 기능이 도입되어 최대 64GiB의 물리 메모리를 사용할 수 있게 되었지만, 개별 사용자 프로세스가 다룰 수 있는 가상 메모리 공간은 여전히 4GiB로 제한되었다. 이러한 제약은 특히 인메모리 데이터베이스와 같이 대규모 메모리 공간을 필요로 하는 소프트웨어에서 64비트 아키텍처로의 전환 요구를 강하게 만들었다.

x64 아키텍처의 등장은 이러한 한계를 극복하는 계기가 되었다. x64는 설계상 가상 주소 공간을 최대 256TB까지 선형으로 접근할 수 있게 확장했으며, Windows, NetBSD, FreeBSD, OpenBSD, 리눅스, 솔라리스 등 주요 운영 체제들이 이를 지원했다. 또한, 32비트 아키텍처에서 운영 체제의 확장성을 제한했던 커널 공간 배치 문제도 해결되었다.

IA-32 프로세서 자체의 물리 메모리 지원 능력에도 한계가 있었다. 이론적으로는 40비트 주소 지정을 통해 최대 1TB의 물리 메모리를 지원할 수 있었으나, 이는 주로 4-Way 이상을 지원하는 고성능 Xeon MP 시스템에서 칩셋 등의 제약을 받으며 가능한 수준이었다. 일반적인 Xeon DP(최대 2-Way)나 PC용 저가형 CPU에서는 물리 주소 버스가 36비트로 제한되어 실제 물리 주소 공간은 64GB에 불과했다. 이는 당시의 현실적인 물리 메모리 탑재량을 기준으로 결정된 사양이었다.

메모리 용량을 늘리는 데에도 기술적인 어려움이 따랐다. 고속 DDR SDRAM의 경우, 전기적 제약으로 인해 한 채널당 연결 가능한 DIMM 수가 약 4개로 제한되었으며, 이후 DDR3 SDRAM에서는 채널당 1개로 줄이는 방안까지 검토되었다. 메모리 용량 확대를 위해서는 다채널 구성이 필수적이었지만, 기존 DIMM은 채널당 약 150개의 핀(신호/GND 포함)을 필요로 하여 칩셋의 부담을 늘리고 비용 상승의 원인이 되었다.

이 문제를 해결하기 위해 인텔은 핀 수를 줄인 고속 인터페이스를 갖춘 FBDIMM(Fully Buffered DIMM)을 표준화했다. 2006년부터 FBDIMM 생산 및 관련 서버가 출시되었고, 기존 절반 이하의 핀 수로 다채널화가 가능하며 채널당 8개의 DIMM을 지원하여 물리 메모리 탑재량 증가가 기대되었다. 하지만 FBDIMM은 DIMM 기판의 컨트롤러(AMB)에서 발생하는 발열과 소비 전력 문제, 채널당 모듈 수가 늘어날수록 메모리 접근 지연 시간(레이턴시)이 증가하는 성능 저하 문제에 직면했다. 레이턴시 증가는 CPU 캐시나 파이프라인으로 어느 정도 완화될 수 있었지만, 대규모 데이터를 다루는 데이터베이스 등에서는 효과가 제한적이었다. 게다가 DDR3 메모리가 표준화되면서 채널당 DIMM 수가 최대 2개로 제한되고, FBDIMM의 라이선스 비용 문제(램버스 특허)까지 겹치면서 FBDIMM은 널리 채택되지 못했다.

결국 인텔은 2006년 이후 방향을 전환하여, Nehalem 마이크로아키텍처부터 AMD의 옵테론과 같이 메모리 컨트롤러를 CPU에 내장하고 일반 DIMM을 사용하도록 설계했다. 이 방식은 CPU 소켓 수 증가에 따라 DIMM 소켓 수도 함께 늘릴 수 있는 확장성을 제공하고, CPU와 칩셋(MCH) 간 통신 지연을 줄여[6] Nehalem 세대 Xeon은 이전 Core 마이크로아키텍처 세대 Xeon보다 메모리 접근 레이턴시를 개선했다.[5] 이는 IA-32 아키텍처의 메모리 관련 한계를 극복하고 이후 메모리 기술 발전의 토대를 마련하는 중요한 변화였다.

7. 2. 64비트 아키텍처로의 전환

IA-32는 멀티미디어 관련 명령들을 추가하며 발전해 왔지만, 근본적으로 32비트 환경만을 지원한다는 한계를 가지고 있었다. 특히 많은 x86 운영체제에서 채택한 '''플랫 메모리 모델'''에서는 프로세스당 사용할 수 있는 가상 주소 공간이 최대 4GiB로 제한되었다. 이는 논리 주소 공간 전체가 하나의 평탄한 공간으로 취급되어 세그먼트 구분이 사실상 무시되는 방식이다.

인텔의 P6 마이크로아키텍처 이후 프로세서에서는 물리 주소 확장(PAE) 기술을 통해 최대 64GiB의 물리 메모리를 사용할 수 있게 되었지만, 개별 사용자 프로세스가 다룰 수 있는 가상 메모리 공간은 여전히 4GiB에 머물렀다. 이 때문에 인메모리 데이터베이스와 같이 대규모 메모리 공간을 필요로 하는 소프트웨어 분야에서는 64비트 아키텍처로의 전환 요구가 강하게 제기되었다.

이에 따라 IA-32를 64비트 환경에서 사용할 수 있도록 하는 여러 확장 기술이 등장했다. 인텔은 IA-64 아키텍처를 개발했지만, 시장에서 널리 받아들여진 것은 AMD가 개발한 AMD64였다. 마이크로소프트는 업체 중립적인 용어로 x64를 제안하여 사용하고 있다.

x64 아키텍처는 가상 주소 공간을 이론상 256TB까지 선형적으로 접근할 수 있도록 확장했으며, 마이크로소프트 윈도우, NetBSD, FreeBSD, OpenBSD, 리눅스, 솔라리스 등 주요 운영체제들이 이를 지원하게 되었다. 또한, 32비트 아키텍처에서 운영체제의 확장성을 제한했던 커널 공간 배치 문제도 x64에서는 해결되었다.

물리 메모리 확장 측면에서도 변화가 있었다. 기존 IA-32 프로세서는 물리적으로 40비트 주소(최대 1TB)를 지원할 수 있었으나, 칩셋 제약이나 저가형 CPU의 36비트 주소 버스 제한(최대 64GB) 등으로 인해 실제 사용 가능한 물리 메모리 크기는 제한적이었다. 고속 DDR SDRAM의 등장 이후에는 전기적 제약으로 인해 메모리 채널당 장착 가능한 DIMM 수가 4개 정도로 한정되었고, 차세대 메모리 규격에서는 이 수가 더 줄어들 가능성도 제기되었다. 메모리 용량을 늘리기 위해서는 다채널 구성이 필수적이었지만, 기존 DIMM 방식은 채널당 핀 수가 많아 칩셋 설계 부담과 비용 증가를 유발했다.

이 문제를 해결하기 위해 인텔은 핀 수를 줄인 고속 인터페이스를 가진 FBDIMM(Fully Buffered DIMM)을 표준화했다. 2006년 DRAM 업체들이 FBDIMM 생산을 시작하고 관련 서버 제품도 출시되면서, 서버의 물리 메모리 탑재량이 크게 증가할 것으로 기대되었다. FBDIMM은 기존 방식보다 적은 핀 수로 다채널 구성이 가능하고 채널당 최대 8개의 DIMM을 지원할 수 있었다.

그러나 FBDIMM은 DIMM 기판에 탑재된 컨트롤러(AMB)의 발열과 소비 전력이 크고, 채널당 모듈 수가 늘어나면 메모리 접근 지연 시간(레이턴시)이 증가하여 성능이 저하되는 문제가 있었다. 또한, DDR3 메모리가 표준화되면서 채널당 DIMM 수가 최대 2개로 제한되고, 램버스 특허 관련 라이선스 비용 문제까지 겹치면서 FBDIMM을 적극적으로 채택할 유인이 줄어들었다.

결국 인텔은 2006년 이후 Nehalem 마이크로아키텍처 기반 CPU부터 AMD의 옵테론과 유사하게 메모리 컨트롤러를 CPU 내부에 통합하는 방식으로 전환했다. 이를 통해 일반적인 DIMM을 사용하면서도 확장 가능한 메모리 아키텍처를 구현할 수 있게 되었다.[5] 이 방식은 CPU와 메모리 컨트롤러 칩셋 간 통신으로 인한 레이턴시를 줄이는 효과도 가져왔다.[6] Nehalem 아키텍처 기반 Xeon 프로세서는 이전 세대보다 낮은 메모리 접근 레이턴시를 보여주었다.

이후 메모리 기술은 DDR4, DDR5로 발전하며 데이터 전송 속도, 용량, 전력 효율성이 지속적으로 향상되었다. 또한, NUMA(Non-Uniform Memory Access) 기술의 발전과 옵테인 메모리, Z-NAND 등 새로운 비휘발성 메모리의 등장은 64비트 환경에서의 대규모 데이터 처리 능력을 더욱 향상시키는 데 기여하고 있다. 이러한 기술 발전은 서버 및 고성능 컴퓨팅 분야에서 더 빠르고 효율적인 데이터 처리와 분석을 가능하게 만들고 있다.

7. 3. 메모리 기술의 발전

많은 x86용 운영 체제에서 채택된 '''플랫 메모리 모델'''에서는 모든 세그먼트 선택자가 동일한 선형 주소 공간을 참조한다. 이 모델에서 각 프로세스는 32비트의 가상 주소 공간을 가지며, 이는 프로세스당 4GiB의 메모리 공간을 의미한다. 즉, 논리 주소 공간 전체가 평탄하게 구성되어 세그먼트에 의한 구분은 사실상 무시된다.

P6 이후 프로세서에서는 물리 주소 확장(PAE) 기술이 도입되어 최대 64GiB의 물리 메모리에 페이지를 할당할 수 있게 되었다. 하지만 사용자 프로세스가 직접 다룰 수 있는 가상 메모리 공간은 여전히 4GiB로 제한되었다. 이러한 한계 때문에 인메모리 데이터베이스처럼 대규모 메모리 공간을 요구하는 소프트웨어 분야에서 64비트 아키텍처에 대한 필요성이 강하게 제기되었다.

x64 아키텍처가 등장하면서 가상 주소 공간은 설계상 최대 256TB까지 선형적으로 접근 가능하도록 확장되었다. Windows, NetBSD, FreeBSD, OpenBSD, 리눅스, 솔라리스 등의 주요 운영 체제들이 이를 지원하게 되었다. 이와 함께 32비트 아키텍처에서 운영 체제의 확장성을 크게 제한했던 커널 공간 배치 문제도 해결되었다.

IA-32 프로세서는 물리적으로 40비트 주소를 지원하므로 이론적으로 더 큰 물리 메모리를 다룰 수 있다. 특히 4-Way 이상을 지원하는 제온 MP 시스템에서는 MCH 같은 칩셋 제약이 있지만, 최대 1TB의 물리 메모리를 지원할 수 있다. 하지만 2-Way까지만 지원하는 Xeon DP나 일반 PC용 저가형 CPU는 물리 주소 버스가 36비트로 제한되어 물리 주소 공간이 64GB로 한정된다. 이는 당시의 현실적인 물리 메모리 탑재량을 고려하여 결정된 사양이다.

고속 DDR SDRAM의 경우, 전기적 제약으로 인해 한 채널당 구현 가능한 DIMM 수는 약 4개 정도가 한계로 여겨졌다. 심지어 차세대 DDR SDRAM(이후 DDR3 SDRAM)에서는 채널당 DIMM 수를 1개로 줄이는 방안까지 검토되었다. 따라서 메모리 탑재량을 늘리기 위해서는 다채널 대응이 필수적이었다. 하지만 기존 DIMM은 채널당 약 150개의 핀(신호선 및 접지 포함)이 필요해 MCH 등 칩셋에 부담을 주었고, 핀 수 증가는 비용 상승으로 직결되었다. 이 문제를 해결하기 위해 인텔은 핀 수를 줄인 고속 인터페이스를 가진 FBDIMM(Fully Buffered DIMM)을 표준화했다. 2006년부터 DRAM 제조사들이 FBDIMM 생산을 시작했으며, 이를 지원하는 서버도 출시되었다. FBDIMM은 기존 절반 이하의 핀 수로 다채널화가 가능하고 채널당 8개의 DIMM을 지원하므로, 서버의 물리 메모리 탑재량을 크게 늘릴 수 있을 것으로 기대되었다.

그러나 FBDIMM에는 몇 가지 단점이 있었다. DIMM 기판에 탑재된 고속 인터페이스 컨트롤러(AMB)는 발열과 소비 전력이 컸고, 채널당 모듈 수가 증가하면 메모리 접근 레이턴시가 늘어나 성능이 저하되는 문제도 있었다. 레이턴시 증가는 일반적으로 CPU 내장 캐시 메모리 증량이나 명령어 처리의 다단 파이프라인화로 어느 정도 완화될 수 있었지만, 데이터베이스처럼 거대한 데이터를 다루는 애플리케이션에서는 효과가 제한적이었다. 게다가 DDR3 메모리가 표준화되면서 채널당 DIMM 수가 최대 2개로 제한되었고, 램버스 특허 관련 라이선스 비용 문제까지 겹치면서 제조사들이 FBDIMM을 적극적으로 채택할 이유가 줄어들었다.

결국 인텔은 2006년 이후 FBDIMM 정책에서 방향을 전환했다. 네할렘 마이크로아키텍처를 채용한 CPU부터는 AMD옵테론처럼 메모리 컨트롤러를 CPU에 내장하고 일반 DIMM을 사용할 수 있도록 설계 방향을 바꾸었다. 이 방식 덕분에 서버에서 CPU 소켓 수 증가와 함께 DIMM 소켓 수도 늘릴 수 있는 확장 가능한 아키텍처가 가능해졌다.[5] 또한 CPU와 MCH 간 통신으로 인한 레이턴시도 줄였다.[6] 결과적으로 네할렘 마이크로아키텍처 기반 Xeon은 이전 세대인 코어 마이크로아키텍처 기반 Xeon보다 더 낮은 레이턴시로 메모리에 접근할 수 있게 되었다.

네할렘 아키텍처 이후 메모리 기술은 계속해서 발전했다. 2014년에는 DDR4 메모리가 등장해 DDR3 대비 데이터 전송 속도와 전력 효율이 향상되었다. DDR4는 최대 3.2GT/s의 데이터 전송률을 지원하고 동작 전압은 1.2V로 낮춰 에너지 효율을 높였다. 이는 특히 서버 및 데이터 센터 환경에서 중요한 개선점이었다.

2019년 DDR5 메모리가 공식 표준화되었고, 2021년부터 시장에 보급되기 시작했다. DDR5는 DDR4의 두 배에 달하는 최대 6.4GT/s의 데이터 전송률을 지원하며 모듈당 메모리 용량도 크게 늘릴 수 있게 되었다. 동작 전압은 1.1V로 더 낮아져 전력 소모를 줄였다. 또한 DDR5 모듈은 각각 2개의 독립적인 32비트 서브 채널을 가져 메모리 접근 효율성을 높이고 더 높은 대역폭을 제공한다.

메모리 아키텍처 측면에서도 진화가 계속되고 있다. 인텔과 AMD는 캐시 일관성과 NUMA(Non-Uniform Memory Access) 지원을 강화해 멀티 소켓 환경에서의 메모리 접근 효율을 높이고 있다. 예를 들어 AMD의 EPYC 프로세서는 많은 메모리 채널을 제공하여 병렬 처리 위주의 워크로드에서 뛰어난 메모리 성능을 보여준다. 인텔의 아이스레이크 및 사파이어 래피즈 세대 Xeon 프로세서 역시 DDR5와 PCIe 5.0을 지원하여 차세대 고속 데이터 전송을 가능하게 한다.

더 나아가 메모리와 스토리지의 경계를 허무는 기술로 인텔 옵테인 메모리나 삼성의 Z-NAND 같은 새로운 비휘발성 메모리 기술이 등장했다. 이 기술들은 기존 DRAM보다 느리지만 데이터 영속성을 가지면서 비교적 빠른 접근 속도를 제공한다. 특히 인텔 옵테인 퍼시스턴트 메모리(Optane Persistent Memory)는 대용량 메모리가 필요한 워크로드에서 비용 효율적으로 메모리 용량을 확장하는 수단으로 주목받고 있다.

종합적으로 지난 15년간 메모리 기술은 DDR4에서 DDR5로의 전환, NUMA 아키텍처 강화, 비휘발성 메모리 등장 등 비약적인 발전을 이루었다. 이러한 기술 혁신은 시스템 전체의 성능과 효율을 높여 서버 및 고성능 컴퓨팅 분야에서 더 대규모의 데이터 처리와 실시간 분석을 가능하게 하고 있다.

참조

[1] 웹사이트 Intel 64 and IA-32 Architectures Software Developer's Manual http://www.intel.com[...] Intel Corporation 2014-09-00
[2] 웹사이트 Windows 10 System Requirements & Specifications Microsoft https://www.microsof[...] 2018-08-20
[3] 웹사이트 Windows Server 2008 'The Last 32-bit Operating System' https://betanews.com[...] 2007-05-16
[4] 웹사이트 Debian GNU/Linux on x86 Machines https://www.debian.o[...]
[5] 문서 Xeon 7500 시리즈 등 일부 대규모 서버에서의 Registered DDR3 DIMM 연결 구성
[6] 문서 다른 CPU에 연결된 메모리 접근 시의 레이턴시



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com