{{위키데이터 속성 추적}}
{{출처 필요|날짜=2010-10-5}}
[[파일:Intel 4004.jpg|섬네일|[[인텔 4004]]는 최초의 일반용, 상용 마이크로프로세서이다.]]
'''마이크로프로세서'''({{llang|en|microprocessor, microprocessing unit}}) 또는 '''초소형 연산 처리 장치'''(超小型演算處理裝置)는 [[컴퓨터]]의 [[중앙 처리 장치]](CPU)를 말한다. 기계어 코드를 실행하기 위해 실행과정을 단계별로 나누어 처리를 위한  [[마이크로 코드]]를 작성하고, 이 마이크로 코드에 의해 단계적으로 처리하는 논리회로를 말한다.<ref name=Osborne80>{{서적 인용 | first=Adam | last=Osborne | 제목=An Introduction to Microcomputers | volume=Volume 1: Basic Concepts | edition=2nd | publisher=Osborne-McGraw Hill | location=Berkely, California | year=1980 | isbn=0-931988-34-9}}</ref> 초기의 마이크로프로세서는 하나의 칩으로 만들어졌으나, 점점 다른 하드웨어 요소들을 집적시키는 경향이 있다. 따라서 CPU-코어라는 말로 다른 요소들과 구별한다.[[중앙 처리 장치]](CPU)가 컴퓨터 전체 시스템의 위치와 입장에서 나온 말이라면, 마이크로프로세서는 동작 방식에서 나온 말로 서로 같은 것이다.
<!-- 많으면 몇 개의 집적 회로에 집적시켜<ref>Krishna Kant ''Microprocessors And Microcontrollers: Architecture Programming And System Design''PHI Learning Pvt. Ltd., 2007 ISBN 81-203-3191-5 page 61, describing the iAPX 432</ref> 만든 반도체 소자이다. '''소형 처리기'''라고도 한다. CPU와 거의 [[동의어]]로 불리지만 그 밖에도 [[비디오 카드]]의 [[그래픽 처리 장치|GPU]] 같은 마이크로프로세서도 존재한다.-->

