
CPU(Central Processing Unit : 중앙처리장치)를 다르게는 MPU(Micro Process Unit)라고도 부릅니다.
컴퓨터에서 이루어지는 연산 작업과 명령 실행 등의 동작에 관계되는 여러 부품과 소자들을 '마이크로 프로세서'라고 하는 하나의 칩에 모아서 만들어집니다.
이러한 마이크로 프로세서는 다음과 같이 4가지의 구성요소로 나눕니다.

1.실행 유닛(EU : Execution Unit)
실행 유닛은 마이크로 프로세서의 각 명령어를 수행하는 유닛입니다.
실행유닛은 ALU(Arithmetic Logic Unit)와 제어 유닛(CU:Control Unit), 레지스터로 구성됩니다. ALU에서는 덧셈이나 비교 연산과 같은 산술 연산, 논리연산을 수행한 후 중간 결과를 레지스터에 보관합니다.
2. 명령어 유닛(IU : Instruction Unit)
명령어 유닛(Instruction Unit)은 메모리에서 가져온 명령어를 실행유닛에서 정확히 수행할 수 있도록 제어하는 유닛입니다. 이때 제어 유닛은 ALU나 레지스터들이 잘 동작되도록 하여줍니다.
3. 어드레싱 유닛(AU : Addressing Unit)
어드레싱 유닛은 CPU가 메모리나 입출력 장치에서 데이터를 읽거나 쓸 때, 메모리나 입출력 어드레스를 만들어 주는 유닛입니다.
4. 버스 인터페이스 유닛(BIU : Bus Interface Unit)
버스 인터페이스 유닛은 어드레스 버스, 데이터 버스, 컨트롤 버스 등의 시스템 버스를 통해서 마이크로 프로세서 외부와 연결시켜 주는 유닛입니다.

마이크로 프로세서는 데이터 버스를 통해서 데이터를 메모리에 읽거나 쓸 수 있으며, 데이터를 읽거나 쓰는데 사용할 메모리 위치는 어드레스에 의해서 정해집니다.
마이크로 프로세서는 어드레싱 유닛에서 어드레스를 계산한 후 어드레스 버스로 보내게 되며, 데이터를 읽거나 쓰는 일은 버스 유닛에서 수행합니다.
버스 유닛은 메모리의 어드레스를 내 보내고 메모리에 쓸 데이터를 내 보내거나, 어드레스를 내 보내고 메모리에서 데이터를 읽어 들입니다. 또한 버스 유닛은 마이크로 프로세서에서 수행할 명령어를 읽을(Fetch)때에도 데이터를 읽을 경우와 마찬가지로 동작합니다.
버스 유닛에서 데이터를 읽어 들였을 경우는 그 데이터가 레지스터에 저장됩니다. 그러나 버스 유닛이 명령어를 읽어들였을 경우는 그 명령어가 프리패치(Prefetch) 큐(que)에 저장됩니다.
명령어 유닛은 프리패치 큐에서 명령어를 읽어들여 해석하고(Decode), 해석된 명령어(Decoded Instruction)를 수행 유닛으로 보냅니다. 그러면 수행 유닛에서는 해석된 명령어에 따라서 ALU와 레지스터가 제어되어 명령어에 맞는 동작을 수행하게 됩니다.

마이크로 프로세서가 동작하는데 필요한 입.출력 데이터값이나 데이터가 저장된 어드레스(주소), 연산 결과값 등을 기억하는 용도로 쓰이는 CPU 내부의 임시저장장소를 레지스터라고 하는데, 아래와 같은 여러 용도의 레지스터를 사용하고 있습니다.


클럭(Clock)

컴퓨터 내부에는 CPU와 디지털 회로 장치들이 일정한 속도로 동기화 하여 작동 하도록 전기적인 펄스(pulse)인 '클럭'을 발생시키는 일종의 시계가 있습니다.
메인보드에 있는 이것을 클럭 발생기(clock generator)라고 하는데, 주로 CPU소켓 주위나 전원부 근처에서 볼 수 있습니다.
컴퓨터의 성능과 속도는 CPU의 속도로 결정된다는 것을 모르는 사람은 드물 것입니다.
그 속도는 주파수를 기준으로 Mhz 단위로 표시하고 있는데, 1 Mhz는 일 초에 1백만 번의 주파수를 발생시킨다는 뜻입니다.
초기에 쓰던 XT 컴퓨터는 4.8Mhz, 286 컴퓨터는 8Mhz의 속도였는데 이때 XT에서는 8284, 286에서는 88284라는 클럭발생기를 사용했습니다.
'386DX-33, 486DX-66, 486DX-100, 펜티엄-66, 펜티엄-90, 펜티엄-100' 등의 CPU 이름 뒤에 붙어 있는 숫자가 바로 클럭주파수를 나타내는 숫자입니다. 486DX-66이라는 CPU는 66Mhz의 속도를 내는 CPU라는 뜻입니다. 그렇다면 같은 486 CPU인데도 속도가 모두 다른 이유를 이해할 수 있을 것입니다. 이는 클럭발생기에서 발생시키는 클럭수가 다르기 때문입니다.
클럭 제너레이터 안에는 수정(水晶, Crystal)이 들어 있는데, 수정은 화학적 구성으로 보면 SiO2로 '이산화규소'라고합니다.


