◎ CPU의 구성
- 산술논리 연산장치 : 데이터의 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산과 AND, OR 같은 논리 연산을 수행
- 제어장치 : CPU에서 작업을 지시
- 레지스터 : CPU 내에 데이터를 임시로 보관
◎ 명령어 실행 5단계
- IF (Instruction Fetch) : 명령어 인출
- ID (Instruction Decode) : 명령어 해독
- EXE (Execution) : 실행
- MEM (Memory) : 메모리로 이동
- WB (Write Back) : 쓰기 및 저장
◎ CPU의 동작
CPU의 명령어 처리 과정 (덧셈 처리 과정)
LOAD mem(100), register 2
LOAD mem(120), register 3
ADD register 5, register 2, register 3
MOVE register 5, mem(160)
- 메모리 100번지 내용을 register 2로 이동
- 메모리 120번지 내용을 register 3로 이동
- R2, R3는 덧셈을 하기 전에 데이터를 임시로 보관하는 곳을 의미
- register 2, register 3 값을 더하라. 그리고 더한 값은 register 5에 임시 저장함
- register 5에 저장된 값을 메모리 160번지로 옮긴다.
LOAD 과정
LOAD mem(100), register 2
...
- 명령어 실행
- 프로그램 카운터(PC)에는 실행해야 하는 코드의 행 번호가 저장되어 있다.
- 1이 제어 장치에 전손되면 1행이 실행됨
- 명령어 레지스터(IR)에는 LOAD가 탑재된다.
- 제어 신호 전송
- 제어 장치가 명령어 레지스터(IR)에 있는 명령 LOAD를 해석
- 메모리 100번지에 있는 데이터를 가져오라는 제어 신호를 보냄
- CPU로 데이터를 옮기기
- 메모리 주소 레지스터에 100이 저장
- "메모리 관리자"가 메모리 주소에 있는 100을 읽음
- "메모리 관리자"가 메모리 주소 100번지에 저장된 값 2를 메모리 버퍼 레지스터(MER)로 보냄
- 레지스터는 CPU가 관리하는 영역이기 때문에 메모리 관리자가 직접 숫자 2를 레지스터로 직접 옮길 수는 없다.
- 레지스터로 데이터 옮기기
- "제어장치"가 메모리 버퍼 레지스터(MBR)에 있는 값을 레지스터로 올긺
분기문 처리가 있는 경우
if (D2 - D3 > 0)
goto 100;
else
goto 200;
- 프로그램 상태 레지스터(PSR)에 D2 - D3의 결과를 임시로 저장했다가 해당 결돠를 제어장치에 알려주어 몇번 행으로 이동할지 결정
- 프로그램 상태 레지스터(PSR)는 산술논리 연산장치(ALU)와 연결되어 연산 결과를 저장
◎ 주요 레지스터의 종류와 특징
-
일반 레지스터
일반 레지스터 | 특징 |
---|
데이터 리제스터(DR) | CPU가 명령을 처리하는데 필요한 데이터를 임시 저장 |
주소 레지스터(AR) | 데이터 또는 명령어가 저장된 메모리의 주소를 저장 |
-
특수 레지스터
특수 레지스터 | 특징 |
---|
프로그램 카운터(PC) | 다음에 실행할 명령어의 위치 (코드의 행 번호)를 저장 |
명령어 레지스터(IR) | 현재 실행중인 명령어를 저장 |
메모리 주소 레지스터(MAR) | 메모리 주소 관리자가 접근해야할 메모리의 주소를 저장 |
메모리 버퍼 레지스터(MBR) | 메모리 관리자가 메모리에서 가져온 데이터를 임시로 저장 |
프로그램 상태 레지스터(PSR) | 연산 결과(양수, 음수 등)을 저장한다 |
◎ 버스
버스의 종류
- 제어 버스
- CPU가 메모리와 주변 장치에 제어 신호를 보내기 위해 사용
- 메모리와 주변장치에서도 작업이 완료되거나 오류를 발생하면 제어 신호를 보냄 (양방향)
- 주소 버스
- 메모리 주소 레지스터와 연결됨
- 메모리나 주변장치에 데이터를 읽거나 쓸 때 위치 정보를 보내기 위해 사용 (단방향)
- 데이터 버스
- 메모리 버퍼 레지스터와 연결
- 데이터의 이동이 양방향으로 이루어짐
버스의 대역폭
- 워드(word) : 한 번에 전달할 수 있는 데이터의 최대 크기
= CPU가 한번에 처리할 수 있는 데이터의 크기
- 버스의 대역폭, 레지스터의 크기, 메모리에 한 번에 저장할 수 있는 데이터의 크기는 항상 같음
- 예시
- 32bit memory : 데이터를 읽거나 쓸 때 한번에 최대 32bit,
레지스터의 크기 32bit, 버스의 대역폭도 32bit