마이크로프로세서 개발자는 기계어 설계를 하고, 기계어를 수행하기 위해 [[마이크로코드]]를 작성한다. 기계어를 분류하여 공통점을 찾아내어 한개의 기계어 코드가 실행되는 과정을 단계별로 기능적 블럭으로 나눈다. 마치 C언어의 함수처럼 기능별로 작성 한다. 이것을 디지털회로와 결합하여 동작을 하게 된다. 마이크로코드는 마이크로프로세서 내의 [[마스크 롬]]에 저장되고 사용자는 변경할 수 없다. 마스크 ROM마이크로코드 변경이라는 것은 곧 기계어 코드 변경을 의미하기 때문이다. ROM에 저장 된 정해진 코드는 마이크로프로세서의 입장에서는 부담이 될 수 있다. 고 기능이라면 크게 신경 쓸 일은 아니지 저속, 저전력 등에서는 신경 쓸 일이다. 따라서 마이크로코드 자체를 논리회로로 대처하는 경우도 있다. NMOS [[6502]] {{llang|en|([[:en:MOS Technology 6502|MOS Technology 6502]])}}나 일부의 RISC 마이크로프로세서는 PLA와 순차 논리회로(하드웨어 방식)로 대체 한다.<ref name="6502_PLA">{{웹 인용|url=http://forum.6502.org/viewtopic.php?f=8&t=2208&start=90#p21253|제목=Breaking 6502 apart|확인날짜=2015-06-20}}</ref> <!--메모리에 있는 기계어를 가져오는 패치부터 기계어 기능을 판단하고 이에 맞는 수행은 마이크로코드의 실행에 의해 동작 된다. 마이크로코드를 실행하는 장치라는 의미에서 마이크로프로세서라고 부른다. -->

마이크로프로세서는 컴퓨터의 CPU의 기능을 한 개 또는 몇 개 이내의 집적회로에 집약한다.<ref name=Osborne80/>  마이크로프로세서는 디지털 데이터를 입력받고, 메모리에 저장된 지시에 따라 그것을 처리하고, 결과를 출력으로 내놓는 다목적의 프로그램 가능한 기기이다. 내장메모리가 있다는 점에서 순차 논리의 예이다. 마이크로프로세서는 2진수로 대표되는 숫자와 기호를 바탕으로 작동한다.

한 개 또는 소수의 칩에 전체 CPU를 집적하는 것은 처리 전력의 비용을 상당히 줄였다. 집적회로 프로세서는 고도로 자동화된 과정에 따라 대량생산되기 때문에, 생산 비용이 적다. 단일 칩 프로세서는 오류가 발생할 가능성이 있는 전기 배선의 수가 매우 적기 때문에, 신뢰성이 올라간다.

마이크로프로세서 이전의 작은 컴퓨터들은 중간 규모나 소규모 집적회로의 기판에 납땜을 이용해서 주로 만들어졌다. 마이크로프로세서는 이것을 한 개나 소수의 대규모 집적회로에 집적시켰다. 마이크로프로세서의 계속된 용량의 증가는 다른 종류의 컴퓨터들을 거의 구식으로 만들어버렸고, 현재는 가장 작은 임베디드 시스템이나 휴대용 기기에서부터 가장 큰 메인프레임이나 슈퍼컴퓨터에까지 쓰이고 있다.

== 역사 ==
"마이크로프로세서"라는 용어를 처음 사용한 것은 1968년 발표된 시스템 21 소형 컴퓨터 시스템에 쓰인 맞춤식 집적 회로를 설명한 [[비아트론|비아트론 컴퓨터 시스템즈]]이다.

1971년에 인텔은 [[레슬리 배다스]]의 감독 하에 최초의 [[4비트]] 마이크로프로세서 4004를([[인텔 4004]]), 1972년에 8비트 마이크로프로세서 8008을 선보였다. 최초의 마이크로프로세서는 일반 컴퓨터의 중앙처리장치에서 주기억장치를 제외한 연산장치, 제어장치 및 각종 레지스터들을 단지 1개의 [[집적 회로|IC]] 소자에 집적시킨 것이다.

오늘날은 이를 흔히 '''MPU'''('''m'''icro'''p'''rocessing '''u'''nit)라고 부르기도 한다.

== 개요 ==
용도에 따라 입·출력 등의 주변 회로나 메모리를 내장한 것도 있어서 하나의 LSI 또는 컴퓨터 시스템으로서 동작하는 것을 ‘원칩 마이크로컴퓨터’라고 부른다. 마이크로프로세서는 하나의 LSI칩으로 기능을 수행할 수도 있지만 여러 개의 LSI로 구성된 것도 존재한다.

마이크로프로세서가 개발되기 이전까지 CPU는 [[진공관]]이나 [[트랜지스터]]와 같은 단독 소자로 구성되거나 [[집적회로]]가 개발되고 나서도 많은 집적회로의 편성으로서 구성되어 왔었다. 집적회로의 규모가 커지고 많은 회로를 삽입할 수 있는 기술이 등장해 하나의 대규모 집적회로에 CPU 기능을 수행할 수 있게 되었다. 이에 따라 생산과 이용이 편리하게 되고 대량 소비가 가능해짐에 따라 성능은 증가하고 가격도 점차 떨어져 갔다.

[[인텔]]의 [[고든 무어]]가 1965년에 약 18개월마다 2배가 된다고 하는 ‘[[무어의 법칙]]’을 내놓은 뒤 오늘에 이르기까지 이 법칙에 따라 마이크로프로세서의 성능은 계속 향상되고 있다. 현재 마이크로프로세서는 [[슈퍼 컴퓨터]]부터 소형 [[노트북 컴퓨터]]까지 다양한 종류의 컴퓨터에 탑재되고 있다.

== 마이크로프로세서의 구성 ==
마이크로프로세서는 제어장치(명령어 해석 및 실행), 레지스터, ALU등의 기본 구성을 갖는다.
* 제어장치(명령어 해석 및 실행) : 마이크로코드의 실행에 의해 메모리의 기계어 코드를 읽고, 어떤 기능인지를 결정한 다음 해당 기능을 실행한다.
* [[프로세서 레지스터|레지스터]]
** 범용 레지스터 : 데이터 처리를 위해 데이터를 저장한다.
** 특수 레지스터 : 특수 기능을 위해 설정된 레지스터이다. 레지스터의 기능이 결정되어 있다.
*** SP (Stack Pointer) : 스택 구조를 위한 포인터이다. 보통 push에 의해 데이터가 저장될 때, 메모리의 주소가 감소하는 것이 일반적이다. 8051은 반대로 증가한다. PUSH, POP 등의 스택 명령어와 CALL/RET에 의한 복귀주소가 저장된다. [[액세스]]단위는 8비트 마이크로프로세서는 8비트 단위로 32비트 CPU에서 32비트 단위가 기본 단위이다.
*** PC (Program Counter) 또는 IP(Instruction Pointer) : 실행해야 하는 기계어 명령어가 존재하는 메모리 주소값을 저장한다. 따라서 이 레지스트의 값에 의해 기계어 명령어가 [[패치]]되어 읽혀 명령어 해석되어 실행된다.
*** 인덱스 레지스터 : 데이터를 처리할 주소값을 저장한다. 이 레지스터 값을 데이터 액세스할 때 주소값으로 활용한다. 데이터 포인터를 저장하는 레지스터이다.
*** FLAG, [[인터럽트]] 제어, 상태 저장, CPU 제어, 기타를 저장하는 레지스터.
* 정수형 [[산술 논리 장치]](ALU) : 수학연산, 논리연산, 쉬프트 등의 수학적 연산을 담당한다.
** [[사칙연산]] : 더하기, 빼기, 나누기, 곱하기를 한다. 정수형 ALU가 대부분이고, 기본이기 때문에 나누기 시 몫과 나머지로 처리되어 결과가 나오고 이것은 2개의 레지스터에 나누어 저장된다.
** [[논리 연산]] : 비트별로 AND, OR, XOR, NOT 등의 논리연산을 실행한다.
** [[쉬프트 연산]] : 레지스터의 값을 왼쪽 또는 오른쪽으로 이동 시킨다. 보통 C(Carry)와 결합하여 실행되는 경우도 있다.
* FLAG : ALU에서 실행된 결과와 함께 여러 가지 보조결과를 저장한다.
** C (Carry) : 연산결과 MSB의 비트에서 발생하는 올림 또는 빌림의 결과를 저장한다.
** N (Negative, 또는 S (Sign)) : 정수형 표현에서 음수를 나타내는 비트인 MSB가 1인 경우를 나타낸다.
** Z (Zero) : 연산결과 모든 비트가 0임을 나타낸다.
** O (Overflow) : 연산결과 정해진 비트수를 벗어나 숫자가 변형된 상태를 나타낸다.

초기에는 위의 요소로 구성 된 마이크로프로세서가 하나의 칩으로 만들어졌다. 그러나 [[마이크로컨트롤러]](MCU)등이 나오면서 마이크로프로세서와 메모리 기타 컴퓨터를 이루는 요소들이 합쳐지기 시작했다. 8051등의 마이크로컨트롤러와 ARM 등이 그렇다. 따라서 한 칩에 마이크로프로세서 뿐만 아니라 기타 요소를 구분할 필요가 생긴다. 초기의 마이크로프로세서 모듈 만을 CPU 코어라는 말을 사용하기도 한다.

== 구조 ==
마이크로프로세서 내부의 배열은 설계된 시기나 사용되는 목적에 따라 다양하다. 집적회로의 집약성은 한 개의 칩에 집적될 수 있는 [[트랜지스터]]의 개수, 연결 될 수 있는 배선의 개수, 칩이 견딜 수 있는 열의 한계 등에 따라 결정된다. 발전하는 기술은 더 복잡하고 강력한 칩을 생산 할 수 있게 만든다.

가상의 최소한의 마이크로프로세서는 산술논리장치(ALU)와 제어 논리 섹션만을 포함할 수 있다. ALU는 덧셈, 뺄셈, 그리고 AND나 OR같은 연산을 수행한다. ALU의 각각의 연산은 상태 레지스터에 플래그를 모아서 마지막 연산의 결과를 표시한다. 제어 논리 섹션은 메모리로부터 지시 연산 코드를 되찾고, ALU의 연산의 결과가 실행하라고 하는 어떤 지시던지 실행한다. 한 개의 연산 코드는 경로, 레지스터, 그리고 프로세서의 다른 요소들에게 영향을 끼칠 수 있다.

집적회로 기술이 발전하면서, 한 개의 칩에 점점 더 복잡한 프로세서를 생산할 수 있게 된다. 데이터 객체의 크기는 점점 더 커져지고, 칩에 더 많은 트랜지스터가 포함되는 것은 4비트나 8비트의 워드를 오늘날 64비트까지 늘릴 수 있게 한다. 프로세서 아키텍처에 추가적인 특징이 생겼다. 더 많은 온칩 레지스터는 프로그램의 속도를 높이고, 복잡한 명령은 더 정교한 프로그램을 가능하게 한다. 예를 들어, [[부동소수점]] 연산은 8비트 마이크로프로세서에서는 가능하지 않았고, 소프트웨어 안에서만 실행되어야 했다. 부동소수점 유닛의 집적은 처음엔 분리된 집적회로에서 실현된 후에 단일 마이크로칩에서 실현되었고, 부동소수점의 연산의 속도를 높였다.

가끔, 집적회로의 물리적인 한계가 비트 슬라이스 접근법 같은 실행이 필요하게 만든다. 긴 워드를 한 개의 집적회로에서 처리하는 대신에, 여러 개의 회로에서 각각의 데이터 워드를 병렬로 처리하는 방식이다. 이 방식이 추가적인 논리를 처리해야 하지만, 예를 들어, 각각의 슬라이스에서 올림이나 오버플로 같은, 즉 각각 4비트밖에 안 되는 집적회로가 32비트의 워드를 처리할 수 있게 한다. 한 개의 칩에 많은 수의 트랜지스터를 집적시키는 능력은 프로세서로서 한 개의 같은 다이에 메모리를 집적시키는 것을 가능하게 한다. 이 CPU 캐시는 오프칩 메모리보다 더 빠른 접근이 가능하다는 장점이 있고 시스템의 처리 속력을 증가시킨다. 최근을 제외하고는 프로세서의 클럭 수의 증가속도는 외장 메모리의 그것보다 더 빨랐고, 따라서 더 느린 외장 메모리가 프로세서를 지연시키지 않으려면 캐시 메모리가 필요하다.

=== 특수한 목적의 설계 ===
마이크로프로세서는 범용 시스템이다. 여러 개의 특화된 처리기기가 기술을 따라 발전해왔다. 마이크로컨트롤러는 임베디드 시스템에 지엽적인 기기와 마이크로프로세서를 집적시켰다. DSP는 신호처리에 특화되어있다. GPU는 없거나 제한되거나 아주 일반적인 프로그래밍 기능이 있다. 예를 들어 1990년대의 GPU는 대부분 프로그래밍이 불가능하거나 최근에 와서야 프로그램 가능한 버텍스 셰이더같은 제한된 기능이 생겼다.

32비트 프로세서는 더 많은 디지털 논리를 가지고 있고, 더 많은 디지털 노이즈를 발생시키며, 더 높은 정적 소비전력을 가지고 있다.<ref>
Kristian Saether, Ingar Fredriksen.
[http://www.atmel.com/images/doc7926.pdf "Introducing a New Breed of Microcontrollers for 8/16-bit  Applications"].
p. 5.
</ref> 그래서 8비트나 16비트 프로세서가 32비트 프로세서보다 단일 칩 시스템이거나, 극히 저전력을 요구하는 경우가 많으며 고해상도 아날로그 디지털 신호 변환기와 같은 노이즈에 민감한 온칩 아날로그 전자기기에 포함되는 혼합 신호 집적회로의 부분으로서는 더 적합하다.

비슷한 공정으로 생산될 때, 8비트 마이크로프로세서는 32비트 마이크로프로세서보다 작동할 때나 작동하지 않을 때 더 적은 전력을 소비한다.

하지만, 일부는 부동소수점 연산같은 작업에서 32비트 마이크로프로세서보다 8비트 프로세서가 더 많은 클럭의 회전을 하기 때문에, 평균적으로 8비트 프로세서가 더 많은 전력을 소비한다고 한다.

== 마이크로프로세서 동작 ==

=== 동작 주기에 의한 마이크로프로세서 동작 ===

{{본문|명령 주기}}
컴퓨터가 동작한다는 말은 곧 마이크로프로세서가 연속적으로 [[명령 주기]]를 반복하여 [[기계어]] 코드를 실행한다는 말과 같다. 프로그래밍에 의해 만들어진 메모리 속의 기계어 코드를 실행함으로써 컴퓨터가 사용자가 원하는 기능을 수행한다.

=== 마이크로프로세서 동작 모드 ===

==== 권한 수준 ====

[[운영 체계]]를 설계할 때, 마이크로프로세서가 [[응용 프로그램]] 실행인지 시스템 실행인지에 따라 특정 기능을 제약할 수 있다. 예를 들어 [[커널]]을 동작 시킬 때 모든 기계어 명령은 동작하나, 사용자 모드에서 하드웨어 관련 기계어 명령은 제한할 수 있다.

동작 모드 :
* 슈퍼바이저 모드 : 전원이 인가되고 리셋 신호가 오거나 예외상황(인터럽트 등)이 발생하면 이 동작 모드로 전환된다. 운영 체제의 커널 실행이 대표적 모드이다. 사용자의 요청에 의한 응용 프로그램을 실행할 때는 커널이 사용자 모드로 전환하면서 응용 프로그램용 기계어 코드를 실행한다.
* 사용자 모드([[사용자 공간]]) : 사용자의 요청에 의해 실행되는 응용 프로그램 실행 시 작동하는 모드이다. 컴퓨터 시스템은 여러개의 [[프로세서]]가 동작하는 것이 일반적이기 때문에, 각 응용 프로그램을 시간을 분할하여 실행할 필요가 있다. 어느 한 프로세서가 동작하다가 [[워치독 타이머]]나 기타에 의한 인터럽트에 의해 프로세서가 강제 종료되어 커널(슈퍼바이저 모드)로 전환된다. [[MMU]]가 존재하는 컴퓨터 시스템에서는 응용 프로그램이 이 기능을 사용하기 때문에 메모리 액세스 할 때 동작한다.

각 마이크로프로세서마다 구별되는 방식은 차이가 있다. x86 계열은 0,1,2,3 등 4단계의 링 구조로 되어 있고, [[68000]] 계열은 두 단계로 나누어 있다.

==== 아이들 모드 ====

마이크로프로세서가 특정 일을 할 필요가 없거나,  전원 등의 이유로 동작을 멈추었다가 필요할 때 동작을 재게할 수 있도록 할 수 있다. 마이크로프로세서가 동작을 멈추는 상태를 아이들 모드(idle mode) 또는 슬립 모드(sleep mode)라고 한다. 이 모드 상태가 되면 최저 전력이 사용된다. 보통 하드웨어로 깨울 수 있는 방식을 많이 사용한다. 이 모드로 전환을 위해 기계어 명령이 제공된다. 경우에 따라 마이크로프로세서에서 사용하는 클럭 회로도 제어할 수 있다.

== 임베디드 애플리케이션 ==
전통적으로는 컴퓨터와 관련되어 있지 않은 수많은 제품들이 마이크로프로세서를 포함한다. 이것들은 크거나 작은 가전제품, 차, 차키, 공구와 테스트 기기, 장난감, 전등 스위치나 전기회로 차단기를 포함한다. 휴대폰, dvd비디오 시스템, hdtv방송시스템 같은 것들은 기본적으로 강력하고 저비용인 마이크로프로세서를 필요로 한다. 최근에 엄격해진 환경 오염 통제 기준은 자동차의 다양한 주행 상황에 대응하여 최적의 배출 조절을 위해 마이크로프로세서 엔진 관리 시스템을 요구한다.

마이크로프로세서 컨트롤 프로그램(임베디드 소프트웨어)는 제품의 재설계를 최소화하면서 성능의 업그레이드를 시키면서, 제품 라인의 다양한 요구에 맞춰 설계될 수 있다.

시스템의 마이크로프로세서 컨트롤은 전자기계컨트롤이나 목적이 정해진 전자 제어기는 불가능한 제어 전략을 제공한다. 예를 들어 자동차의 엔진 관리 시스템은 엔진의 속도나 부담, 내부의 온도, 그리고 다른 상황의 정보에 맞춰서 자동차가 연비에 맞게 주행할 수 있도록 점화타이밍을 조절 할 수 있다.

== 같이 보기 ==
* [[마이크로아키텍처]]

== 각주 ==
<references />

== 외부 링크 ==
* {{위키공용분류-줄}}

{{반도체}}
{{CPU 기술}}
{{마이크로컨트롤러}}
{{전거 통제}}

[[분류:마이크로프로세서| ]]
[[분류:마이크로컨트롤러]]
[[분류:마이크로컴퓨터]]
[[분류:임베디드 시스템]]
[[분류:컴퓨터 시스템]]
[[분류:전자공학]]
[[분류:미국의 발명품]]
[[분류:컴퓨팅 하드웨어의 역사]]