3.1 A Historical Perspective(역사적 관점)
💡 x86 프로세서의 발전
최초의 single-chip 16비트 마이크로프로세서로 출발하였지만, 초기에는 반도체 기술의 부족으로 여러 가지 면에서 타협을 하다가 점점 성장하게 됨
- 프로세서 구현에 소요된 트랜지스터의 수
“K” → 1,000 (10^3)
“M” → 1,000,000 (10^6)
“G” → 1,000,000,000 (10^9).
- 8086 (1978, 29 K transistors)
최초의 single-chip 16비트 마이크로프로세서. 8088은 8086과 거의 동일하지만 원가 절감을 위해 external bus가 8비트로 제한되었고, IBM 개인 컴퓨터에 사용 됨. 초기 모델은 32Kb의 메모리를 사용했고, 두 개의 floppy drive를 지님.
— 나중에는 64KB의 메모리를 사용함. 16bit로 접근 가능한 2^16bytes인 64KB를 세그멘테이션 기법으로 접근했다. (이후에는 사용되지 않는 기법)
이 때, 주소 공간은 655,360 byte로 제한됨.
— 20비트의 address bus를 지녔으므로 2^20 인 1,048,576 bytes(1Mb)의 물리 메모리가 addressable하며, 운영체제가 이 중 393,216 bytes를 사용했기 때문이다. (메모리 한 칸이 1byte)
1980년에는, 8087 부동소수점 보조 프로세서(45 K transistors)를 개발하여 8086이나 8088 모델과 함께 사용했다. 이를 x87이라 불렀다.
— 일반인들은 8087이 필요가 없던 경우가 대부분이라, 비용 절감을 위해 분리했다. 현재는 SSE 혹은 AVX 명령어로 대체되었다.
- 80286 (1982, 134 K transistors)
CPU에 메모리 관리 장치(Memory Management Unit, MMU)를 추가했다.
- i386 (1985, 275 K transistors)
32비트로 확장, 유닉스 운영체제를 온전히 지원할 수 있게 됨
- i486 (1989, 1.2 M transistors)
개선된 성능, 부동소수점 유닛 내장, 명령어 집합은 거의 바꾸지 않음
- Pentium (1993, 3.1 M transistors)
P5 아키텍쳐 기반, 개선된 성능, 명령어 집합은 일부분만 수정
- PentiumPro (1995, 5.5 M transistors)
P6 아키텍쳐 도입
- Pentium/MMX (1997, 4.5 M transistors)
- SIMD연산 추가(병렬 처리)
- https://m.blog.naver.com/fs0608/221650925743
MMX → SIMD의 레지스터 폭 64비트
- Pentium II (1997, 7 M transistors)
P6 아키텍쳐 기반
- Pentium III (1999, 8.2 M transistors)
SSE 추가(MMX→SSE)
SSE → SIMD의 레지스터 폭 128비트
4배 이상의 성능확장 (윈도우7로 웹서핑 가능!)
- Pentium 4 (2000, 42 M transistors)
SSE2로 확장
- Pentium 4E (2004, 125 M transistors)
하이퍼스레딩 기법 추가, AMD의 x86-64 개발
- Core 2 (2006, 291 M transistors)
최초의 멀티코어 프로세서, 하이퍼스레딩은 지원하지 않음
- Core i7, Nehalem (2008, 781 M transistors)
멀티코어와 하이퍼스레딩을 동시 지원, 초기 버전은 코어당 2개의 프로그램 / 각 칩당 4개의 코어까지 지원
- Core i7, Sandy Bridge (2011, 1.17 G transistors)
AVX 추가 (SSE→AVX) AVX → 레지스터 폭 256비트
- Core i7, Haswell (2013, 1.4 G transistors)
AVX2로 확장
- 트랜지스터의 수가 26개월 마다 약 2배씩 증가! </aside>
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[CSAPP] 3.3 Data Formats(데이터의 형식) (1) | 2023.01.21 |
---|---|
[CSAPP] 3.2 Program Encoding(프로그램의 인코딩) (0) | 2023.01.21 |
[CSAPP] 2.4 Floating Point(부동소수점) (0) | 2023.01.19 |
[CSAPP] 2.3 Integer Arithmetic(정수 연산) (0) | 2023.01.19 |
[CSAPP] 2.2 Integer Representations(정수의 표시) (0) | 2023.01.19 |