반응형
CPU의 기본 구조
CPU는 기억장치에 저장되어 있는 프로그램 코드(명령어)들을 실행함으로써 프로그램 수행
CPU의 주요 명령어 구분
- 명령어 인출 (Instruction Fetch, IF) : 기억장치로부터 명령어를 읽음
- 명령어 해독(Instruction Decode, ID) : 수행해야 할 동작을 결정하기 위하 여 명령어를 해독
- 위의 두 기능은 모든 명령어들에 대하여 공통적으로 수행
- 데이터 인출(Data Fetch, DF) : 명령어 실행을 위하여 데이터가 필요한 경 우에는 기억장치 혹은 I/O 장치로부터 그 데이터를 읽음
- 데이터 처리(Data Process, DP) : 데이터에 대한 산술적 혹은 논리적 연산을 수행
- 데이터 저장(Data Store, DS) : 수행한 결과를 저장
- 위의 기능은 명령어에 따라 필요한 경우에만 수행
산술논리연산장치(Arithmetic and Logical Unit: ALU)
레지스터 세트(Register Set)
제어 유니트(Control Unit, 제어 장치)
CPU 내부 버스(CPU internal bus)

산술논리연산장치(ALU)
- 각종 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진 하드웨어 모듈
- 산술 연산: 덧셈, 뺄셈, 곱셈, 나눗셈 등
- 논리 연산: AND, OR, NOT, XOR 등

레지스터 세트(Register Set)
- CPU 내부에 위치한 기억장치로서, 액세스 속도가 가장 빠른 기억장치
- CPU가 사용하는 데이터와 명령어를 신속하게 읽기, 저장, 전송에 사용
- CPU 내부에 포함할 수 있는 레지스터들의 수가 제한됨
- 특수 목적용 레지스터들과 적은 수의 일반 목적용(데이터, 범용) 레지스터들
- 특수 목적용 레지스터 종류
- 누산기(Accumulator, AC)
- 프로그램 카운터(Program Counter, PC)
- 명령어 레지스터(Instruction Register, IR)
- 메모리 버퍼 레지스터(Memory Buffer Register, MBR)
- 메모리 주소 레지스터(Memory Address Register, MAR)
- 스택 포인터(Stack Pointer, SP)
- 인덱스 레지스터(Index Register, IX)
제어 유니트(Control Unit, 제어 장치)
- 프로그램 코드(명령어)를 해석하고, 그것을 실행하기 위한 제어 신호들 (control signals)을 순차적으로 발생하는 하드웨어 모듈
CPU 내부 버스(CPU internal bus)
- ALU와 레지스터들 간의 데이터 이동을 위한 데이터 선들과 제어 유니트 로부터 발생되는 제어 신호 선들로 구성된 내부 버스
- 외부의 시스템 버스들과는 직접 연결되지 않으며, 반드시 버퍼 레지스터 (MBR, MAR)들 혹은 시스템 버스 인터페이스 회로를 통하여 시스템 버스 와 접속
명령어 실행
CPU는 기억장치에 저장되어 있는 명령어들을 인출하여 실행함으로써 실제적인 작업을 수행
명령어 사이클(instruction cycle)
- Cpu가 한 개의 명령어를 실행하는 데 필요한 전체 처리 과정
- CPU가 프로그램 실행을 시작한 순간부터 전원을 끄거나 회복 불가능한 오류가 발생하여 중단될 때까지 반복
두 개의 부사이클(sub-cycle)들로 분리
- 인출 사이클(fetch cycle) : CPU가 기억장치로부터 명령어를 읽어오는 단계
- 실행 사이클(execution cycle) : 명령어를 실행하는 단계
기본 명령어 사이클

명령어 실행에 필요한 CPU 내부 레지스터들
프로그램 카운터(Program Counter, PC)
- 다음에 인출할 명령어의 주소를 가지고 있는 레지스터
- 각 명령어가 인출된 후에는 자동적으로 일정 크기(한 명령어 길이)만큼 증가
- 분기(branch) 명령어가 실행되는 경우에는 목적지 주소로 갱신
누산기(Accumulator, AC)
- 데이터를 일시적으로 저장하는 레지스터
- ALU의 산술 연산과 논리 연산 과정에 사용
- 레지스터의 길이는 CPU가 한 번에 처리할 수 있는 데이터 비트 수(단어 길이) 와 동일
명령어 레지스터(Instruction Register, IR)
- 가장 최근에 인출된 명령어 코드가 저장되어 있는 레지스터
- 제어 장치는 IR에서 명령어를 읽어 와서 해독하고 명령을 수행하기 위해 컴퓨 터의 각 장치에 제어신호 전송
기억장치 주소 레지스터(Memory Address Register, MAR)
- PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으 로 저장되는 주소 레지스터
기억장치 버퍼 레지스터(Memory Buffer Register, MBR)
- 기억장치 데이터 레지스터(Memory Data Register, MDR)라고도 불림
- 기억장치에 쓰여질 데이터 혹은 기억장치로부터 읽혀진 데이터를 일시적 으로 저장하는 버퍼 레지스터
기타 CPU 내부 레지스터들
데이터 레지스터(Data Register, 범용 레지스터)
- CPU내의 데이터를 일시적으로 저장하기 위한 레지스터
입출력 주소 레지스터(I/O Address Register, I/O AR)
- 특정 I/O 장치의 주소를 지정하는 데 사용
입출력 버퍼 레지스터(I/O Buffer Register, I/O BR)
- I/O 모듈과 CPU 간에 데이터를 교환하는 데 사용
스택 제어 레지스터(Stack Control Register, Stack Pointer)
- 메모리의 한 블록이며, 데이터는 후입 선출(Last In-First Out, LIFO)
- 복귀할 주소 정보를 저장
상태 레지스터(Status Register, SR)
- CPU가 작동하는 동안 특정 조건의 발생을 표시하는 데 사용
- 1바이트 또는 2바이트인 특수 목적용 레지스터
- 명령어 실행 결과에 따른 조건 플래그(condition flag)들 저장
- [예] 산술 연산 또는 비교 결과로 제로 값이 누산기에 입력되면 제로 플래그(Z)를 1로 설정
- 플래그 레지스터(Flag Register, FR), 프로그램 상태 워드(Program Status Word, PSW)라고도 함

상태 레지스터(status register)
조건 플래그의 종류
- 부호(S) 플래그 : 직전에 수행된 산술연산 결과값의 부호 비트를 저장 (양수: 0, 음수: 1)
- 제로(Z) 플래그 : 연산 결과값이 0 이면, 1로 세트
- 올림수(C) 플래그 : 덧셈이나 뺄셈에서 올림수(carry)나 빌림수(borrow)가 발생 한 경우에 1로 세트
- 동등(E) 플래그 : 두 수를 비교한 결과가 같게 나왔을 경우에 1로 세트
- 오버플로우(V) 플래그 : 산술 연산 과정에서 오버플로우가 발생한 경우에 1로 세트
- 인터럽트(I) 플래그
- 인터럽트 가능(interrupt enabled) 상태이면, 1으로 세트
- 인터럽트 불가능(interrupt disabled) 상태이면, 0로 세트
- 슈퍼바이저(P) 플래그
- CPU의 실행 모드가 슈퍼바이저 모드(supervisor mode)이면, 1로 세트
- 사용자 모드(user mode)이면, 0으로 세트