중앙 처리 장치

[섬네일|[인텔이 만든 현대적인 고급 소비자용 CPU: 인텔 코어 i9-14900KF]]
[섬네일|280px|upright=1.5|중앙 처리 장치 내부: 2006년에 처음 제조된 인텔 [인텔 제온 프로세서 목록 (코어 기반)#ark27205|제온 3060의 집적 회로]]
**중앙 처리 장치**(中央處理裝置) 또는 **CPU**(, **central/main processor**)는 주어진 컴퓨터에서 주된 프로세서이다. CPU의 전자 회로는 산술, 논리, 제어 및 입출력(I/O) 연산과 같은 컴퓨터 프로그램의 명령을 실행한다. 이러한 역할은 주기억장치 및 I/O 회로와 같은 외부 구성 요소와 대조되며, 그래픽 처리 장치(GPU)와 같은 특수 코프로세서의 역할과도 대조된다.

CPU의 형태, 설계 및 구현은 시간이 지남에 따라 변했지만, 그 근본적인 작동 방식은 거의 변하지 않았다. CPU의 주요 구성 요소로는 산술 및 논리 연산을 수행하는 산술 논리 장치(ALU), ALU에 피연산자를 공급하고 ALU 연산 결과를 저장하는 프로세서 레지스터, 그리고 ALU, 레지스터 및 기타 구성 요소의 조정된 작동을 지시하여 가져오기(메모리에서), 디코딩 및 실행(명령어)을 조율하는 제어 장치가 있다. 최신 CPU는 성능 향상을 위해 캐시 및 명령어 수준 병렬성에 많은 반도체 영역을 할애하며, CPU 모드를 통해 운영체제 및 가상화를 지원한다.

대부분의 최신 CPU는 집적 회로(IC) 마이크로프로세서로 구현되며, 단일 IC 칩에 하나 이상의 CPU가 포함된다. 여러 CPU가 포함된 마이크로프로세서 칩을 멀티 코어 프로세서라고 부른다. '프로세서 코어'라고 불리는 개별 물리적 CPU는 CPU 수준의 멀티스레딩을 지원하기 위해 멀티스레딩될 수도 있다.

CPU를 포함하는 IC는 또한 메모리, 주변기기 인터페이스 및 기타 컴퓨터 구성 요소를 포함할 수 있다. 이러한 통합 장치는 다양하게 마이크로컨트롤러 또는 시스템 온 칩(SoC)이라고 불린다.

## 역사

[섬네일|최초의 프로그램 내장식 컴퓨터 중 하나인 [에드박]]

에니악과 같은 초기 컴퓨터는 다른 작업을 수행하기 위해 물리적으로 다시 배선해야 했으며, 이로 인해 이러한 기계들은 "고정 프로그램 컴퓨터"라고 불렸다. "중앙 처리 장치"라는 용어는 1955년 이래로 사용되어 왔다. "CPU"라는 용어는 일반적으로 소프트웨어(컴퓨터 프로그램) 실행을 위한 장치로 정의되므로, 진정으로 CPU라고 불릴 수 있는 최초의 장치는 프로그램 내장식 컴퓨터의 출현과 함께 나타났다.

프로그램 내장식 컴퓨터의 아이디어는 이미 존 프레스퍼 에커트와 존 윌리엄 모클리의 에니악 설계에 있었지만, 초기에는 더 빨리 완성하기 위해 생략되었다. 1945년 6월 30일, 에니악이 만들어지기 전에 수학자 존 폰 노이만은 에드박의 보고서 최초 초안이라는 제목의 논문을 배포했다. 이 논문은 결국 1949년 8월에 완성될 프로그램 내장식 컴퓨터의 개요였다. 에드박은 다양한 유형의 특정 수의 명령(또는 연산)을 수행하도록 설계되었다. 중요하게도, 에드박을 위해 작성된 프로그램은 컴퓨터의 물리적 배선으로 지정되는 대신 고속 컴퓨터 메모리에 저장되었다. 이는 새로운 작업을 수행하기 위해 컴퓨터를 재구성하는 데 상당한 시간과 노력이 필요했던 에니악의 심각한 한계를 극복했다. 폰 노이만의 설계로 에드박이 실행하는 프로그램은 단순히 메모리 내용을 변경하여 변경할 수 있었다. 에드박은 최초의 프로그램 내장식 컴퓨터는 아니었다. 소규모 실험용 프로그램 내장식 컴퓨터인 맨체스터 베이비는 1948년 6월 21일에 첫 프로그램을 실행했고, 맨체스터 마크 1은 1949년 6월 16일에서 17일 밤 사이에 첫 프로그램을 실행했다.

초기 CPU는 더 크고 때로는 독특한 컴퓨터의 일부로 사용되는 맞춤형 설계였다. 그러나 특정 애플리케이션을 위한 맞춤형 CPU를 설계하는 이 방법은 대량 생산되는 다목적 프로세서 개발로 크게 바뀌었다. 이러한 표준화는 개별 트랜지스터 메인프레임 및 미니컴퓨터 시대에 시작되어 집적 회로(IC)의 대중화로 빠르게 가속화되었다. IC 덕분에 점점 더 복잡한 CPU를 나노미터 단위의 공차로 설계하고 제조할 수 있게 되었다. CPU의 소형화와 표준화는 디지털 장치의 현대 생활 속 존재감을 전용 컴퓨팅 기계의 제한된 응용 범위를 훨씬 넘어 확장시켰다. 현대 마이크로프로세서는 자동차부터 휴대폰에 이르기까지 다양한 전자 장치에 나타나며, 때로는 장난감에도 사용된다.

폰 노이만은 에드박의 설계로 인해 프로그램 내장식 컴퓨터 설계의 공로를 가장 자주 인정받고 있으며, 그의 설계는 폰 노이만 구조로 알려지게 되었지만, 그 이전에도 콘라트 추제와 같은 다른 사람들이 비슷한 아이디어를 제안하고 구현했다. 에드박 이전에 완성된 하버드 마크 I의 소위 하버드 아키텍처는 전자 메모리가 아닌 천공 테이프를 사용하는 프로그램 내장식 설계를 사용했다. 폰 노이만 아키텍처와 하버드 아키텍처의 주요 차이점은 후자는 CPU 명령과 데이터의 저장 및 처리를 분리하는 반면, 전자는 둘 다에 동일한 메모리 공간을 사용한다는 것이다. 대부분의 현대 CPU는 주로 폰 노이만 설계이지만, 하버드 아키텍처를 사용하는 CPU도 특히 임베디드 애플리케이션에서 볼 수 있다. 예를 들어, 아트멜 AVR 마이크로컨트롤러는 하버드 아키텍처 프로세서이다.

릴레이와 진공관은 스위칭 요소로 흔히 사용되었다. 유용한 컴퓨터는 수천 또는 수만 개의 스위칭 장치를 필요로 한다. 시스템의 전체 속도는 스위치의 속도에 따라 달라진다. 에드박과 같은 진공관 컴퓨터는 고장 간 평균 8시간이었던 반면, 더 느리지만 더 이른 하버드 마크 I과 같은 릴레이 컴퓨터는 거의 고장이 나지 않았다. 결국, 진공관 기반 CPU는 제공되는 상당한 속도 이점이 일반적으로 신뢰성 문제를 능가했기 때문에 지배적이 되었다. 이 초기 동기식 CPU의 대부분은 현대 마이크로 전자 설계에 비해 낮은 클럭 속도로 작동했으며, 이는 주로 구축된 스위칭 장치의 속도에 의해 제한되었다. 100 kHz에서 4&nbsp;MHz에 이르는 클럭 신호 주파수는 이 시기에 매우 흔했다.

### 트랜지스터 CPU
[섬네일|[IBM PowerPC 604e 프로세서]]

다양한 기술이 더 작고 안정적인 전자 장치 제작을 용이하게 하면서 CPU의 설계 복잡성이 증가했다. 이러한 첫 번째 개선은 트랜지스터의 출현과 함께 이루어졌다. 1950년대와 1960년대의 트랜지스터화된 CPU는 더 이상 진공관과 릴레이와 같이 부피가 크고 신뢰성이 없으며 깨지기 쉬운 스위칭 요소로 만들어질 필요가 없었다. 이러한 개선으로 더 복잡하고 신뢰성 있는 CPU가 개별 구성 요소를 포함하는 하나 또는 여러 인쇄 회로 기판 위에 구축되었다.

1964년, IBM은 다양한 속도와 성능으로 동일한 프로그램을 실행할 수 있는 일련의 컴퓨터에 사용된 IBM 시스템/360 컴퓨터 아키텍처를 도입했다. 이는 당시 대부분의 전자 컴퓨터가 동일한 제조업체에서 만든 컴퓨터조차 서로 호환되지 않았던 시기에 중요한 의미를 가졌다. 이러한 개선을 용이하게 하기 위해 IBM은 오늘날의 CPU에서도 널리 사용되는 마이크로코드의 개념을 사용했다. 시스템/360 아키텍처는 수십 년 동안 메인프레임 시장을 지배할 정도로 인기가 많았으며, IBM의 zSeries와 같은 현대의 유사 컴퓨터에도 그 유산이 이어지고 있다. 1965년, 디지털 이큅먼트 코퍼레이션(DEC)은 과학 및 연구 시장을 겨냥한 또 다른 영향력 있는 컴퓨터인 PDP-8을 소개했다.
[섬네일|[후지쯔 본사에 전시된 SPARC64 VIIIfx 프로세서가 탑재된 후지쯔 보드]]
트랜지스터 기반 컴퓨터는 이전 모델에 비해 몇 가지 뚜렷한 장점을 가졌다. 신뢰성 향상과 낮은 전력 소비를 가능하게 할 뿐만 아니라, 트랜지스터는 진공관이나 릴레이에 비해 스위칭 시간이 짧아 CPU가 훨씬 빠른 속도로 작동할 수 있도록 했다. 스위칭 요소의 신뢰성 향상과 극적으로 빨라진 속도(이때 거의 전적으로 트랜지스터가 사용됨) 덕분에 이 시기에는 수십 메가헤르츠의 CPU 클럭 속도를 쉽게 얻을 수 있었다. 또한, 개별 트랜지스터 및 IC CPU가 활발히 사용되는 동안, 단일 명령어 다중 데이터(SIMD) 벡터 프로세서와 같은 새로운 고성능 설계가 나타나기 시작했다. 이러한 초기 실험적 설계는 나중에 크레이 Inc 및 후지쯔와 같은 전문 슈퍼컴퓨터 시대를 열었다.

### 소규모 집적 CPU
[섬네일|중규모 집적 회로로 만들어진 DEC [PDP-8/I의 CPU, 코어 메모리 및 외부 버스 인터페이스]]

이 시기에 컴팩트한 공간에 많은 상호 연결된 트랜지스터를 제조하는 방법이 개발되었다. 집적 회로(IC)는 단일 반도체 기반 다이 또는 "칩"에 많은 수의 트랜지스터를 제조할 수 있게 했다. 처음에는 NOR 게이트와 같은 매우 기본적인 비전문 디지털 회로만 IC로 소형화되었다. 이러한 "블록" IC를 기반으로 한 CPU는 일반적으로 "소규모 집적"(SSI) 장치라고 불린다. 아폴로 가이던스 컴퓨터에 사용된 것과 같은 SSI IC는 일반적으로 수십 개의 트랜지스터를 포함했다. SSI IC로 전체 CPU를 구축하려면 수천 개의 개별 칩이 필요했지만, 이전의 개별 트랜지스터 설계보다 훨씬 적은 공간과 전력을 소비했다.

IBM의 시스템/370은 시스템/360의 후속 모델로, 솔리드 로직 기술 개별 트랜지스터 모듈 대신 SSI IC를 사용했다. DEC의 PDP-8/I와 KI10 PDP-10도 PDP-8과 KA PDP-10에서 사용되던 개별 트랜지스터에서 SSI IC로 전환했으며, 그들의 매우 인기 있는 PDP-11 라인은 원래 SSI IC로 구축되었지만, 나중에 LSI 구성 요소가 실용화되면서 LSI로 구현되었다.

### 대규모 집적 CPU
리 보이스텔은 1967년의 "선언문"을 포함한 영향력 있는 기사들을 발표했는데, 이 기사들은 상대적으로 적은 수의 대규모 집적 회로(LSI)로 32비트 메인프레임 컴퓨터와 동등한 것을 구축하는 방법을 설명했다. 백 개 이상의 게이트를 가진 칩인 LSI 칩을 구축하는 유일한 방법은 금속–산화물–반도체(MOS) 반도체 제조 공정(PMOS 논리, NMOS 논리, 또는 CMOS 논리)을 사용하여 구축하는 것이었다. 그러나 일부 회사는 1970년대까지 접합형 트랜지스터가 MOS 칩보다 빨랐기 때문에 양극성 트랜지스터-트랜지스터 논리(TTL) 칩으로 프로세서를 계속 구축했다 (몇몇 회사들은 데이터포인트와 같이 1980년대 초까지 TTL 칩으로 프로세서를 계속 구축했다). 1960년대에는 MOS IC가 더 느렸고 처음에는 저전력이 필요한 응용 분야에서만 유용하다고 여겨졌다. 1968년 페어차일드 반도체에서 페데리코 파진에 의해 실리콘 게이트 MOS 기술이 개발된 이후, MOS IC는 1970년대 후반에 양극성 TTL을 표준 칩 기술로 크게 대체했다.

마이크로전자 기술이 발전함에 따라, 점점 더 많은 트랜지스터가 IC에 집적되어 완전한 CPU에 필요한 개별 IC의 수가 줄어들었다. MSI 및 LSI IC는 트랜지스터 수를 수백 개, 그리고 수천 개로 늘렸다. 1968년에는 완전한 CPU를 구축하는 데 필요한 IC 수가 8가지 유형의 24개 IC로 줄어들었으며, 각 IC는 약 1000개의 MOSFET을 포함했다. SSI 및 MSI 이전 모델과 현저히 대조적으로, PDP-11의 첫 LSI 구현은 단 4개의 LSI 집적 회로로 구성된 CPU를 포함했다.

### 마이크로프로세서

섬네일|CPU가 소켓에서 제거된 노트북 내부
마이크로프로세서가 처음 도입된 이후 거의 모든 다른 중앙 처리 장치 구현 방법을 완전히 대체했다. 1971년에 출시된 최초의 상업용 마이크로프로세서는 인텔 4004였다. 인텔 4004는 산술 논리 장치, 제어 장치 및 프로세서 레지스터를 칩 하나에 통합한 최초의 소비자용 CPU 중 하나였다. 1974년에 출시된 최초의 널리 사용된 마이크로프로세서는 인텔 8080이었다. 당시의 메인프레임 및 미니컴퓨터 제조업체들은 기존의 컴퓨터 구조를 업그레이드하기 위해 독자적인 IC 개발 프로그램을 시작했고, 결국 기존 하드웨어 및 소프트웨어와 하위 호환되는 명령어 집합 호환 마이크로프로세서를 생산했다. 유비쿼터스 개인용 컴퓨터의 출현과 궁극적인 성공과 결합하여, CPU라는 용어는 이제 거의 전적으로 마이크로프로세서에 적용된다. 여러 CPU(코어라고 함)는 단일 처리 칩에 결합될 수 있다.

이전 세대의 CPU는 하나 이상의 회로 기판에 개별 부품과 수많은 작은 집적 회로(IC)로 구현되었다. 반면 마이크로프로세서는 매우 적은 수의 IC, 일반적으로 단 하나의 IC로 제조된 CPU이다. 단일 다이에 구현됨으로써 전체 CPU 크기가 줄어든다는 것은 게이트 기생 용량 감소와 같은 물리적 요인으로 인해 스위칭 시간이 빨라진다는 것을 의미한다. 이를 통해 동기식 마이크로프로세서는 수십 메가헤르츠에서 수 기가헤르츠에 이르는 클럭 속도를 가질 수 있었다. 또한, IC에 매우 작은 트랜지스터를 구축하는 능력은 단일 CPU의 복잡성과 트랜지스터 수를 여러 배 증가시켰다. 이 널리 관찰되는 추세는 2016년까지 CPU(및 기타 IC) 복잡성 성장의 상당히 정확한 예측자로 입증된 무어의 법칙에 의해 설명된다.

1950년대 이후 CPU의 복잡성, 크기, 구조 및 일반적인 형태는 엄청나게 변했지만, 기본적인 설계와 기능은 거의 변하지 않았다. 오늘날 거의 모든 일반적인 CPU는 폰 노이만 프로그램 내장형 기계로 매우 정확하게 설명될 수 있다. 무어의 법칙이 더 이상 유효하지 않음에 따라, 집적 회로 트랜지스터 기술의 한계에 대한 우려가 제기되었다. 전자 게이트의 극단적인 소형화는 일렉트로마이그레이션 및 임계치 이하 누출(subthreshold leakage)과 같은 현상의 영향을 훨씬 더 중요하게 만들고 있다. 이러한 새로운 우려 사항들은 연구자들이 양자 컴퓨터와 같은 새로운 컴퓨팅 방법을 조사하고, 고전적인 폰 노이만 모델의 유용성을 확장하는 병렬성 및 기타 방법을 확장하게 하는 많은 요인 중 하나이다.

## 작동
대부분의 CPU의 기본적인 작동 방식은 물리적 형태와 관계없이 프로그램이라고 불리는 일련의 저장된 명령을 실행하는 것이다. 실행될 명령은 일종의 컴퓨터 메모리에 보관된다. 거의 모든 CPU는 명령 주기라고 통칭되는 가져오기(fetch), 디코딩(decode) 및 실행(execute) 단계를 따른다.

명령 실행 후, 전체 과정이 반복되며, 다음 명령 주기에서는 일반적으로 프로그램 카운터의 증가된 값으로 인해 순서상 다음 명령을 가져온다. 만약 점프 명령이 실행되면, 프로그램 카운터는 점프한 명령의 주소를 포함하도록 수정되고 프로그램 실행은 정상적으로 계속된다. 더 복잡한 CPU에서는 여러 명령이 동시에 가져와지고, 디코딩되고, 실행될 수 있다. 이 섹션에서는 일반적으로 "고전 RISC 파이프라인"이라고 불리는 것을 설명하며, 이는 많은 전자 장치(종종 마이크로컨트롤러라고 불림)에 사용되는 간단한 CPU에서 매우 일반적이다. 이 설명은 CPU 캐시의 중요한 역할과 따라서 파이프라인의 접근 단계를 거의 무시한다.

일부 명령어는 직접 결과 데이터를 생성하기보다는 프로그램 카운터를 조작한다. 이러한 명령어는 일반적으로 "점프"라고 불리며, 루프, 조건부 프로그램 실행(조건부 점프 사용), 그리고 서브루틴의 존재와 같은 프로그램 동작을 용이하게 한다. 일부 프로세서에서는 다른 일부 명령어가 상태 "플래그" 레지스터의 비트 상태를 변경한다. 이러한 플래그는 종종 다양한 연산의 결과를 나타내기 때문에 프로그램 동작에 영향을 미치는 데 사용될 수 있다. 예를 들어, 이러한 프로세서에서 "비교" 명령어는 두 값을 평가하고 플래그 레지스터의 비트를 설정하거나 지워서 어느 값이 더 큰지 또는 동일한지를 나타낸다. 이 플래그 중 하나는 나중에 점프 명령어가 프로그램 흐름을 결정하는 데 사용될 수 있다.

### 가져오기
가져오기는 프로그램 메모리에서 명령(숫자 또는 숫자 시퀀스로 표현됨)을 검색하는 것을 포함한다. 프로그램 메모리에서 명령의 위치(주소)는 다음에 가져올 명령의 주소를 식별하는 숫자를 저장하는 프로그램 카운터(PC; 인텔 X86 마이크로프로세서에서는 "명령 포인터"라고 불림)에 의해 결정된다. 명령이 가져와진 후, PC는 명령의 길이만큼 증가하여 시퀀스의 다음 명령 주소를 포함하게 된다. 종종 가져올 명령은 상대적으로 느린 메모리에서 검색해야 하므로, 명령이 반환되기를 기다리는 동안 CPU가 정지하게 된다. 이 문제는 캐시 및 파이프라인 아키텍처(아래 참조)에 의해 최신 프로세서에서 크게 해결되었다.

### 디코딩

CPU가 메모리에서 가져오는 명령어는 CPU가 무엇을 할지 결정한다. 복호화 회로로 알려진 명령어 디코더에 의해 수행되는 디코딩 단계에서, 명령어는 CPU의 다른 부분을 제어하는 신호로 변환된다.

명령어가 해석되는 방식은 CPU의 명령어 집합 아키텍처(ISA)에 의해 정의된다. 종종 명령어 내의 비트 그룹("필드"라고 불림) 중 하나인 연산 코드는 수행할 연산을 나타내고, 나머지 필드는 일반적으로 연산에 필요한 추가 정보, 예를 들어 피연산자를 제공한다. 이러한 피연산자는 상수 값(즉시 값이라고 함)으로 지정되거나, 일부 주소 지정 방식에 의해 결정되는 프로세서 레지스터 또는 메모리 주소일 수 있다.

일부 CPU 설계에서는 명령어 디코더가 하드웨어로 고정된, 변경 불가능한 복호화 회로로 구현된다. 다른 설계에서는 마이크로코드가 명령어를 여러 클럭 펄스에 걸쳐 순차적으로 적용되는 CPU 구성 신호 세트로 변환하는 데 사용된다. 경우에 따라 마이크로코드를 저장하는 메모리는 다시 쓸 수 있어 CPU가 명령어를 디코딩하는 방식을 변경할 수 있다.

### 실행
가져오기 및 디코딩 단계 후에는 실행 단계가 수행된다. CPU 아키텍처에 따라 단일 동작 또는 일련의 동작으로 구성될 수 있다. 각 동작 동안 제어 신호는 CPU의 다양한 부분을 전기적으로 활성화하거나 비활성화하여 원하는 연산의 전부 또는 일부를 수행할 수 있도록 한다. 그런 다음 동작은 일반적으로 클럭 펄스에 반응하여 완료된다. 종종 결과는 후속 명령어가 빠르게 접근할 수 있도록 내부 CPU 레지스터에 기록된다. 다른 경우에는 결과가 더 느리지만 비용이 적게 들고 용량이 큰 주기억장치에 기록될 수 있다.

예를 들어, 덧셈을 수행하는 명령어가 실행될 경우, 피연산자(합산될 숫자)를 포함하는 레지스터와 덧셈을 수행하는 산술 논리 장치(ALU)의 일부가 활성화된다. 클럭 펄스가 발생하면 피연산자는 원본 레지스터에서 ALU로 흘러가고, 합계가 ALU의 출력에 나타난다. 후속 클럭 펄스에서 다른 구성 요소는 출력을 저장 장치(예: 레지스터 또는 메모리)로 이동시키기 위해 활성화(및 비활성화)된다. 만약 결과 합계가 너무 크면(즉, ALU의 출력 워드 크기보다 크면) 산술 오버플로 플래그가 설정되어 다음 연산에 영향을 미친다.

## 구조와 구현

섬네일|upright=1.7|기본적인 단일 프로세서 CPU 컴퓨터의 블록 다이어그램. 검은색 선은 데이터 흐름을, 빨간색 선은 제어 흐름을 나타내며, 화살표는 흐름 방향을 나타낸다.

CPU의 회로에 하드웨어로 내장된 기본적인 연산 집합을 명령어 집합이라고 한다. 이러한 연산에는 예를 들어 두 숫자를 더하거나 빼는 것, 두 숫자를 비교하는 것, 또는 프로그램의 다른 부분으로 점프하는 것 등이 포함될 수 있다. 각 명령어는 기계어 연산 코드라고 알려진 고유한 비트 조합으로 표현된다. 명령어를 처리하는 동안 CPU는 연산 코드를 복호화하여 CPU의 동작을 조율하는 제어 신호로 변환한다. 완전한 기계어 명령어는 연산 코드와, 많은 경우 연산에 필요한 추가 비트(예: 덧셈 연산의 경우 합산될 숫자)로 구성된다. 복잡성 스케일을 올리면 기계어 프로그램은 CPU가 실행하는 기계어 명령어들의 모음이다.

각 명령어에 대한 실제 수학 연산은 CPU 프로세서 내의 조합 논리 회로인 산술 논리 장치(ALU)에 의해 수행된다. 일반적으로 CPU는 메모리에서 명령어를 가져와 ALU를 사용하여 연산을 수행한 다음, 결과를 메모리에 저장한다. 정수 수학 및 논리 연산 외에도, 메모리에서 데이터를 로드하고 다시 저장하는 명령어, 분기 연산, 그리고 CPU의 부동소수점 장치(FPU)에 의해 수행되는 부동소수점 연산과 같은 다양한 다른 기계 명령어가 존재한다.

### 제어 장치

**제어 장치**(CU)는 프로세서의 작동을 지시하는 CPU의 구성 요소이다. 이는 컴퓨터의 메모리, 산술 논리 장치 및 입출력 장치에 프로세서로 전송된 명령에 응답하는 방법을 알려준다.

이는 타이밍 및 제어 신호를 제공하여 다른 장치의 작동을 지시한다. 대부분의 컴퓨터 자원은 CU에 의해 관리된다. 이는 CPU와 다른 장치 간의 데이터 흐름을 지시한다. 존 폰 노이만은 폰 노이만 구조의 일부로 제어 장치를 포함했다. 현대 컴퓨터 설계에서 제어 장치는 일반적으로 CPU의 내부 부분이며, 도입 이후 전반적인 역할과 작동은 변하지 않았다.

### 산술 논리 장치

섬네일|upright=1.3|ALU 및 그 입출력 신호의 상징적인 표현

산술 논리 장치(ALU)는 정수 산술 및 비트 논리 연산을 수행하는 프로세서 내의 디지털 회로이다. ALU의 입력은 연산될 데이터 워드(피연산자라고 함), 이전 연산의 상태 정보, 그리고 제어 장치로부터 어떤 연산을 수행할지 지시하는 코드이다. 실행되는 명령에 따라 피연산자는 내부 CPU 레지스터, 외부 메모리 또는 ALU 자체에서 생성된 상수로부터 올 수 있다.

모든 입력 신호가 안정되고 ALU 회로를 통해 전파되면, 수행된 연산의 결과가 ALU의 출력에 나타난다. 결과는 레지스터나 메모리에 저장될 수 있는 데이터 워드와 일반적으로 이 목적을 위해 예약된 특수 내부 CPU 레지스터에 저장되는 상태 정보로 구성된다.

최신 CPU는 성능 향상을 위해 일반적으로 하나 이상의 ALU를 포함한다.

### 주소 생성 장치

주소 생성 장치(AGU)는 때때로 주소 계산 장치(ACU)라고도 불리는데, CPU가 메인 메모리에 접근하는 데 사용하는 주소를 계산하는 CPU 내부의 실행 장치이다. 주소 계산을 CPU의 나머지 부분과 병렬로 작동하는 별도의 회로로 처리함으로써 다양한 기계어 명령어를 실행하는 데 필요한 CPU 사이클 수가 줄어들어 성능 향상을 가져올 수 있다.

다양한 연산을 수행하는 동안 CPU는 메모리에서 데이터를 가져오는 데 필요한 메모리 주소를 계산해야 한다. 예를 들어, 배열 요소의 메모리 내 위치는 CPU가 실제 메모리 위치에서 데이터를 가져오기 전에 계산되어야 한다. 이러한 주소 생성 계산에는 덧셈, 뺄셈, 모듈로 연산, 또는 비트 시프트와 같은 다양한 정수 산술 연산이 포함된다. 종종 메모리 주소를 계산하는 것은 하나 이상의 범용 기계 명령어를 포함하며, 이는 반드시 빠르게 디코딩 및 실행되지 않는다. CPU 설계에 AGU를 통합하고 AGU를 사용하는 특수 명령어를 도입함으로써 다양한 주소 생성 계산을 CPU의 나머지 부분에서 오프로드할 수 있으며, 종종 단일 CPU 사이클 내에서 빠르게 실행될 수 있다.

AGU의 기능은 특정 CPU와 그 아키텍처에 따라 다르다. 따라서 일부 AGU는 더 많은 주소 계산 연산을 구현하고 노출하는 반면, 일부는 한 번에 여러 피연산자에 대해 작동할 수 있는 더 고급 전문 명령어도 포함한다. 일부 CPU 아키텍처는 여러 AGU를 포함하여 두 개 이상의 주소 계산 연산이 동시에 실행될 수 있도록 하며, 이는 고급 CPU 설계의 슈퍼스칼라 특성으로 인해 추가적인 성능 향상을 가져온다. 예를 들어, 인텔은 샌디브리지 및 하스웰 마이크로아키텍처에 여러 AGU를 통합하여 여러 메모리 접근 명령어를 병렬로 실행할 수 있도록 함으로써 CPU 메모리 서브시스템의 대역폭을 증가시킨다.

### 메모리 관리 장치 (MMU)

많은 마이크로프로세서(스마트폰 및 데스크톱, 노트북, 서버 컴퓨터에 사용됨)에는 메모리 관리 장치가 있어, 논리적 주소를 물리적 RAM 주소로 변환하고, 메모리 보호 및 페이징 기능을 제공하며, 이는 가상 메모리에 유용하다. 더 간단한 프로세서, 특히 마이크로컨트롤러는 일반적으로 MMU를 포함하지 않는다.

### 캐시
CPU 캐시는 컴퓨터의 중앙 처리 장치(CPU)가 주기억장치에서 데이터에 접근하는 평균 비용(시간 또는 에너지)을 줄이기 위해 사용하는 하드웨어 캐시이다. 캐시는 프로세서 코어에 더 가깝고 더 빠르며 작은 메모리로, 자주 사용되는 주 메모리 위치의 데이터 사본을 저장한다. 대부분의 CPU는 명령어 캐시 및 데이터 캐시를 포함하여 서로 다른 독립적인 캐시를 가지며, 데이터 캐시는 일반적으로 여러 캐시 레벨(L1, L2, L3, L4 등)의 계층 구조로 구성된다. 각 상위 캐시 레벨은 일반적으로 이전 레벨보다 느리지만 크며, L1이 가장 빠르고 CPU에 가장 가깝다.

모든 현대 (빠른) CPU는 (몇 가지 특수한 예외를 제외하고 ) 여러 수준의 CPU 캐시를 가지고 있다. 캐시를 사용한 최초의 CPU는 하나의 캐시 수준만 가졌다. 나중에 등장한 레벨 1 캐시와 달리 L1d(데이터용)와 L1i(명령어용)로 분할되지 않았다. 현재 캐시를 사용하는 거의 모든 CPU는 분할된 L1 캐시를 가지고 있다. 또한 L2 캐시와 더 큰 프로세서의 경우 L3 캐시도 가지고 있다. L2 캐시는 일반적으로 분할되지 않고 이미 분할된 L1 캐시의 공통 저장소 역할을 한다. 멀티 코어 프로세서의 각 코어는 전용 L2 캐시를 가지며 일반적으로 코어 간에 공유되지 않는다. L3 캐시 및 더 높은 수준의 캐시는 코어 간에 공유되며 분할되지 않는다. L4 캐시는 현재 흔하지 않으며, 일반적으로 별도의 다이 또는 칩에 있는 SRAM이 아닌 DRAM에 있다. 이는 역사적으로 L1에서도 마찬가지였지만, 더 큰 칩은 마지막 레벨을 제외하고 모든 캐시 레벨을 통합할 수 있게 했다. 각 추가 캐시 레벨은 더 크고 다르게 최적화되는 경향이 있다.

대부분의 CPU가 가지고 있는 메모리 관리 장치(MMU)의 일부인 변환 색인 버퍼(TLB)와 같이 다른 유형의 캐시도 존재한다(위에서 언급한 가장 중요한 캐시의 "캐시 크기"에는 포함되지 않음).

캐시는 일반적으로 2의 거듭제곱(예: 2, 8, 16 등 키비바이트 또는 메비바이트(더 큰 비L1 캐시의 경우) 크기로 되어 있지만, IBM z13은 96 KiB의 L1 명령어 캐시를 가지고 있다.

### 클럭 속도

대부분의 CPU는 동기 회로이다. 이는 순차적인 연산의 속도를 조절하기 위해 클럭 신호를 사용한다는 것을 의미한다. 클럭 신호는 외부 발진 회로에 의해 생성되며, 이 회로는 주기적인 방형파 형태로 초당 일정한 수의 펄스를 생성한다. 클럭 펄스의 주파수는 CPU가 명령어를 실행하는 속도를 결정하며, 결과적으로 클럭이 빠를수록 CPU는 초당 더 많은 명령어를 실행한다.

CPU의 적절한 작동을 보장하기 위해 클럭 주기는 모든 신호가 CPU를 통해 전파(이동)하는 데 필요한 최대 시간보다 길다. 클럭 주기를 최악의 전달 지연보다 훨씬 높은 값으로 설정함으로써, 전체 CPU와 CPU가 상승 및 하강하는 클럭 신호의 "가장자리"를 따라 데이터를 이동시키는 방식을 설계할 수 있다. 이는 설계 관점과 부품 수 관점 모두에서 CPU를 크게 단순화하는 장점이 있다. 그러나 이는 CPU의 일부 부분이 훨씬 빠르더라도 전체 CPU가 가장 느린 요소들을 기다려야 한다는 단점도 수반한다. 이러한 한계는 CPU 병렬성을 높이는 다양한 방법(아래 참조)에 의해 크게 보완되었다.

그러나 아키텍처 개선만으로는 전역 동기 CPU의 모든 단점을 해결할 수 없다. 예를 들어, 클럭 신호는 다른 전기 신호의 지연에 영향을 받는다. 점점 더 복잡해지는 CPU에서 높은 클럭 속도는 전체 장치에서 클럭 신호의 위상(동기화)을 유지하기 어렵게 만든다. 이로 인해 많은 현대 CPU는 단일 신호가 CPU 오작동을 유발할 정도로 크게 지연되는 것을 방지하기 위해 여러 개의 동일한 클럭 신호가 제공되어야 한다. 클럭 속도가 급격히 증가함에 따라 또 다른 주요 문제는 CPU에서 소산되는 열량이다. 지속적으로 변하는 클럭은 사용 여부와 관계없이 많은 구성 요소를 전환시킨다. 일반적으로 전환하는 구성 요소는 정적 상태의 요소보다 더 많은 에너지를 사용한다. 따라서 클럭 속도가 증가할수록 에너지 소비도 증가하여 CPU는 CPU 냉각 솔루션 형태의 더 많은 열 방출을 필요로 한다.

불필요한 구성 요소의 스위칭을 처리하는 한 가지 방법은 클럭 게이팅이라고 불리며, 이는 불필요한 구성 요소에 대한 클럭 신호를 차단하는 것(실질적으로 비활성화)을 포함한다. 그러나 이는 구현하기 어렵다고 여겨지며, 따라서 매우 낮은 전력 설계 외에는 일반적인 용도로 사용되지 않는다. 광범위한 클럭 게이팅을 사용하는 주목할 만한 최근 CPU 설계 중 하나는 엑스박스 360에 사용된 IBM 파워PC 기반 제논이다. 이는 엑스박스 360의 전력 요구 사항을 줄인다.

### 클럭 없는 CPU
전역 클럭 신호의 일부 문제를 해결하는 또 다른 방법은 클럭 신호를 아예 없애는 것이다. 전역 클럭 신호를 제거하면 여러 면에서 설계 프로세스가 상당히 복잡해지지만, 비동기(또는 클럭 없는) 설계는 유사한 동기 설계에 비해 전력 소비 및 열 방출 측면에서 뚜렷한 장점을 제공한다. 다소 흔하지는 않지만, 전역 클럭 신호를 사용하지 않고 완전한 비동기 CPU가 구축되기도 했다. 이 중 주목할 만한 두 가지 예로는 ARM 호환 AMULET과 MIPS R3000 호환 MiniMIPS가 있다.

클럭 신호를 완전히 제거하는 대신, 일부 CPU 설계는 장치의 특정 부분이 비동기식으로 작동하도록 허용한다. 예를 들어, 비동기식 ALU와 슈퍼스칼라 파이프라인을 함께 사용하여 일부 산술 성능 향상을 달성하는 식이다. 완전히 비동기식 설계가 동기식 설계와 유사하거나 더 나은 수준의 성능을 발휘할 수 있는지 여부는 아직 명확하지 않지만, 최소한 간단한 수학 연산에서는 탁월한 성능을 보여준다. 이러한 점은 우수한 전력 소비 및 열 방출 특성과 결합되어 임베디드 컴퓨터에 매우 적합하게 만든다.

### 전압 조정 모듈

많은 현대 CPU는 다이 통합 전력 관리 모듈을 가지고 있으며, 이는 CPU 회로에 온디맨드 전압 공급을 조절하여 성능과 전력 소비의 균형을 유지할 수 있도록 한다.

### 정수 범위
모든 CPU는 수치 값을 특정 방식으로 표현한다. 예를 들어, 일부 초기 디지털 컴퓨터는 숫자를 친숙한 10진법 기수법 값으로 표현했으며, 다른 컴퓨터는 2-5진법 또는 3진법과 같은 더 특이한 표현을 사용하기도 했다. 거의 모든 현대 CPU는 숫자를 이진 형태로 표현하며, 각 숫자는 "높음" 또는 "낮음" 전압과 같은 두 값의 물리량으로 표현된다.

섬네일|left|십진수 40의 이진 인코딩 표현을 포함하는 6비트 워드. 대부분의 현대 CPU는 8, 16, 32 또는 64비트와 같이 2의 거듭제곱인 워드 크기를 사용한다.

수치 표현과 관련하여 CPU가 표현할 수 있는 정수 숫자의 크기와 정밀도가 있다. 이진 CPU의 경우, 이는 CPU가 한 번의 연산으로 처리할 수 있는 비트 수(이진 인코딩된 정수의 유효 숫자)로 측정되며, 일반적으로 워드 크기, 비트 너비, 데이터 경로 너비, 정수 정밀도 또는 정수 크기라고 불린다. CPU의 정수 크기는 CPU가 직접 작동할 수 있는 정수 값의 범위를 결정한다. 예를 들어, 8비트 CPU는 8비트로 표현되는 정수를 직접 조작할 수 있으며, 이는 256(28)개의 이산 정수 값의 범위를 가진다.

정수 범위는 CPU가 직접 주소 지정할 수 있는 메모리 위치의 수에도 영향을 미칠 수 있다(주소는 특정 메모리 위치를 나타내는 정수 값임). 예를 들어, 이진 CPU가 메모리 주소를 나타내는 데 32비트를 사용하면 232개의 메모리 위치를 직접 주소 지정할 수 있다. 이러한 한계를 우회하고 다양한 다른 이유로 인해 일부 CPU는 추가 메모리를 주소 지정할 수 있는 메커니즘(메모리 관리 또는 뱅크 전환과 같은)을 사용한다.

워드 크기가 큰 CPU는 더 많은 회로를 필요로 하므로 물리적으로 더 크고, 비용이 더 많이 들며, 더 많은 전력을 소비한다(따라서 더 많은 열을 발생시킨다). 그 결과, 훨씬 더 큰 워드 크기(예: 16, 32, 64, 심지어 128비트)의 CPU를 사용할 수 있음에도 불구하고, 더 작은 4비트 또는 8비트 마이크로컨트롤러가 현대 애플리케이션에서 흔히 사용된다. 그러나 더 높은 성능이 요구될 때는 더 큰 워드 크기의 이점(더 넓은 데이터 범위 및 주소 공간)이 단점을 능가할 수 있다. CPU는 크기와 비용을 줄이기 위해 워드 크기보다 짧은 내부 데이터 경로를 가질 수 있다. 예를 들어, IBM 시스템/360의 명령어 집합은 32비트 명령어 집합이었지만, 시스템/360 모델 30과 모델 40은 산술 논리 장치에 8비트 데이터 경로를 가지고 있었으므로, 32비트 덧셈은 피연산자의 각 8비트마다 한 사이클씩 총 4사이클이 필요했다. 그리고 모토로라 68000 시리즈 명령어 집합은 32비트 명령어 집합이었지만, 모토로라 68000과 모토로라 68010은 산술 논리 장치에 16비트 데이터 경로를 가지고 있었으므로, 32비트 덧셈은 두 사이클이 필요했다.

더 낮은 비트 길이와 더 높은 비트 길이 모두의 이점을 얻기 위해, 많은 명령어 집합은 정수 및 부동소수점 데이터에 대해 다른 비트 너비를 가지며, 해당 명령어 집합을 구현하는 CPU가 장치의 다른 부분에 대해 다른 비트 너비를 가질 수 있도록 한다. 예를 들어, IBM 시스템/360 명령어 집합은 주로 32비트였지만, 부동소수점 숫자의 정확성과 범위 확장을 용이하게 하기 위해 64비트 부동소수점 값을 지원했다. 시스템/360 모델 65는 십진 및 고정 소수점 이진 산술을 위한 8비트 가산기와 부동소수점 산술을 위한 60비트 가산기를 가졌다. 많은 후기 CPU 설계는 유사한 혼합 비트 너비를 사용하는데, 특히 프로세서가 정수 및 부동소수점 기능의 합리적인 균형이 요구되는 범용 용도로 사용될 때 그렇다.

### 병렬성

섬네일|upright=2|세 가지 명령을 완료하는 데 15클럭 사이클이 걸리는 서브스칼라 CPU 모델

이전 섹션에서 설명한 CPU의 기본 작동 방식은 CPU가 취할 수 있는 가장 간단한 형태를 설명한다. 일반적으로 서브스칼라라고 불리는 이러한 유형의 CPU는 한 번에 하나 또는 두 개의 데이터 조각에 대해 하나의 명령을 작동하고 실행한다. 즉, 클럭 사이클당 명령어 처리 횟수(IPC 

## 외부 링크
* .
* 


분류:디지털 전자공학
분류:회로 설계
분류:전자 설계 자동화