[시스템] CPU정리② - 레지스터와 CPU 동작방법

이전글 : [시스템] CPU정리① - CPU 내부 들여다보기 + CPU꿀정보

 

 

레지스터 종류

o CPU 전용 레지스터(Invisible) : PC, AC, MAR, MBR, IR

o USER 레지스터(visible) : 프로그램 시 사용 가능

 

 

CPU 내부 

 

CPU 전용 레지스터

 

o Accumulator(AC, 누산기) : 데이터를 일시 저장하는 레지스터

기억장치로부터의 읽어온 데이터와 누산기에 적재되어 있던 데이터가 지정된 연산을 수행한 후 그 결과 값을 다시 누산기에 적재한다누산기 내용을 전부 지워 0으로 만들 수 있으며왼쪽이나 오른쪽으로 몇 자리씩 움직일 수도 있다누산기의 비트 수는 CPU가 한 번에 처리할 수 있는 데이터 비트 수인 word의 길이와 같다.

- 데이터 일시저장

- AC <- AC의 현재 값 + 메모리로부터 읽어온 값

 

o Program Counter(PC, 프로그램 카운터) : 다음에 수행될 명령어의 주소를 가지고 있는 레지스터

PC 값은 word의 크기에 따라 또는 명령어 길이(바이트 수)만큼 씩 증가되어 기억장치에 저장되어 있는 명령어를 연속적으로 수행한다그러나 만일 분기 명령어가 실행되는 경우에는 그 목적지 주소로 갱신된다.

- 다음에 수행될 명령어 주소

- 인터럽트

- CPU 명령처리순서

 

o Instruction Register(IR, 명령어 레지스터) : 현재 실행 중인 명령어를 기억하고 있는 레지스터

 

o Memory Address Register(MAR, 기억장치주소 레지스터) : 다음에 수행 될 명령어를 인출하기 위해 현재 PC에 들어있는 내용(주소)이 시스템 주소버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터

- (주소버스), PC -> MAR

 

o Memory Buffer Register(기억장치 버퍼 레지스터) 기억장치로 쓰일 데이터나 기억장치로부터 읽어온 데이터를 임시로 저장하는 레지스터

- (데이터버스), MAR의 실제 콘텐츠(데이터, 명령어)

- Memory와 CPU의 인터페이스

 

o Index Register(인덱스 레지스터) : 인덱스 주소지정방식에서 사용되는 레지스터

 

o Stack Pointer(스택 포인터)

- 스택 주소지정 방식에서 사용되어지며, 스택의 최상위를 지정

 

o Status Register(상태 레지스터) (=psw program status word)

- 모든 정보를 비트단위로, 하드웨어적으로 1 아니면 0으로 셋팅 시켜 현재 상태를 표시

 

 

* Buffer버퍼는 A와 B 사이의 인터페이스 역할

- 접근속도·처리속도 상이할 때,  실행환경 경계가 다를 때 사용

 

* CPU에서는 변수 사용 불가, 오직 레지스터에서만 변수 사용

 

 

 

중앙처리장치의 동작

 

 

 

 

1) 명령 Instruction Cycle

2) 인출 Fetch Cycle : Instruction from memory

3) 수행 ExecutionCycle : Execute by ALU

4) 간접 Indirect Cycle : Indirectly access the data

5) 인터럽트 Interrupt Cycle

 

 

 

 

 

 

 

* 인터럽트 사이클이 수행되지 않으면 새로운 일을 수행하기 위해 실행중이던 일이 모두 끝날 때까지 기다려야함

→ 하던 일을 빠져나오게 하고 새로운 일을 수행한 후 다시 돌아와서 하던 일을 처리함으로써 효율을 높임

 

동작흐름

o Fetch → Execute : 명령어·데이터 실행

o Execute → Fetch : 저장

o Fetch → Indirect : (직접 접근할 수 없는) 데이터 

o Indirect → Execute : Indirect로 얻은 데이터 실행

o Execute → Interrupt : 인터럽트 요청이 들어오면 현재 명령어 실행 끝낸 후 CPU는 다른 프로그램을 실행한다. 

 

 

* A = 3 ; 직접 데이터 접근 방식

* A = B[3] ; 간접 데이터 접근 방식

 

 

* 직접 접근 : CPU가 직접 접근(↔ Indirect)

 

 

 

레지스터를 활용한 CPU 동작 (마이크로 연산 표기)

 

인출 사이클

기억장치의 지정된 위치로부터 CPU로 명령어를 가져오는 단계 (Memory → IR)

 

C0 : MAR ← PC

C1 : MBR ← M(MAR), PC ← PC+1

C2 : IR ← MBR

 

 

* CU, Decoding with IR : CPU는 IR(명령어 레지스터)에 어떤 명령어가 들어있는지 알 수 없으므로 CU(제어장치)가 명령어 포맷에 따라 명령어가 어떤 연산을 요청했는지 판단한다.

* PC(프로그램 카운터) + 1 : 1은 다음 명령어를 뜻하는 상징, 명령어 길이만큼 더해준다

 

* ( ) : 내용을 의미,  add : 그냥 주소

- (add) : 그 주소에 있는 내용

- OPR( ) : 명령어 레지스터 안의 내용

 

 

실행 사이클

인출된 명령어를 해독하고 직접 명령을 실행하는 사이클

Decoding instruction in IR → Executing ALU by CU

 

* Instruction : Operator by ALU(ACC참조) + operand by user

 

 

LDA(Load Address) 명령

C0 : MAR ← IR(addr)

C1 : MBR ← M(MAR)

C2 : AC ← MBR

 

ADD 명령

C0 : MAR ← IR(addr)

C1 : MBR ← M(MAR)

C2 : AC ← AC + MBR

 

STA(Store AC) 명령

C0 : MAR ← IR(addr)

C1 : MBR ← AC

C2 : M(MAR) ← MBR

 

 

* 예시 

A = A(ope1) + B(ope2) 계산

 

MAR ← OPR(ope1)

MBR ← M(MAR)

AC ← MBR             // AC ← A

 

MAR ← OPR(ope2)

MBR ← M(MAR)

AC ← AC + MBR    // AC 최종 값

 

MBR ← AC

MAR ← OPR(ope1)

M(MAR) ← MBR    // A 위치에 최종 AC 값 저장

 

 

BUN(Branch Uncondition; not step by step) 명령

C0 : PC ← IR(addr)  // pc에 적용시키면 된다! pc값만 바꿔줌

 

* 예시

BUN abc : abc의 주소가 PC값으로 들어간다!

 

 

 

인터럽트 사이클

- 인터럽트 발생 시 현재 수행 중이던 처리 과정을 저장한 후에 인터럽트 사이클 시작

- 처리 끝나면 원래의 프로그램으로 복귀

 

* 인터럽트 : 현 사이클과 관계없이 CPU의 정상적인 처리를 방해하는 예기치 않았던 사건

Short Time-Job이 Long Time-Job을 기다리지 않고 CPU효율적으로 수행

 

 

간접 사이클

인출 사이클에서 읽어 들인 명령어가 간접 주소지정 방식의 명령어일 경우에 기억장치로부터 유효주소를 읽어오는 과정

- 주소를 읽어 와야 실행할 수 있기 때문에 인출사이클과 실행사이클 사이에 위치



반응형
그리드형

댓글

❤️김세인트가 사랑으로 키웁니다❤️