CPU가 수행해야 하는 동작
- 명령어 인출(Instruction fetch) : 기억장치로부터 명령어를 읽어온다
- 명령어 해독(Instruction decode) : 수행해야 할 동작을 결정하기 위하여 명령어를 해독한다
- 데이터 인출(Data fetch) : 명령어 실행을 위하여 데이터가 필요한 경우에는 기억장치 혹은 I/O 장치로부터 그 데이터를 읽어온다
- 데이터 처리(Data process) : 데이터에 대한 산술적 혹은 논리적 연산을 수행한다
- 데이터 저장(Data store) : 수행한 결과를 저장한다
- 첫 번째 및 두 번째 동작은 모든 명령어들에 대하여 공통적으로 수행
- 세 번째부터 다섯 번째까지 동작들은 명령어에 따라 필요한 경우에만 수행
CPU의 기본 구조
- 산술논리연산장치(Arithmetic and Logical Unit, ALU)
- 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진 하드웨어 모듈
- AND, OR, NOT 연산 등
- 레지스터
- CPU 내부에 위치한 기억장치
- 액세스 속도가 컴퓨터의 기억장치 중에서 가장 빠르다
- 내부 회로가 복잡하여 큰 공간을 차지하므로 많은 수를 CPU 내에 포함시키기 어렵다
- 따라서 특수 목적용 레지스터들과 적은 수의 일반 목적용 레지스터로 구성
- 제어 유니트
- 프로그램 코드(명령어)를 해석하고, 그것을 실행하기 위한 제어 신호들(control signals)을 순차적으로 발생시키는 하드웨어 모듈
- 명령어 실행에 필요한 각종 정보들의 전송 통로와 방향을 지정
- CPU 내부 요소들과 시스템 구성 요소들의 동작 시간도 결정
- CPU 내부 버스
- ALU와 레지스터들 간의 데이터 이동을 위한 데이터 선들과 주소 선들, 제어 유니트로부터 발생되는 제어 신호들을 전송하는 선들로 구성
- 이러한 내부 버스 선들은 외부의 시스템 버스와는 직접 연결되지 않으며, 반드시 버퍼 레지터 혹은 인터페이스 회로를 통하여 시스템 버스와 접속
명령어 실행
- 한 개의 명령어를 실행하는데 필요한 전체 과정을 명령어 사이클(instruction cycle) 이라 부른다
- 명령어 인출(instruction fetch) 단계와 명령어 실행(execution) 단계로 구성
CPU 내부 레지스터
- 프로그램 카운터(Program Counter: PC)
- 다음에 인출될 명령어의 주소를 가지고 있는 레지스터
- 각 명령어 인출 후에 자동으로 1 증가
- 분기(branch) 명령어가 실행되는 경우 그 목적지 주소로 갱신
- 누산기(Accumulator: AC)
- 데이터를 일시적으로 저장하는 레지스터
- 명령어 레지스터(Instruction Register: IR)
- 가장 최근에 인출된 명령어가 저장되어 있는 레지스터
- 기억장치 주소 레지스터(Memory Address Register: MAR)
- 프로그램 카운터(PC)에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터
- 즉, 이 레지스터의 출력 선들이 주소 버스 선들과 직접 접속
- 기억장치 버퍼 레지스터(Memory Buffer Register: MBR)
- 기억장치에 저장될 데이터 혹은 기억장치로부터 읽혀진 데이터가 일시적으로 저장되는 버 레지스터
- 이 레지스터의 입력 및 출력 선들은 데이터 버스 선들과 직접 접속
인출 사이클
- CPU는 프로그램 카운터(PC)가 가리키는 기억장치의 위치로부터 명령어를 인출해 온다
- CPU는 PC의 내용을 1 증가시킴으로써 명령어들을 기억장치에 저장되어 있는 순서대로 읽어올 수 있도록 해준다
- 어떤 컴퓨터에서 현재 PC의 내용이 '215'다
- 명령어 사이클이 시작되면 CPU는 기억장치의 215번지에 저장되어 있는 명령어를 인출한다
- PC의 내용을 '216'으로 증가시킨다
- 이러한 과정들을 반복하며 PC를 증가시키며 차례때로 명령어들을 인출한다
T0 : MAR ← PC
T1 : MBR ← M[MAR], PC ← PC+1
T2 : IR ← MBR
실행 사이클
- CPU가 인출된 명령어 코드를 해독(decode)하고, 그 결과에 따라 필요한 연산을 수행
- 데이터 이동/처리/저장/제어 연산을 수행
- ADD addr 명령어 연산
T0 : MAR ← IR(Addr)
T1 : MBR ← M[MAR]
T2 : AC ← AC + MBR
- 첫 번째 주기에서 명령어 레지스터 IR에 적재된 명령어의 오퍼랜드인 주소 (addr)를 통하여 MAR를 통하여 기억장치로 보낸다
- 두 번째 주기에서는 그 주소가 지정하는 기억 장소로부터 데이터를 인출하여 MBR에 저장한다
- 그 데이터를 세 번째 주기에 AC 레지스터에 적재함으로써 LOAD 명령어의 실행이 완료된다.