보석으로도 취급되는 수정은 전기를 통하게 되면 진동을 하는데, 이러한 성질을 이용하여 시계에도 쓰입니다.
이러한 수정의 성질에서 더욱 놀라운 것은 특정 전압이나 전류에 따라서 주파수가 달라지게 된다는 것입니다.

클럭은 신호가 한 번 떨어질 때의 시간 간격으로 각 부품동작의 기준이 되는 주기가 됩니다.
즉, 한 신호 뒤에 다시 다음 신호를 보낼 때까지의 간격이 클럭이라는 뜻입니다.
따라서 클럭발생기는 컴퓨터 동작의 기준이 되는 시계와도 같습니다.
이 때문에 클럭은 간격이 정확해야 합니다.
클럭이 느렸다 빨랐다 하면, 다른 부품들도 느려졌다 빨라졌다 정신 못차리기 때문입니다.
컴퓨터는 한 번 신호를 보낼 때마다 한 번 씩 동작을 하므로, 클럭수가 높을수록 같은 시간에 더 많은 일을 할 수 있습니다.
그래서 이 클럭수를 높이기 위해서 많은 노력을 기울이지만 쉬운 일은 아닙니다.
주변장치와의 속도를 맞추면서 CPU 속도를 설계해야 하기 때문입니다.
클럭수가 486DX-100 CPU보다 느린 펜티엄-90 CPU가 실제 작업속도는 더 빠른 이유도 주변 부품과의 자료교환이 좀더 원활하도록 설계되었기 때문입니다.

CPU의 클럭 속도를 빠르게하기위하여 클럭 발생기에서 만들어내는 클럭(외부 클럭)을 CPU 내부의 코어에서 2배 내지 3배 더 빠르게 동작시키는 배수클럭(Clock Doubling) 기술이 개발되었으며, 이를 최초로 도입한 CPU는 1992년에 등장한 인텔사의 'i486DX2'였습니다.
이 CPU는 클럭 조정을 통하여 더 빠른 속도로 CPU를 동작하게하는 '오버클러킹'이 가능하였습니다.
일부의 비양심적인 업자들이 이를 악용해서 50MHz 제품을 오버클러킹해 66MHz 제품으로 속여 파는 경우가 많아 문제가 되기도 하였습니다.
이후로 '오버클럭'은 컴퓨터를 좀 쓴다하는 파워유저들의 취미생활(?)이 되었으며, CPU 제조업체 및 반도체 개발업체인 인텔과 몇몇 회사에서 공식적인 오버클럭킹 대회를 개최하기도 하였습니다.
이러한 대회를 통해 오버클럭킹에 많은 관심을 가진 컴퓨터 애호가들이 있음을 확인할 수도 있으며, 간혹 인텔에서 신제품을 공개할 때 전문가에 의해 오버클럭킹을 실행하는 경우도 있습니다.
오버클럭을 수행하면 컴퓨터의 성능이 올라가지만, 제조업체가 권하는 방식이 아니며, 하드웨어의 수명을 떨어트리는 결과를 가져올 수도 있으니 주의해야 합니다.
CPU의 클럭 속도가 올라가면서 이에 따르는 발열(發熱) 문제가 대두되었습니다. 그래서 현재 CPU 방열판과 쿨러는 없어서는 안되는 필수품이 되었습니다.
캐쉬 메모리(cache memory)
CPU의 동작 속도를 개선하기위한 여러가지의 기술이 개발.적용되면서 CPU는 엄청나게 빠른 속도로 작동하게 되었습니다.
그러면서 주기억장치(RAM)와 주변 장치 등에서의 데이터 전송에서 낮은 속도의 장치에 따른 '병목현상'이 문제가 되었습니다.

CPU는 메인 메모리(RAM)로부터 CPU 내부의 기억장치인 레지스터에 데이터를 읽어들여 작업을 합니다. 그러나 CPU의 처리 속도와 RAM의 처리 속도는 많은 차이가 납니다. 이러한 속도의 차이를 개선하기위하여 CPU와 RAM 사이에 고속의 메모리(SRAM)를 두어, 자주 읽거나 쓰는 데이터를 임시로 저장하여 두고 사용하면 작업 속도를 높일 수 있습니다. 이러한 고속 메모리를 캐쉬(cache)라고 합니다.

