중앙처리장치(CPU)는 인간의 두뇌에 해당하는 부분으로, 주기억장치에서 프로그램 명령어와 데이터를 읽어와 처리하고 명령어의 수행 순서를 제어한다.
ALU(Arithmetic and Logic Unit)
덧셈, 뺄셈 같은 산술연산과 배타적 논리합, 논리곱, 논리합 같은 논리연산을 수행하는 장치이다. 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보낸다.
CU(Control Unit)
Instruction register에 저장된 명령어를 해석하고, 컴퓨터를 구성하는 장치들을 제어할 제어신호를 생성하여 동작을 지시하는 장치이다.
Register
CPU 내부에서 처리할 명령어나 연산에 필요한 데이터, 연산 결과 등을 임시로 저장하는 장치이다. CPU의 종류에 따라 사용할 수 있는 레지스터의 개수와 크기가 다르며, 범용 레지스터와 특수목적 레지스터로 구분할 수 있다.
개인용 컴퓨터와 같은 소형 컴퓨터에서는 CPU를 마이크로프로세서라고도 부른다.
Instruction Set은 CPU가 실행할 명령어의 집합으로, CPU 종류에 따라 형식과 종류가 다르다. 명령어는 연산 코드(OP Code)와 피연산자(Operand)로 구성되어있는 것이 기본적인 형식이다.
연산 코드(OP Code)
연산 코드는 실행할 연산을 나타낸다. 길이가 n bit일 때, 최대 2^n개의 연산을 정의할 수 있으며, 연산의 종류는 크게 4가지로 나누어진다.
피연산자(Operand)
피연산자에는 연산에 필요한 데이터 및 저장 위치에 대한 정보를 나타낸다.
다음은 MIPS CPU의 명령어 형식이다.
CPU는 프로그램을 실행하기 위해 주기억장치에서 명령어를 순차적으로 인출(fetch)하여 해석(decode)하고 실행(execute)하는 과정을 반복한다. CPU가 주기억장치에서 하나의 명령어를 인출하여 실행하는 일련의 과정을 Instruction Cycle이라고 한다.
Instruction Cycle은 크게 명령어 인출 사이클과 명령어 실행 사이클로 나눌 수 있는데, 인출 사이클, 실행 사이클, 간접 사이클, 인터럽트 사이클로 세분화하기도 한다.
인출 사이클과 실행 사이클이 항상 수행되는 반면에, 간접 사이클과 인터럽트 사이클은 간접 주소 지정 방식이 필요할 때나 인터럽트 요구가 있을 때만 수행된다.
인출 사이클은 메모리로부터 명령어를 읽어오는 과정으로, 현재 PC에 있는 주소의 내용을 IR에 가져오게 한다. 내부의 구체적인 마이크로 연산 과정은 다음과 같다.
인출 사이클을 통해 읽어온 명령어가 간접 주소지정방식인 경우, 실행 사이클 이전에 수행되는 사이클이다. 명령어의 피연산자 부분에 있는 주소를 MAR로 가져와 기억장치의 해당 주소의 내용(유효 주소)를 MBR을 거쳐 IR의 피연산자 부분에 넣어준다.
실행 사이클은 명령어를 실행한다. 먼저, 피연산자를 MAR로 보내어 기억장치에서 데이터를 가져온다. 데이터는 MBR에 저장하고, Op Code에 알맞은 연산을 수행한다.
인터럽트 사이클은 실행 사이클이 끝난 후 수행되는 사이클로, 다음 순서로 예정된 명령어가 아닌 다른 명령어를 실행한다.
일반적인 경우, 실행 사이클이 끝났다면 다시 인출 사이클로 돌아가 PC에 저장되어있는 주소의 명령어를 인출한다. 그러나, 인터럽트 신호가 들어온 경우에는 인터럽트 사이클이 수행된다. 구체적인 수행 과정은 다음과 같다.