X86
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
x86은 1978년 인텔 8086 프로세서 출시 이후 발전해 온 일련의 명령어 집합 아키텍처를 의미한다. x86은 16비트, 32비트, 64비트 시대를 거치며 개인용 컴퓨터, 서버, 임베디드 시스템 등 다양한 분야에서 널리 사용된다. 주요 특징으로는 가변 길이 명령어 형식, CISC 설계, 리틀 엔디안 바이트 순서, 메모리 주소 지정 방식 등이 있으며, SIMD 명령어 집합을 통해 멀티미디어 처리 성능을 향상시켰다. 현재는 명령어 파이프라인, 슈퍼스칼라, 아웃 오브 오더 실행, 추측 실행 등의 기술을 통해 성능을 향상시키고 있으며, 인텔과 AMD가 x86 프로세서 시장을 주도하고 있다.
더 읽어볼만한 페이지
- IBM PC 호환기종 - EISA
EISA는 1988년 컴팩을 중심으로 한 PC 제조업체 컨소시엄이 IBM의 MCA에 대항하기 위해 개발한 32비트 PC 버스 표준으로, ISA 버스와의 호환성을 유지하면서 고급 기능을 제공하고 특허 및 라이선스 정책에서 자유로워 업계의 지지를 얻으며 PC 버스 기술 발전에 기여했다. - IBM PC 호환기종 - CP/M-86
디지털 리서치가 개발한 16비트 운영 체제 CP/M-86은 인텔 8086 프로세서용으로 설계된 CP/M-80의 후속작이었으나 MS-DOS에 밀려 널리 사용되지 못했고, 다양한 버전과 간지 CP/M-86도 존재했으며, 1990년대 후반에 오픈 소스화되었다. - 명령어 집합 구조 - ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다. - 명령어 집합 구조 - PA-RISC
PA-RISC는 휴렛 팩커드에서 개발한 RISC 기반 명령어 집합 아키텍처로, HP 서버 및 워크스테이션에 사용되었으며 대용량 L1 캐시와 SIMD 명령어 확장 등의 특징을 가졌으나 아이테니엄 아키텍처로의 전환으로 단종되었다. - 인텔 제품 - 센트리노
센트리노는 초기 노트북 플랫폼에서 프로세서, 칩셋, 무선랜 모듈 결합체로 시작하여 코어 듀오, 코어 2 듀오 등을 지원하며 발전했고, 2010년부터는 인텔의 무선 LAN 모듈 브랜드로 재정의되어 Wi-Fi 및 WiMAX 어댑터 제품군을 지칭한다. - 인텔 제품 - 3D XPoint
3D XPoint는 인텔과 마이크론이 개발한 비휘발성 메모리 기술로, 전기 저항을 사용하여 데이터를 저장하며 높은 속도와 내구성을 특징으로 하지만, 현재는 개발이 중단되었다.
| X86 | |
|---|---|
| 개요 | |
| 설계자 | 인텔, AMD |
| 비트 수 | 16비트, 32비트, 64비트 |
| 발표 연도 | 1978년 (16비트), 1985년 (32비트), 2003년 (64비트) |
| 설계 방식 | CISC |
| 종류 | 레지스터-메모리 |
| 인코딩 | 가변 (1 ~ 15 바이트) |
| 분기 | 조건 코드 |
| 엔디언 | 리틀 엔디언 |
| 페이지 크기 | 8086–286: 없음 386, 486: 4KB 페이지 펜티엄: 4MB 페이지 추가 (레거시 PAE: 4KB→2MB) x86-64: 1GB 페이지 추가 |
| 확장 기능 | x87 IA-32 x86-64 MMX 3DNow! SSE MCA ACPI SSE2 NX 비트 SMT SSE3 SSSE3 SSE4 SSE4.2 AES-NI CLMUL SM3 SM4 RDRAND SHA MPX SME SGX XOP F16C ADX BMI FMA AVX AVX2 AVX-VNNI AVX512 AVX10 AMX VT-x VT-d AMD-V AMD-Vi TSX ASF TXT APX |
| 개방 여부 | 부분적으로 개방. 일부 고급 기능의 경우 인텔의 라이선스가 필요할 수 있으며, x86-64는 AMD의 추가 라이선스가 필요할 수 있음. 펜티엄 프로 프로세서 (및 넷버스트)는 시장에 출시된 지 21년이 넘었으므로 특허 주장의 대상이 될 수 없음. 따라서 x86 아키텍처의 i686 하위 집합은 완전히 개방됨. 옵테론 1000 시리즈 프로세서는 시장에 출시된 지 21년이 넘었으므로 특허 주장의 대상이 될 수 없음. 따라서 x86 아키텍처의 AMD K8 하위 집합은 완전히 개방됨. |
| 범용 레지스터 | 16비트: 6개 (일부 기능 제한 레지스터) + BP, SP 32비트: 8개 (GPR, EBP, ESP 포함) 64비트: 16개 (GPR, RBP, RSP 포함) |
| 부동 소수점 레지스터 | 16비트: 선택 사항으로 분리된 x87 FPU 32비트: 선택 사항으로 분리 또는 통합된 x87 FPU, 후기 프로세서에 통합된 SSE 장치 64비트: 통합된 x87 및 SSE2 장치, 후기 구현은 AVX2 및 AVX512로 확장됨 |
2. 역사적 배경
1978년 인텔이 8086을 출시하면서 x86 아키텍처의 역사가 시작되었다. 8086은 8080과 바이너리 호환성은 없었지만, 어셈블리어 소스 코드는 큰 수정 없이 이식할 수 있도록 설계되었다. 8086은 1MiB의 메모리 공간과 I/O 공간을 지원했다. 1979년에는 외부 데이터 버스를 8비트로 줄인 8088이 출시되었다.[65]
1982년, IBM은 8088을 채택한 IBM PC를 출시했고, 이는 x86이 PC 시장에서 사실상의 표준으로 자리 잡는 계기가 되었다. 같은 해 80186과 80286도 발표되었으며, 80286은 보호 모드와 24비트 (16MiB) 주소 공간을 제공했다. 그러나 당시에는 PC-DOS 환경에서 "더 빠른 8086"으로 주로 사용되었다.
1985년에는 32비트 80386 (i386)이 출시되면서 IA-32 아키텍처가 탄생했다. 80386은 가상 86 모드를 통해 기존 8086 프로그램을 가상화하여 실행할 수 있었으며, 컴팩이 최초로 80386 탑재 PC를 출시했다.
이후 486, 펜티엄으로 이어지면서 성능이 향상되었고, MMX 펜티엄부터 벡터 계산 기능이 추가되었다. 64비트 확장에서는 AMD가 제안한 x64 아키텍처를 인텔이 채택하는 우여곡절을 겪기도 했다.
인텔은 iAPX 432, i860, i960, IA-64 등 혁신적인 아키텍처로 x86을 대체하려 했으나 모두 실패했다. 결과적으로 x86은 확장을 거듭하며 현재까지 인텔의 주력 아키텍처로 남아있다.
x86 프로세서는 다양한 제조사에서 다양한 제품을 출시했다. 인텔은 세컨드 소스 정책을 통해 호환 제품 생산을 장려하기도 했지만, NEC의 V30과 같이 독자적인 호환 제품에 대해서는 저작권 소송을 제기하기도 했다.
x86 프로세서의 역사적 배경을 요약하면 다음과 같다.
| 시대 | 출시 | 주요 CPU 모델 | 선형 | 가상 | 물리 | 주요 기능 | |
|---|---|---|---|---|---|---|---|
| x86-16 | 1세대 | 1978년 | 인텔 8086, 인텔 8088(1979년) | 16비트 | NA | 20비트 | 16비트 ISA, IBM PC (8088), IBM PC/XT (8088) |
| 1982년 | 인텔 80186, 인텔 80188, NEC V20/V30 (1983년) | 8086-2 ISA, 임베디드 (80186/80188) | |||||
| 2세대 | 1982년 | 인텔 80286 및 클론 | 30비트 | 24비트 | 보호 모드, IBM PC/XT 286, IBM PC/AT | ||
| IA-32 | 3세대 | 1985년 | 인텔 80386, AMD Am386 (1991년) | 32비트 | 46비트 | 32비트 | 32비트 ISA, 페이징, IBM PS/2 |
| 4세대 (파이프라인, 캐시) | 1989년 | 인텔 80486 사이릭스 Cx486S, DLC (1992년) AMD Am486 (1993년), Am5x86 (1995년) | 파이프라인, 온다이 x87 FPU (486DX), 온다이 캐시 | ||||
| 5세대 (슈퍼스칼라) | 1993년 | 인텔 펜티엄, 펜티엄 MMX (1996년) | 슈퍼스칼라, 64비트 데이터 버스, 더 빠른 FPU, MMX (펜티엄 MMX), APIC, SMP | ||||
2. 1. 16비트 시대 (IA-16)
인텔 8086과 인텔 8088은 14개의 16비트 레지스터를 지원했다. AX, BX, CX, DX 4개는 일반 레지스터로 사용되었지만, 실제로는 명령에 따라 특수한 용도로 사용되기도 했다. (예: LOOP 명령은 항상 CX 레지스터를 사용) 일반 레지스터는 상위 8비트(AH, BH, CH, DH)와 하위 8비트(AL, BL, CL, DL)를 따로 접근할 수 있었다. CS, DS, SS, ES 4개의 세그먼트 레지스터는 메모리 주소의 기준을 정하는 데 사용되었고, SP, BP 2개의 포인터 레지스터는 메모리 주소를 담는 데 쓰였다. SI, DI 2개의 레지스터는 배열을 참조하는 데 사용되었고, FLAGS 레지스터는 자리올림, 오버플로 등의 상태 비트를 저장했으며, IP 레지스터는 현재 세그먼트에서 다음에 실행될 명령어의 오프셋(offset)을 저장했다.8086은 64 KiB(65,536 바이트)의 메모리 공간과 64 KiB의 스택 공간을 지원했다. 스택에는 한 워드 단위로 값을 넣거나 뺄 수 있었으며, 스택의 꼭대기는 SS:SP에 저장되었다. 스택에 값을 넣으면 SS:SP는 감소했으며, 따라서 스택의 꼭대기는 실제로는 전체 스택에서 가장 주소가 작은 곳에 위치했다. 256개의 하드웨어 및 소프트웨어 인터럽트가 지원되었으며, 반환 주소를 스택에 저장하기 때문에 한 인터럽트가 처리되는 도중에 다른 인터럽트가 걸릴 수도 있었다.
인텔 80286은 실제 모드와 보호 모드를 제공했다. 실제 모드는 1MiB의 메모리를 접근할 수 있었고, 보호 모드는 16MiB의 물리 메모리와 1GiB의 가상 메모리를 접근할 수 있었다.
1980년대와 1990년대 초, 8088과 80286이 널리 사용되던 시기에 x86이라는 용어는 일반적으로 8086 호환 CPU를 나타냈다. 그러나 오늘날 x86은 일반적으로 32비트 명령어 집합인 80386과의 바이너리 호환성을 의미한다.
8086은 주로 임베디드 시스템과 소규모 다중 사용자 또는 단일 사용자 컴퓨터를 위해 개발되었지만, x86 라인은 곧 기능과 처리 능력이 향상되었다. 오늘날 x86은 고정형 및 휴대용 개인용 컴퓨터에서 보편적으로 사용되며, 미드레인지 컴퓨터, 워크스테이션, 서버 및 TOP500 목록에 있는 대부분의 새로운 슈퍼컴퓨터 클러스터에서도 사용된다.
그러나 현대 x86은 임베디드 시스템과 소형 저전력 전자 애플리케이션, 가전제품 및 장난감과 같은 저가 마이크로프로세서 시장에서는 상대적으로 드물다.
x86 마이크로아키텍처, 전자 회로 및 반도체 제조의 지속적인 개선으로 인해 많은 부문에서 x86을 대체하기 어려울 것이다.
다음은 x86 계열에서 다양한 아키텍처를 구현하는 프로세서 모델과 모델 시리즈를 연대순으로 나열한 표이다.
| 시대 | 출시 | 주요 CPU 모델 | 선형 | 가상 | 물리 | 주요 기능 | |
|---|---|---|---|---|---|---|---|
| x86-16 | 1세대 | 1978년 | 인텔 8086, 인텔 8088(1979년) | 16비트 | NA | 20비트 | 16비트 ISA, IBM PC (8088), IBM PC/XT (8088) |
| 1982년 | 인텔 80186, 인텔 80188, NEC V20/V30 (1983년) | 8086-2 ISA, 임베디드 (80186/80188) | |||||
| 2세대 | 1982년 | 인텔 80286 및 클론 | 30비트 | 24비트 | 보호 모드, IBM PC/XT 286, IBM PC/AT | ||