이러한 캐쉬 메모리의 개념은 1977년의 IBM 시스템 360/85에 최초로 채용되었는데, PC에서 CPU에 처음으로 캐쉬를 내장한 것은 인텔의 i486이었습니다. 1989년에 발표된 i486 CPU는 8KB의 SRAM으로 구성된 명령어 캐시와 데이터 캐쉬를 추가하였습니다.
이후에 나온 CPU들은 첫번째 캐쉬(L1)에 대한 2차(L2), 3차(L3)의 보조 캐쉬를 채용하기도 하였습니다.


멀티코어(multi-core) 프로세서
CPU의 발전 과정에서 2000년대 초.중반까지 인텔과 AMD의 경쟁은 클럭 속도를 높이는 방향으로 치열하게 전개되었습니다.
그러나 CPU의 클럭 속도를 올리는데에는 한계가 있습니다. 클럭 주파수가 높아지면 그에 비례하여 CPU가 소모하는 전력이 늘어나고, 소모 전력이 늘어나면 발열도 그만큼 증가하는데, CPU 코어의 재료인 반도체는 도체와 반대로 열을 받으면 저항이 줄어들기 때문에 에너지 누설이 추가로 생기는 동시에 이 발열을 잡지 않으면 과전류가 흘러 코어가 아예 타버릴 수도 있습니다.
인텔은 CPU의 성능 향상 방식으로 클럭 향상을 고집했다가 펜티엄4 프레스캇에서 이 사실을 아주 뼈아프게 체험했습니다.
(인텔 펜티엄 프레스캇에 대한 유머들 → http://bittalk.org/thread85898.html )
이렇게 클럭 속도 상승으로 CPU 성능을 높이는 방식의 한계에 도달한 인텔이나 AMD 같은 CPU 제조사들은 하나의 CPU에 두개 이상의 코어를 탑재하는 멀티코어 기술로 전환하게 되었습니다.

2005년에 AMD에서 최초의 데스크탑용 듀얼 코어 CPU인 '애슬론64 X2'를 출시하면서 이후로 멀티코어가 대세가 되면서 데스크탑 컴퓨터, 그리고 현재는 모바일 기기까지 듀얼코어, 멀티코어를 쓰게 되었습니다.
듀얼 코어(dual-core) 프로세서는 두 개의 코어를 포함하고 있으며, 트리플 코어(triple-core) 프로세서는 세 개의 코어를 포함하고 있고, 쿼드 코어(quad-core)는 네 개의 코어를 포함하고 있고, 헥사 코어(hexa-core) 프로세서는 여섯 개의 코어를 포함하고 있습니다. 옥타 코어(octa-core) 프로세서는 여덟 개의 코어를 포함하고 있습니다. 마그니 코어(magni-core) 프로세서는 열두개의 코어를 포함하고 있습니다.
하지만 멀티코어 프로세서는 단순히 3.0GHz인 프로세서 두 개를 꽂는다고 6.0GHz의 능력을 내는게 아닙니다. 프로그램이 처리해야 할 계산 작업 중에서 여러개의 프로세서가 맡아서 처리할 수 없어서 꼭 하나의 프로세서만 써야 하는 작업이 생기면 나머지 프로세서는 그 작업이 처리되는 동안 놀고먹는 영 좋지 않은 모양새가 됩니다. 이렇게 프로그램 내부에서 역할 분담(병렬화, Parallelization)이 되지 않는 부분이 많아지면 프로세서를 아무리 많이 늘려도 성능 향상에 한계가 생깁니다. 이를 전문 용어로 암달의 법칙(Amdahl's Law)이라 합니다.(암달의 법칙 - 위키백과)
따라서 CPU에 포함된 코어 여러개의 성능을 제대로 끌어내려면 여러개의 코어에게 일거리를 효율적으로 배분하도록 프로그램을 짜줘야 합니다. 멀티프로세싱에 최적화가 되어있지 않은 프로그램은 CPU 처리량이 더 필요해도 다른 코어의 도움을 받지 못하고 1번 코어에서만 비비적대며 돌아가거나, 심지어는 여러개의 코어가 하나의 프로그램을 맡아서 처리하려고 싸우는 동안 실행 속도가 오히려 더 떨어져버리는 참사가 벌어질 수 있습니다. 따라서 실행 성능이 중요시되는 프로그램, 특히 많은 데이터양을 처리해야하고 넉넉한 시스템 자원을 필요로 하는 '컴퓨터 게임'은 처음 프로그램을 짤 때부터 멀티코어 지원을 생각해야되는 시대가 되었습니다.