과거에, IBM, VIA, NEC, AMD, TI, STM, 후지쯔, OKI, 지멘스, 사이릭스, 인터실, C&T, 넥스젠, UMC, DM&P 등의 회사들이 개인용 컴퓨터 및 임베디드 시스템용 x86 프로세서 (CPU)를 설계 또는 제조했다.
이러한 x86 구현은 단순한 복사본인 경우가 드물었으며, 종종 서로 다른 내부 마이크로아키텍처와 전자 및 물리적 수준에서 다른 솔루션을 사용했다.
2. 1. 1. 실제 모드 (Real Mode)
인텔 80286부터 '''실제 모드'''(real mode)라는 프로세서 모드가 부팅 시 기본으로 활성화되었다. 실제 모드는 20비트 주소를 사용할 수 있어 1MiB의 메모리에 접근할 수 있다.[65] 바이오스 루틴과 주변 장치를 소프트웨어적으로 직접 접근할 수 있으나, 멀티태스킹 같은 개념은 하드웨어적으로 지원하지 않는다.실제 모드에서는 메모리 접근 시 해당하는 16비트 세그먼트와 실제로 사용되는 16비트 주소를 합쳐 20비트 주소를 만든다. 예를 들어 DS가 A000h이고 SI가 5677h이면 DS:SI는 DS × 16 + SI = A5677h라는 주소를 가리킨다. 메모리 접근에 사용할 수 있는 세그먼트는 CS, DS, ES, SS 네 가지가 있으며, 그중 CS와 SS는 프로그램 실행과 밀접하게 연관되어 실제로는 DS와 ES만 사용했다.
실제 모드는 프로그래밍과 컴파일러 설계를 어렵게 했는데, 현재 세그먼트 안에서 접근 가능한지 검사하여 다른 명령을 만들어야 했기 때문이다. 이때 세그먼트 안에서 접근할 수 있는 포인터를 가까운 포인터(near pointer), 그렇지 않으면 먼 포인터(far pointer)라 한다.
2. 1. 2. 보호 모드 (Protected Mode)
80286 프로세서는 실제 모드 외에 보호 모드(protected mode)라는 새로운 작동 모드를 제공했다. 보호 모드에서는 16 MiB의 물리 메모리와 1 GiB의 가상 메모리를 사용할 수 있었다. 보호 모드에서 세그먼트 레지스터는 별도의 세그먼트 테이블에 있는 기준 주소를 가리키도록 변경되었다. 이러한 테이블은 전역 기술 테이블(GDT)과 지역 기술 테이블(LDT) 두 가지로 나뉘며, 각각 8192개의 24비트 세그먼트 기술자를 포함하고, 각 세그먼트는 64 KiB의 메모리를 담을 수 있었다.[65]각 세그먼트에는 네 가지 보호 단계(ring) 중 하나가 부여되어 해당 세그먼트에서 실행되는 코드의 권한을 설정할 수 있었다. 이를 통해 운영체제와 응용 프로그램 간의 안정성과 보안성을 높일 수 있었다.
OS/2와 같은 운영 체제는 실제 모드와 보호 모드를 전환하며 함께 사용하려 했지만, 속도가 느리고 실제 모드 프로그램이 시스템을 자주 중단시켜 안전하지 않았다. 윈도우 3.0은 소프트웨어적으로 가상 메모리를 구현했기 때문에 실제 모드에서 절대 주소를 접근하면 위험하여 보호 모드에서 실제 모드 프로그램을 실행해야 했다. 윈도우 3.1부터는 실제 모드를 사용하지 않았다.
2. 2. 32비트 시대 (IA-32)
사이릭스 Cx486S, DLC (1992년)AMD Am486 (1993년), Am5x86 (1995년)
(슈퍼스칼라)